From 487e5d00a1cd8a3d0737a4d1f4533ca6461498cc Mon Sep 17 00:00:00 2001 From: KKlochko Date: Fri, 14 Nov 2025 15:24:44 +0200 Subject: [PATCH] Add tests to verify error response format for endpoints. --- tests/test_error_response_format.py | 81 +++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/test_error_response_format.py diff --git a/tests/test_error_response_format.py b/tests/test_error_response_format.py new file mode 100644 index 0000000..4f4d4e6 --- /dev/null +++ b/tests/test_error_response_format.py @@ -0,0 +1,81 @@ +import pytest +from .conftest import BASE_URL + + +class TestErrorResponseFormat: + """Tests for error response format""" + + def test_error_response_structure_for_general(self, api_client): + """Verify error response structure for /general endpoint""" + payload = { + "text": "text", + "texts": ["texts"], + "entities": ["org"] + } + response = api_client.post(f"{BASE_URL}/general", json=payload) + assert response.status_code == 400 + + error = response.json() + assert "error" in error + assert "code" in error["error"] + assert "message" in error["error"] + assert "details" in error["error"] + assert isinstance(error["error"]["code"], str) + assert isinstance(error["error"]["message"], str) + assert isinstance(error["error"]["details"], dict) + + def test_error_response_structure_for_relation_extraction(self, api_client): + """Verify error response structure for /relation-extraction endpoint""" + payload = { + "text": "some text", + "texts": ["another text"], + "relations": ["founded"] + } + response = api_client.post(f"{BASE_URL}/relation-extraction", json=payload) + assert response.status_code == 400 + + error = response.json() + assert "error" in error + assert "code" in error["error"] + assert "message" in error["error"] + assert "details" in error["error"] + assert error["error"]["code"] == "INVALID_INPUT" + assert "both" in error["error"]["message"].lower() + + def test_error_response_structure_for_summarization(self, api_client): + """Verify error response structure for /summarization endpoint""" + payload = { + "text": "some text", + "texts": ["another text"] + } + response = api_client.post(f"{BASE_URL}/summarization", json=payload) + assert response.status_code == 400 + + error = response.json() + assert "error" in error + assert "code" in error["error"] + assert "message" in error["error"] + assert "details" in error["error"] + assert error["error"]["code"] == "INVALID_INPUT" + assert "both" in error["error"]["message"].lower() + + def test_consistent_error_format_across_endpoints(self, api_client): + """Ensure all endpoints return consistent error format""" + # Prepare payloads with both text and texts for each endpoint + test_cases = [ + ("/general", {"text": "t", "texts": ["t"], "entities": ["org"]}), + ("/relation-extraction", {"text": "t", "texts": ["t"], "relations": ["rel"]}), + ("/summarization", {"text": "t", "texts": ["t"]}) + ] + + for endpoint, payload in test_cases: + response = api_client.post(f"{BASE_URL}{endpoint}", json=payload) + assert response.status_code == 400, f"Endpoint {endpoint} should return 400" + + error = response.json() + # Verify consistent error structure + assert "error" in error, f"Endpoint {endpoint} missing 'error' key" + assert "code" in error["error"], f"Endpoint {endpoint} missing 'code' key" + assert "message" in error["error"], f"Endpoint {endpoint} missing 'message' key" + assert "details" in error["error"], f"Endpoint {endpoint} missing 'details' key" + assert error["error"]["code"] == "INVALID_INPUT", f"Endpoint {endpoint} wrong error code"