feat(api): serve similar schools on the detail endpoint
Rides in the existing payload rather than a new endpoint: the page already makes one server fetch for its data, and /school/[slug] regenerates weekly, so the per-request cost is paid once per school per week. Wrapped so a failure in selection never 500s a page that is otherwise complete — the posture get_supplementary_data already takes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b571d9c549
commit
52b00ac752
2 files changed
+74
No files matched your search
@@ -250,3 +250,49 @@ def test_values_are_json_safe_native_types():
|
||||
assert isinstance(school["urn"], int)
|
||||
assert isinstance(school["distance_miles"], float)
|
||||
assert not isinstance(school["metric_value"], np.generic)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# The endpoint
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
|
||||
def _endpoint_frame():
|
||||
return _frame(
|
||||
_row(100001, "Subject Primary"),
|
||||
_row(100002, "Neighbour A", latitude=_at(0.5)),
|
||||
_row(100003, "Neighbour B", latitude=_at(0.6)),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def client(monkeypatch):
|
||||
from backend import app as app_module
|
||||
|
||||
monkeypatch.setattr(app_module, "load_latest_school_data", _endpoint_frame)
|
||||
monkeypatch.setattr(app_module, "load_school_data", _endpoint_frame)
|
||||
monkeypatch.setattr(app_module, "get_supplementary_data", lambda db, urn: {})
|
||||
return TestClient(app_module.app, raise_server_exceptions=False)
|
||||
|
||||
|
||||
def test_detail_payload_carries_similar_schools(client):
|
||||
resp = client.get("/api/schools/100001")
|
||||
assert resp.status_code == 200, resp.text
|
||||
similar = resp.json()["similar_schools"]
|
||||
assert [s["school_name"] for s in similar] == ["Neighbour A", "Neighbour B"]
|
||||
assert similar[0]["metric_key"] == "rwm_expected_pct"
|
||||
|
||||
|
||||
def test_a_failure_in_selection_does_not_break_the_page(client, monkeypatch):
|
||||
from backend import app as app_module
|
||||
|
||||
def _explode(*args, **kwargs):
|
||||
raise ValueError("selection blew up")
|
||||
|
||||
monkeypatch.setattr(app_module, "select_similar", _explode)
|
||||
resp = client.get("/api/schools/100001")
|
||||
assert resp.status_code == 200, resp.text
|
||||
assert resp.json()["similar_schools"] == []
|
||||
Reference in new issue
Block a user