"""Tests for the SMS/MMS client.""" from __future__ import annotations import json import pytest import respx from httpx import Response from conduit_client import AsyncConduitClient, ConduitClient from conduit_client.models.sms import ( SendMmsRequest, SendSmsDefaultRequest, SendSmsRequest, ) @respx.mock def test_list_sms(api_key: str) -> None: respx.get("https://api.example.com/sms").mock( return_value=Response(200, json=[{"id": 1, "did": "5550100", "dst": "5550200", "message": "hi"}]) ) with ConduitClient(api_key, base_url="https://api.example.com") as client: result = client.sms.list_sms() assert len(result) == 1 assert result[0].id == 1 @respx.mock def test_send_sms(api_key: str) -> None: route = respx.post("https://api.example.com/sms/send").mock( return_value=Response(200, json={"id": 123456}) ) with ConduitClient(api_key, base_url="https://api.example.com") as client: result = client.sms.send_sms(SendSmsRequest(did="5550100", dst="5550200", message="hello")) assert result.id == 123456 assert json.loads(route.calls[0].request.content) == { "did": "5550100", "dst": "5550200", "message": "hello", } @respx.mock def test_send_sms_default(api_key: str) -> None: route = respx.post("https://api.example.com/sms/send/default").mock( return_value=Response(200, json={"id": 123457}) ) with ConduitClient(api_key, base_url="https://api.example.com") as client: result = client.sms.send_sms_default(SendSmsDefaultRequest(dst="5550200", message="hello")) assert result.id == 123457 assert json.loads(route.calls[0].request.content) == { "dst": "5550200", "message": "hello", } @respx.mock def test_send_mms(api_key: str) -> None: route = respx.post("https://api.example.com/mms/send").mock( return_value=Response(200, json={"id": 123458}) ) with ConduitClient(api_key, base_url="https://api.example.com") as client: result = client.sms.send_mms( SendMmsRequest( did="5550100", dst="5550200", message="pic", media1="https://example.com/img.jpg", ) ) assert result.id == 123458 assert json.loads(route.calls[0].request.content)["media1"] == "https://example.com/img.jpg" @respx.mock def test_get_mms_media(api_key: str) -> None: route = respx.get("https://api.example.com/mms/123/media").mock( return_value=Response( 200, json={"id": 123, "date": "2024-01-01", "media": [{"url": "https://x.com/a.jpg"}]}, ) ) with ConduitClient(api_key, base_url="https://api.example.com") as client: result = client.sms.get_mms_media(123, media_as_array=True) assert result.media is not None assert len(result.media) == 1 assert route.calls[0].request.url.params["media_as_array"] == "true" @respx.mock def test_delete_sms(api_key: str) -> None: respx.delete("https://api.example.com/sms/123").mock( return_value=Response(200, json={"status": "success"}) ) with ConduitClient(api_key, base_url="https://api.example.com") as client: result = client.sms.delete_sms(123) assert result.status == "success" @pytest.mark.asyncio @respx.mock async def test_async_send_sms(api_key: str) -> None: respx.post("https://api.example.com/sms/send").mock( return_value=Response(200, json={"id": 123456}) ) async with AsyncConduitClient(api_key, base_url="https://api.example.com") as client: result = await client.sms.send_sms( SendSmsRequest(did="5550100", dst="5550200", message="hello") ) assert result.id == 123456