from unittest import mock import faker import pytest from fansifter_common.auth.account import Account, AccountAccess from email_campaigns.automated.handlers import ( GetSourceCampaignsHandler, GetSourceCampaignsRequest, ) from email_campaigns.automated.models import SourceCampaign from tests.unit.types import CreateModel class TestGetSourceCampaignsHandler: @pytest.mark.db def test_get_source_campaigns_with_search( self, handler: GetSourceCampaignsHandler, create_model: CreateModel, auth_service_mock: mock.MagicMock, faker: faker.Faker, identity_id: str, ) -> None: vendor_id = faker.pyint() source_campaign_1 = create_model( SourceCampaign, name="Test Campaign One", vendor_id=vendor_id, subaccount_id=0, ) source_campaign_2 = create_model( SourceCampaign, name="Test Campaign Two", vendor_id=vendor_id, subaccount_id=0, ) create_model( SourceCampaign, name="Another Campaign", vendor_id=vendor_id, subaccount_id=0, ) auth_service_mock.authorize_for_permission = mock.Mock( return_value=AccountAccess( accounts=[Account(vendor_id=vendor_id, subaccount_id=0)] ) ) response = handler.handle( GetSourceCampaignsRequest( identity_id=identity_id, search="Test", vendor_id=None, subaccount_id=None, current_automated_email_id=None, status=None, email_type=None, order_by=["name.asc"], limit=50, offset=0, ) ) assert response.total == 2 assert len(response.items) == 2 assert response.items[0].id == source_campaign_1.id assert response.items[1].id == source_campaign_2.id @pytest.mark.db def test_get_source_campaigns_filters_out_disallowed_sources( self, handler: GetSourceCampaignsHandler, create_model: CreateModel, auth_service_mock: mock.MagicMock, faker: faker.Faker, identity_id: str, ) -> None: vendor_id = faker.pyint() sc_smf = create_model( SourceCampaign, vendor_id=vendor_id, subaccount_id=0, source="SMF", ) sc_tunespeak = create_model( SourceCampaign, vendor_id=vendor_id, subaccount_id=0, source="Tunespeak", ) create_model( SourceCampaign, vendor_id=vendor_id, subaccount_id=0, source="Wyng", ) create_model( SourceCampaign, vendor_id=vendor_id, subaccount_id=0, source="Offerpop", ) create_model( SourceCampaign, vendor_id=vendor_id, subaccount_id=0, source="Webapp", ) auth_service_mock.authorize_for_permission = mock.Mock( return_value=AccountAccess( accounts=[Account(vendor_id=vendor_id, subaccount_id=0)] ) ) response = handler.handle( GetSourceCampaignsRequest( identity_id=identity_id, search=None, vendor_id=None, subaccount_id=None, current_automated_email_id=None, status=None, email_type=None, order_by=["name.asc"], limit=50, offset=0, ) ) assert response.total == 2 assert {item.id for item in response.items} == {sc_smf.id, sc_tunespeak.id}