from unittest import mock import pytest from ows_text_campaigns.campaigns.enums import CampaignStatus, ShorteningMethod from ows_text_campaigns.campaigns.exceptions import CampaignMustBeDraftError from ows_text_campaigns.campaigns.handlers import ( DeleteCampaignHandler, DeleteCampaignRequest, ) from ows_text_campaigns.campaigns.models import Campaign from ows_text_campaigns.campaigns.types import ShortenedUrl from ows_text_campaigns.campaigns.utils import create_short_link_tag from tests.unit.types import BuildModel, CreateModel class TestDeleteCampaignContentHandler: @pytest.mark.db def test_delete_campaign( self, handler: DeleteCampaignHandler, create_model: CreateModel, identity_id: str, ) -> None: campaign = create_model( Campaign, status=CampaignStatus.DRAFT, ) handler.handle( DeleteCampaignRequest( identity_id=identity_id, campaign_id=campaign.id, ) ) assert True @pytest.mark.db def test_delete_campaign_must_be_draft( self, handler: DeleteCampaignHandler, create_model: CreateModel, identity_id: str, ) -> None: campaign = create_model(Campaign, status=CampaignStatus.SENT) with pytest.raises(CampaignMustBeDraftError): handler.handle( DeleteCampaignRequest( identity_id=identity_id, campaign_id=campaign.id, ) ) @pytest.mark.db def test_delete_campaign_with_standard_urls( self, handler: DeleteCampaignHandler, build_model: BuildModel, create_model: CreateModel, identity_id: str, ows_url_shortener_client_mock: mock.MagicMock, ) -> None: shortened_url = build_model( ShortenedUrl, path="path123", method=ShorteningMethod.STANDARD, ) campaign = create_model( Campaign, status=CampaignStatus.DRAFT, content=create_short_link_tag(shortened_url), ) handler.handle( DeleteCampaignRequest( identity_id=identity_id, campaign_id=campaign.id, ) ) ows_url_shortener_client_mock.delete_paths.assert_called_once_with( [shortened_url.path] ) assert True