from unittest import mock import faker import pytest from anydi import Container from fansifter_common.adapters.ows_account import Vendor from fansifter_common.legal_info.types import LegalEntity from email_campaigns.adapters.features import AUDIENCE_ENABLE_STRIPO_PLUGIN_V2 from email_campaigns.campaigns.handlers import SendTestCampaignEmailHandler from email_campaigns.campaigns.models import EmailCampaign from email_campaigns.emails.exceptions import ( EmailNotFoundError, EmailPrivacyFooterMissingError, ) from email_campaigns.emails.handlers import SendTestEmailRequest from email_campaigns.emails.models import EmailDomain from email_campaigns.emails.services import EmailSendService from tests.unit.types import BuildModel, CreateModel, EnableFeatures class TestSendTestCampaignEmailHandler: @pytest.mark.db def test_send_test_campaign_email( self, handler: SendTestCampaignEmailHandler, faker: faker.Faker, identity_id: str, ) -> None: with pytest.raises(EmailNotFoundError): handler.handle( SendTestEmailRequest( email_id=faker.pystr(), emails={faker.email(), faker.email()}, identity_id=identity_id, content=faker.pystr(), ) ) @pytest.mark.db def test_send_test_campaign_email_without_privacy_footer( self, handler: SendTestCampaignEmailHandler, faker: faker.Faker, create_model: CreateModel, identity_id: str, ) -> None: email_campaign = create_model(EmailCampaign, html_content="") with pytest.raises(EmailPrivacyFooterMissingError): handler.handle( SendTestEmailRequest( email_id=email_campaign.id, emails={faker.email(), faker.email()}, identity_id=identity_id, content=faker.pystr(), ) ) @pytest.mark.db def test_send_test_campaign_with_unapplied_changes_fetches_from_stripo( self, container: Container, handler: SendTestCampaignEmailHandler, faker: faker.Faker, create_model: CreateModel, identity_id: str, campaign_stripo_client_v2_mock: mock.MagicMock, stripo_client_mock: mock.MagicMock, enable_features: EnableFeatures, ) -> None: email_domain = create_model(EmailDomain) email_campaign = create_model( EmailCampaign, sender_name=faker.name(), subject=faker.sentence(), email_domain=email_domain, email_username=faker.user_name(), html_content=( "
" '' ), css_content="p{color:red}", has_unapplied_changes=True, ) new_html = ( "" '