from unittest import mock import faker import pytest from dirty_equals import IsList from fansifter_common.auth.account import Account, AccountAccess from email_campaigns.campaigns.handlers import ( GetCampaignsHandler, GetCampaignsRequest, ) from email_campaigns.campaigns.models import EmailCampaign from tests.unit.types import CreateModel class TestGetCampaignsHandler: @pytest.mark.db def test_get_campaigns( self, handler: GetCampaignsHandler, create_model: CreateModel, auth_service_mock: mock.MagicMock, faker: faker.Faker, identity_id: str, ) -> None: vendor_id_1 = faker.pyint() vendor_id_2 = faker.pyint() email_campaign_1 = create_model( EmailCampaign, name="Test Campaign", vendor_id=vendor_id_1, subaccount_id=0, ) email_campaign_2 = create_model( EmailCampaign, name="Test Campaign 2", vendor_id=vendor_id_2, subaccount_id=0, ) create_model(EmailCampaign, name="Test Campaign 3") auth_service_mock.authorize_for_permission = mock.Mock( return_value=AccountAccess( accounts=[ Account(vendor_id=vendor_id_1, subaccount_id=0), Account(vendor_id=vendor_id_2, subaccount_id=0), ], ) ) response = handler.handle( GetCampaignsRequest( identity_id=identity_id, search=None, vendor_id=None, subaccount_id=None, fandata_list_ids=None, statuses=None, audience_id=None, order_by=["sendAt.desc"], limit=10, offset=0, ) ) assert response.total == 2 assert response.items == IsList( email_campaign_1, email_campaign_2, check_order=False ) @pytest.mark.db def test_get_campaigns_with_audience_id( self, handler: GetCampaignsHandler, create_model: CreateModel, auth_service_mock: mock.MagicMock, faker: faker.Faker, identity_id: str, ) -> None: vendor_id = faker.pyint() audience_id = "test-audience-id" email_campaign_1 = create_model( EmailCampaign, name="Campaign with Audience", vendor_id=vendor_id, subaccount_id=0, audience_id=audience_id, ) create_model( EmailCampaign, name="Campaign without Audience", vendor_id=vendor_id, subaccount_id=0, audience_id=None, ) create_model( EmailCampaign, name="Campaign with Different Audience", vendor_id=vendor_id, subaccount_id=0, audience_id="other-audience-id", ) auth_service_mock.authorize_for_permission = mock.Mock( return_value=AccountAccess( accounts=[ Account(vendor_id=vendor_id, subaccount_id=0), ], ) ) response = handler.handle( GetCampaignsRequest( identity_id=identity_id, search=None, vendor_id=None, subaccount_id=None, fandata_list_ids=None, statuses=None, audience_id=audience_id, order_by=["sendAt.desc"], limit=10, offset=0, ) ) assert response.total == 1 assert response.items == [email_campaign_1]