From acbff854f2da96bddcaede1385e7fefeba0fb34b Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Thu, 9 Apr 2026 19:45:45 -0500 Subject: initial commit --- tests/test_srht_client.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/test_srht_client.py (limited to 'tests/test_srht_client.py') diff --git a/tests/test_srht_client.py b/tests/test_srht_client.py new file mode 100644 index 0000000..e7ece0d --- /dev/null +++ b/tests/test_srht_client.py @@ -0,0 +1,56 @@ +import httpx +import pytest + +from srht_contrib.services.srht_client import SourceHutClientError, SourceHutGraphQLClient + + +def test_graphql_client_retries_http_5xx_and_succeeds() -> None: + attempts = {"count": 0} + + def handler(request: httpx.Request) -> httpx.Response: + attempts["count"] += 1 + if attempts["count"] == 1: + return httpx.Response(502, json={"error": "bad gateway"}) + return httpx.Response(200, json={"data": {"ok": True}}) + + client = SourceHutGraphQLClient( + "https://todo.sr.ht/query", + "token", + transport=httpx.MockTransport(handler), + ) + + data = client.execute("query Ping { ping }") + + assert data == {"ok": True} + assert attempts["count"] == 2 + client.close() + + +def test_graphql_client_raises_for_graphql_errors() -> None: + client = SourceHutGraphQLClient( + "https://todo.sr.ht/query", + "token", + transport=httpx.MockTransport(lambda request: httpx.Response(200, json={"errors": [{"message": "nope"}]})), + ) + + with pytest.raises(SourceHutClientError): + client.execute("query Ping { ping }") + + client.close() + + +def test_graphql_client_raises_for_network_errors() -> None: + def handler(request: httpx.Request) -> httpx.Response: + raise httpx.ConnectError("offline", request=request) + + client = SourceHutGraphQLClient( + "https://todo.sr.ht/query", + "token", + max_retries=0, + transport=httpx.MockTransport(handler), + ) + + with pytest.raises(SourceHutClientError): + client.execute("query Ping { ping }") + + client.close() -- cgit v1.2.3