import pytest from dmp.ad_reporting.enums import AdReportingPlatform from dmp.ad_reporting.exceptions import ( AdReportingAdSetNotFoundError, AdReportingReportNotFoundError, ) from dmp.ad_reporting.handlers import ( GetAdReportingReportAdSetHandler, GetAdReportingReportAdSetRequest, ) from dmp.ad_reporting.models import ( AdReportingAdSetDbt, AdReportingCampaignDbt, AdReportingReport, ) from dmp.meta.models import MetaAdAccount, MetaUserAdAccount from tests.unit.faker import FakerTyped from tests.unit.types import CreateModel, CreateReportingModel class TestGetAdReportingReportAdSetHandler: @pytest.mark.db def test_get_report_ad_set( self, handler: GetAdReportingReportAdSetHandler, create_model: CreateModel, create_reporting_model: CreateReportingModel, identity_id: str, ) -> None: ad_account = create_model(MetaAdAccount) create_model( MetaUserAdAccount, ad_account_id=ad_account.id, identity_id=identity_id, ) campaign = create_reporting_model( AdReportingCampaignDbt, account_id=ad_account.external_id, platform=AdReportingPlatform.META, ) ad_set = create_reporting_model( AdReportingAdSetDbt, campaign_id=campaign.id, platform=campaign.platform, ) report = create_reporting_model( AdReportingReport, identity_id=identity_id, campaign_ids={campaign.id}, ) result = handler.handle( GetAdReportingReportAdSetRequest( identity_id=identity_id, report_id=report.id, ad_set_id=ad_set.id, ) ) assert result.id == ad_set.id assert result.report_id == report.id assert result.report_name == report.name @pytest.mark.db def test_get_report_ad_set_report_ad_set_not_found( self, handler: GetAdReportingReportAdSetHandler, create_reporting_model: CreateReportingModel, identity_id: str, fake: FakerTyped, ) -> None: report = create_reporting_model( AdReportingReport, identity_id=identity_id, campaign_ids={}, ) with pytest.raises(AdReportingAdSetNotFoundError): handler.handle( GetAdReportingReportAdSetRequest( identity_id=identity_id, report_id=report.id, ad_set_id=fake.uuid4_string(), ) ) @pytest.mark.db def test_get_report_ad_set_report_not_found( self, handler: GetAdReportingReportAdSetHandler, identity_id: str, fake: FakerTyped, ) -> None: with pytest.raises(AdReportingReportNotFoundError): handler.handle( GetAdReportingReportAdSetRequest( identity_id=identity_id, report_id=fake.uuid4_string(), ad_set_id=fake.uuid4_string(), ) )