import json from collections.abc import Iterator import faker import httpx import pytest import respx from fansifter_common.adapters.stripo.v2_client import StripoV2Client @pytest.fixture def client() -> Iterator[StripoV2Client]: with StripoV2Client( base_url="https://gateway.test", coediting_url="https://coediting.test", client_id="test_client_id", client_secret="test_client_secret", ) as client: yield client def test_generate_auth_token( client: StripoV2Client, respx_mock: respx.MockRouter, faker: faker.Faker, ) -> None: auth_token = faker.pystr() user_id = faker.pystr() respx_mock.post( "https://gateway.test/api/v1/auth", json={ "pluginId": "test_client_id", "secretKey": "test_client_secret", "userId": user_id, "role": "USER", }, ).mock(return_value=httpx.Response(status_code=200, json={"token": auth_token})) result = client.generate_auth_token(user_id=user_id) assert result == auth_token def test_compress( client: StripoV2Client, respx_mock: respx.MockRouter, faker: faker.Faker, ) -> None: auth_token = faker.pystr() html = faker.pystr() css = faker.pystr() compressed_html = faker.pystr() respx_mock.post( "https://gateway.test/api/v1/auth", json={ "pluginId": "test_client_id", "secretKey": "test_client_secret", "role": "API", }, ).mock(return_value=httpx.Response(status_code=200, json={"token": auth_token})) respx_mock.post( "https://gateway.test/api/v1/cleaner/v1/compress", json={"html": html, "css": css, "minimize": True}, ).mock(return_value=httpx.Response(status_code=200, json={"html": compressed_html})) result = client.compress(html=html, css=css) assert result == compressed_html def test_get_html_css( client: StripoV2Client, respx_mock: respx.MockRouter, faker: faker.Faker, ) -> None: auth_token = faker.pystr() user_id = faker.pystr() email_id = faker.pystr() html = faker.pystr() css = faker.pystr() respx_mock.post( "https://gateway.test/api/v1/auth", json={ "pluginId": "test_client_id", "secretKey": "test_client_secret", "userId": user_id, "role": "USER", }, ).mock(return_value=httpx.Response(status_code=200, json={"token": auth_token})) respx_mock.get( "https://coediting.test/v1/email/html-css", headers__contains={ "ES-PLUGIN-AUTH": f"Bearer {auth_token}", "ES-PLUGIN-UI-DATA": json.dumps({"emailId": email_id}), }, ).mock( return_value=httpx.Response( status_code=200, json={"html": html, "css": css}, ) ) result = client.get_html_css(email_id=email_id, user_id=user_id) assert result.html == html assert result.css == css def test_compile( client: StripoV2Client, respx_mock: respx.MockRouter, faker: faker.Faker, ) -> None: auth_token = faker.pystr() user_id = faker.pystr() email_id = faker.pystr() compiled_html = faker.pystr() compiled_amp_html = faker.pystr() respx_mock.post( "https://gateway.test/api/v1/auth", json={ "pluginId": "test_client_id", "secretKey": "test_client_secret", "userId": user_id, "role": "USER", }, ).mock(return_value=httpx.Response(status_code=200, json={"token": auth_token})) respx_mock.get( "https://coediting.test/v1/email/compilation", headers__contains={ "ES-PLUGIN-AUTH": f"Bearer {auth_token}", "ES-PLUGIN-UI-DATA": json.dumps({"emailId": email_id}), }, params={"minimize": True, "inlineCss": True}, ).mock( return_value=httpx.Response( status_code=200, json={ "html": compiled_html, "ampHtml": compiled_amp_html, "ampErrors": [], }, ) ) result = client.compile(email_id=email_id, user_id=user_id) assert result.html == compiled_html assert result.amp_html == compiled_amp_html assert result.amp_errors == [] def test_compile_without_amp( client: StripoV2Client, respx_mock: respx.MockRouter, faker: faker.Faker, ) -> None: auth_token = faker.pystr() user_id = faker.pystr() email_id = faker.pystr() compiled_html = faker.pystr() respx_mock.post( "https://gateway.test/api/v1/auth", json={ "pluginId": "test_client_id", "secretKey": "test_client_secret", "userId": user_id, "role": "USER", }, ).mock(return_value=httpx.Response(status_code=200, json={"token": auth_token})) respx_mock.get( "https://coediting.test/v1/email/compilation", headers__contains={ "ES-PLUGIN-AUTH": f"Bearer {auth_token}", "ES-PLUGIN-UI-DATA": json.dumps({"emailId": email_id}), }, params={"minimize": True, "inlineCss": True}, ).mock( return_value=httpx.Response( status_code=200, json={"html": compiled_html}, ) ) result = client.compile(email_id=email_id, user_id=user_id) assert result.html == compiled_html assert result.amp_html is None assert result.amp_errors == []