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"