import pytest from dmp.ad_reporting.exceptions import ( AdReportingInvalidCampaignIdError, AdReportingReportUniqueNameError, ) from dmp.ad_reporting.models import AdReportingCampaignDbt, AdReportingReport from dmp.ad_reporting.validators import AdReportingReportValidator from tests.unit.faker import FakerTyped from tests.unit.types import CreateReportingModel class TestAdReportingReportValidator: @pytest.mark.db def test_validate_ad_reporting_report_name( self, validator: AdReportingReportValidator, ) -> None: validator.validate_name(name="Test Report", identity_id="test_identity_id") assert True @pytest.mark.db def test_validate_ad_reporting_report_name_invalid( self, validator: AdReportingReportValidator, create_reporting_model: CreateReportingModel, identity_id: str, ) -> None: create_reporting_model( AdReportingReport, name="Test Report", identity_id=identity_id ) with pytest.raises(AdReportingReportUniqueNameError): validator.validate_name(name=" test report", identity_id=identity_id) @pytest.mark.db def test_validate_ad_reporting_report_allowed_campaign_ids( self, validator: AdReportingReportValidator, create_reporting_model: CreateReportingModel, ) -> None: campaign_1 = create_reporting_model(AdReportingCampaignDbt) campaign_2 = create_reporting_model(AdReportingCampaignDbt) validator.validate_allowed_campaign_ids( campaign_ids={campaign_1.id, campaign_2.id}, account_ids={campaign_1.account_id, campaign_2.account_id}, ) assert True @pytest.mark.db def test_validate_ad_reporting_report_allowed_campaign_ids_invalid( self, validator: AdReportingReportValidator, create_reporting_model: CreateReportingModel, fake: FakerTyped, ) -> None: campaign = create_reporting_model(AdReportingCampaignDbt) invalid_campaign_id = fake.pystr() with pytest.raises(AdReportingInvalidCampaignIdError) as exc_info: validator.validate_allowed_campaign_ids( campaign_ids={campaign.id, invalid_campaign_id}, account_ids={campaign.account_id, "test_account_id_2"}, ) assert exc_info.value.campaign_id == invalid_campaign_id