from unittest import mock import faker import pytest from fansifter_common.adapters.ows_account import Vendor from fansifter_common.adapters.ows_users import Identity from fansifter_common.core.enums import Brand from fansifter_common.legal_info.types import LegalEntity from fansifter_common.translation.types import Terms from email_campaigns.campaigns.handlers import GetCampaignPrivacyFooterHandler from email_campaigns.campaigns.models import EmailCampaign from email_campaigns.emails.handlers import GetEmailPrivacyFooterRequest from email_campaigns.emails.models import EmailDomain from tests.unit.types import BuildModel, CreateModel class TestGetCampaignPrivacyFooterHandler: @pytest.mark.db def test_get_campaign_privacy_footer( self, handler: GetCampaignPrivacyFooterHandler, create_model: CreateModel, build_model: BuildModel, ows_account_client_mock: mock.MagicMock, ows_users_client_mock: mock.MagicMock, sendgrid_client_mock: mock.MagicMock, legal_info_service_mock: mock.MagicMock, translation_service_mock: mock.MagicMock, identity_id: str, faker: faker.Faker, ) -> None: email_domain = create_model(EmailDomain, brand=Brand.THEORCHARD) campaign = create_model( EmailCampaign, email_domain=email_domain, ) vendor = build_model(Vendor) identity = build_model(Identity) privacy_footer = faker.pystr() terms = build_model(Terms) legal_entity = build_model(LegalEntity) privacy_links_block = faker.pystr() translation_service_mock.get_translations_by_country_code.return_value = { "en": terms } legal_info_service_mock.get_legal_entity.return_value = legal_entity legal_info_service_mock.prepare_privacy_links_for_country.return_value = ( privacy_links_block ) ows_account_client_mock.get_vendor.return_value = vendor ows_users_client_mock.get_identity.return_value = identity sendgrid_client_mock.get_user_privacy_footer_block.return_value = privacy_footer footer = handler.handle( GetEmailPrivacyFooterRequest( identity_id=identity_id, email_id=campaign.id, ) ) assert footer == privacy_footer sendgrid_client_mock.get_user_privacy_footer_block.assert_called_with( email=identity.email, privacy_links_block=privacy_links_block, opt_in_info=terms.optInInfo, opt_in_info_external=terms.optInInfoExternal, unsubscribe_text=terms.unsubscribe, unsubscribe_url="#", vendor_id=vendor.vendor_id, vendor_name=vendor.name, legal_entity=legal_entity, brand=email_domain.brand, preview=True, )