from faker import Faker from pytest_mock import MockerFixture from ows_text_campaigns.campaigns.enums import MessageChannel, ShorteningMethod from ows_text_campaigns.campaigns.services import CampaignService 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 class TestCampaignService: def test_create_attachment_key( self, service: CampaignService, faker: Faker, mocker: MockerFixture ) -> None: campaign_id = faker.uuid4() mocker.patch( "ows_text_campaigns.assets.utils.unique_hash", return_value="abc123", ) attachment_key = service.create_attachment_key(campaign_id, filename="test.jpg") assert attachment_key == f"assets/campaigns/{campaign_id}/test__abc123.jpg" def test_render_message_for_sms(self, service: CampaignService) -> None: content = "

Hello, World!

" message = service.render_message_for_channel( content=content, channel=MessageChannel.SMS, ) assert message == "Hello, World!\nReply STOP to unsubscribe." def test_render_message_for_whatsapp_channel( self, service: CampaignService ) -> None: content = "Hello, World!" message = service.render_message_for_channel( content=content, channel=MessageChannel.WHATSAPP, ) assert message == "*Hello, World!*\nReply STOP to unsubscribe." def test_render_message_for_whatsapp_channel_with_personalized_link( self, service: CampaignService, build_model: BuildModel, ) -> None: personalized_url = build_model( ShortenedUrl, domain="sme.com", method=ShorteningMethod.PERSONALIZED, ) content = f"Personalized link: {create_short_link_tag(personalized_url)}" shortened_personalized_url = "https://sme.com/fan-abc123" message = service.render_message_for_channel( content=content, channel=MessageChannel.WHATSAPP, shortened_urls={ personalized_url.id: shortened_personalized_url, }, ) assert message == ( f"Personalized link: {shortened_personalized_url}\nReply STOP to unsubscribe." )