from collections.abc import Iterator import faker import pytest from owsclient import OwsClient from owsclient.test import OwsClientMock from app.adapters.ows_text_campaigns import OwsTextCampaignsClient, RenderedMessage class TestOwsTextCampaignsClient: @pytest.fixture(scope="class") def ows_client(self) -> Iterator[OwsClient]: yield OwsClient(environment="test", service_name="ows-text-campaigns") @pytest.fixture(scope="class") def ows_text_campaigns_client( self, ows_client: OwsClient ) -> OwsTextCampaignsClient: return OwsTextCampaignsClient(ows_client=ows_client) def test_render_messages( self, ows_text_campaigns_client: OwsTextCampaignsClient, ows_client_mock: OwsClientMock, faker: faker.Faker, ) -> None: campaign_id = faker.uuid4() channel = "SMS" recepient = faker.phone_number() sender = faker.phone_number() message = faker.sentence() fan_id = faker.uuid4() ows_client_mock.post( "ows-text-campaigns", f"/campaigns/{campaign_id}/messages/batch-render", json={ "personalized_attributes": [ { "fan_id": fan_id, "channel": channel, "phone_number": recepient, } ] }, ).respond( status_code=200, json=[ { "fan_id": fan_id, "channel": channel, "recipient": recepient, "sender": sender, "message": message, "media_url": None, } ], ) result = ows_text_campaigns_client.render_messages( campaign_id, attributes=[ { "fan_id": fan_id, "channel": channel, "phone_number": recepient, } ], ) assert result == [ RenderedMessage( fan_id=fan_id, channel=channel, recipient=recepient, sender=sender, message=message, media_url=None, ) ]