from unittest import mock import pytest from dmp.audiences.enums import AudienceExportStatus from dmp.audiences.exceptions import AudienceExportNotFoundError from dmp.audiences.handlers import ( GetAudienceExportHandler, GetAudienceExportRequest, GetAudienceExportResponse, ) from dmp.audiences.models import Audience, AudienceExport, AudienceSnapshot from tests.unit.faker import FakerTyped from tests.unit.types import CreateModel class TestGetAudienceExportHandler: @pytest.mark.db def test_get_audience_export_not_completed( self, handler: GetAudienceExportHandler, create_model: CreateModel, identity_id: str, ) -> None: export = create_model(AudienceExport) response = handler.handle( GetAudienceExportRequest( identity_id=identity_id, audience_id=export.audience_id, export_id=export.id, ) ) assert response == GetAudienceExportResponse( export=export, presigned_url=None, ) @pytest.mark.db def test_get_audience_export_completed( self, handler: GetAudienceExportHandler, s3_client_mock: mock.MagicMock, create_model: CreateModel, identity_id: str, fake: FakerTyped, ) -> None: export = create_model( AudienceExport, zip_key="test", status=AudienceExportStatus.COMPLETED ) presigned_url = fake.url() s3_client_mock.generate_presigned_url.return_value = presigned_url response = handler.handle( GetAudienceExportRequest( identity_id=identity_id, audience_id=export.audience_id, export_id=export.id, ) ) assert response.export == export assert response.presigned_url == presigned_url @pytest.mark.db def test_get_audience_export_no_snapshot( self, handler: GetAudienceExportHandler, create_model: CreateModel, identity_id: str, fake: FakerTyped, ) -> None: audience = create_model(Audience) with pytest.raises(AudienceExportNotFoundError): handler.handle( GetAudienceExportRequest( identity_id=identity_id, audience_id=audience.id, export_id=fake.uuid4_string(), ) ) @pytest.mark.db def test_get_audience_export_wrong_export_id( self, handler: GetAudienceExportHandler, create_model: CreateModel, identity_id: str, fake: FakerTyped, ) -> None: snapshot = create_model(AudienceSnapshot) with pytest.raises(AudienceExportNotFoundError): handler.handle( GetAudienceExportRequest( identity_id=identity_id, audience_id=snapshot.audience_id, export_id=fake.uuid4_string(), ) )