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