TerraFin / tests /interface /test_error_handling_api.py
sk851's picture
fix(tests): add missing capability stubs and fix mock targets
89e5718
from fastapi.testclient import TestClient
import TerraFin.interface.server as server_module
from TerraFin.data.cache.registry import reset_cache_manager
def test_validation_error_payload_is_standardized() -> None:
reset_cache_manager()
client = TestClient(server_module.create_app())
response = client.get("/calendar/api/events?month=13&year=2026", headers={"X-Request-ID": "req-422"})
assert response.status_code == 422
payload = response.json()
assert payload["error"]["code"] == "validation_error"
assert payload["error"]["message"] == "Request validation failed."
assert payload["error"]["request_id"] == "req-422"
assert isinstance(payload["error"]["details"], list)
assert len(payload["error"]["details"]) >= 1
def test_uncaught_exception_payload_is_standardized(monkeypatch) -> None:
import TerraFin.interface.health.routes as _health_routes
async def _raise(force: bool = False) -> dict:
raise Exception("unexpected failure")
monkeypatch.setattr(_health_routes, "_get_snapshot", _raise)
reset_cache_manager()
client = TestClient(server_module.create_app(), raise_server_exceptions=False)
response = client.get("/health", headers={"X-Request-ID": "req-500"})
assert response.status_code == 500
payload = response.json()
assert payload["error"]["code"] == "internal_error"
assert payload["error"]["message"] == "Internal server error."
assert payload["error"]["request_id"] == "req-500"
assert "details" not in payload["error"]
def test_known_runtime_error_payload_is_standardized(monkeypatch) -> None:
def _raise_data_factory_error():
raise RuntimeError("data factory unavailable")
reset_cache_manager()
app = server_module.create_app()
monkeypatch.setattr(server_module, "get_data_factory", _raise_data_factory_error)
client = TestClient(app)
response = client.get("/ready", headers={"X-Request-ID": "req-503"})
assert response.status_code == 503
payload = response.json()
assert payload["error"]["code"] == "service_not_ready"
assert payload["error"]["message"] == "Service is not ready."
assert payload["error"]["request_id"] == "req-503"
assert payload["error"]["details"]["checks"]["data_factory"]["ok"] is False