import pytest from dmp.songwhip.dtos import SongwhipCampaignType from dmp.songwhip.models import SongwhipCustomPageDbt, SongwhipPresavePageDbt from dmp.songwhip.repositories import SongwhipCampaignRepository from tests.unit.types import CreateReportingModel class TestSongwhipCampaignRepository: @pytest.mark.db def test_returns_presave_and_custom_pages( self, repository: SongwhipCampaignRepository, create_reporting_model: CreateReportingModel, ) -> None: presave = create_reporting_model(SongwhipPresavePageDbt) custom = create_reporting_model(SongwhipCustomPageDbt) result = repository.get_campaigns( vendor_ids=[presave.vendor_id], subaccount_ids=[presave.subaccount_id], global_participant_ids=None, campaign_ids=None, limit=50, ) result_ids = {r.id for r in result} assert presave.id in result_ids or custom.id in result_ids @pytest.mark.db def test_presave_type_is_set_correctly( self, repository: SongwhipCampaignRepository, create_reporting_model: CreateReportingModel, ) -> None: presave = create_reporting_model(SongwhipPresavePageDbt) result = repository.get_campaigns( vendor_ids=[presave.vendor_id], subaccount_ids=[presave.subaccount_id], global_participant_ids=[presave.global_participant_id], campaign_ids=None, limit=50, ) assert len(result) == 1 assert result[0].id == presave.id assert result[0].type == SongwhipCampaignType.SONGWHIP_PRESAVE @pytest.mark.db def test_custom_page_type_is_set_correctly( self, repository: SongwhipCampaignRepository, create_reporting_model: CreateReportingModel, ) -> None: custom = create_reporting_model(SongwhipCustomPageDbt) result = repository.get_campaigns( vendor_ids=[custom.vendor_id], subaccount_ids=[custom.subaccount_id], global_participant_ids=[custom.global_participant_id], campaign_ids=None, limit=50, ) assert len(result) == 1 assert result[0].id == custom.id assert result[0].type == SongwhipCampaignType.SONGWHIP_EXCLUSIVE_CONTENT @pytest.mark.db def test_filters_by_campaign_ids( self, repository: SongwhipCampaignRepository, create_reporting_model: CreateReportingModel, ) -> None: presave = create_reporting_model( SongwhipPresavePageDbt, vendor_id=1, subaccount_id=1 ) custom = create_reporting_model( SongwhipCustomPageDbt, vendor_id=1, subaccount_id=1 ) create_reporting_model(SongwhipPresavePageDbt, vendor_id=1, subaccount_id=1) result = repository.get_campaigns( vendor_ids=[1], subaccount_ids=[1], global_participant_ids=None, campaign_ids=[presave.id, custom.id], limit=50, ) assert len(result) == 2 result_ids = {r.id for r in result} assert result_ids == {presave.id, custom.id}