| 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 |
|
|