File size: 2,290 Bytes
36dada9 085d910 36dada9 085d910 36dada9 89e5718 36dada9 89e5718 085d910 36dada9 085d910 36dada9 085d910 36dada9 085d910 36dada9 085d910 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 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
|