import pytest from dmp.ad_reporting.exceptions import ( AdReportingCampaignNotFoundError, AdReportingReportLastCampaignDeleteError, ) from dmp.ad_reporting.handlers import ( RemoveAdReportingReportCampaignHandler, RemoveAdReportingReportCampaignRequest, ) from dmp.ad_reporting.models import AdReportingCampaignDbt, AdReportingReport from tests.unit.faker import FakerTyped from tests.unit.types import CreateReportingModel class TestRemoveAdReportingReportCampaignHandler: @pytest.mark.db def test_remove_report_campaign( self, handler: RemoveAdReportingReportCampaignHandler, create_reporting_model: CreateReportingModel, identity_id: str, ) -> None: campaign_1 = create_reporting_model(AdReportingCampaignDbt) campaign_2 = create_reporting_model(AdReportingCampaignDbt) report = create_reporting_model( AdReportingReport, identity_id=identity_id, campaign_ids={campaign_1.id, campaign_2.id}, ) handler.handle( RemoveAdReportingReportCampaignRequest( identity_id=identity_id, report_id=report.id, campaign_id=campaign_1.id, ) ) assert report.campaign_ids == [campaign_2.id] @pytest.mark.db def test_remove_report_campaign_not_found( self, handler: RemoveAdReportingReportCampaignHandler, create_reporting_model: CreateReportingModel, identity_id: str, fake: FakerTyped, ) -> None: report = create_reporting_model(AdReportingReport, identity_id=identity_id) with pytest.raises(AdReportingCampaignNotFoundError): handler.handle( RemoveAdReportingReportCampaignRequest( identity_id=identity_id, report_id=report.id, campaign_id=fake.uuid4_string(), ) ) @pytest.mark.db def test_remove_report_last_campaign( self, handler: RemoveAdReportingReportCampaignHandler, create_reporting_model: CreateReportingModel, identity_id: str, ) -> None: campaign = create_reporting_model(AdReportingCampaignDbt) report = create_reporting_model( AdReportingReport, identity_id=identity_id, campaign_ids={campaign.id}, ) with pytest.raises(AdReportingReportLastCampaignDeleteError): handler.handle( RemoveAdReportingReportCampaignRequest( identity_id=identity_id, report_id=report.id, campaign_id=campaign.id, ) )