from unittest import mock import pytest from fansifter_common.email import EmailType from email_campaigns.campaigns.enums import EmailCampaignStatus from email_campaigns.campaigns.exceptions import EmailCampaignMustBeDraftError from email_campaigns.campaigns.handlers import UpdateCampaignContentHandler from email_campaigns.campaigns.models import EmailCampaign from email_campaigns.emails.handlers import UpdateEmailContentRequest from tests.unit.types import CreateModel class TestUpdateCampaignContentHandler: @pytest.mark.db def test_update_campaign_content( self, handler: UpdateCampaignContentHandler, create_model: CreateModel, identity_id: str, campaign_public_preview_cache_mock: mock.MagicMock, ) -> None: # Reset mock to clear any previous calls campaign_public_preview_cache_mock.reset_mock() campaign = create_model( EmailCampaign, status=EmailCampaignStatus.DRAFT, ) html = "

html content

" css = "p { color: red; }" content = handler.handle( UpdateEmailContentRequest( identity_id=identity_id, email_id=campaign.id, html=html, css=css, ) ) assert content.html == campaign.preview.html == html assert content.css == campaign.preview.css == css # Verify cache was invalidated campaign_public_preview_cache_mock.delete.assert_called_once_with( campaign.id, EmailType.CAMPAIGN ) @pytest.mark.db def test_update_campaign_content_must_be_draft( self, handler: UpdateCampaignContentHandler, create_model: CreateModel, identity_id: str, ) -> None: campaign = create_model( EmailCampaign, status=EmailCampaignStatus.SENT, ) with pytest.raises(EmailCampaignMustBeDraftError): handler.handle( UpdateEmailContentRequest( identity_id=identity_id, email_id=campaign.id, html="

html content

", ) )