feat(api): expose GIAS establishment status on school payloads
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
"""Tests for GIAS establishment status exposure.
|
||||
|
||||
"Open, but proposed to close" schools are now kept by the dims; the API must
|
||||
surface `status` on list items and school_info so the UI can render the
|
||||
proposed-to-close marker (listing tag) and notice strip (detail page).
|
||||
"""
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
PROPOSED = "Open, but proposed to close"
|
||||
|
||||
|
||||
def _schools_df() -> pd.DataFrame:
|
||||
base = {
|
||||
"local_authority": "Testshire",
|
||||
"school_type": "Academy",
|
||||
"phase": "Secondary",
|
||||
"address": "1 Test Street",
|
||||
"town": "Testtown",
|
||||
"postcode": "TS1 1AA",
|
||||
"religious_denomination": None,
|
||||
"gender": "Mixed",
|
||||
"age_range": "11-16",
|
||||
"admissions_policy": None,
|
||||
"has_sixth_form": False,
|
||||
"ofsted_grade": np.nan,
|
||||
"ofsted_date": None,
|
||||
"ofsted_framework": None,
|
||||
"latitude": 51.5,
|
||||
"longitude": -0.1,
|
||||
"year": 202425,
|
||||
"total_pupils": 800,
|
||||
"rwm_expected_pct": np.nan,
|
||||
"attainment_8_score": 48.0,
|
||||
}
|
||||
return pd.DataFrame(
|
||||
[
|
||||
{**base, "urn": 200001, "school_name": "Alpha Academy",
|
||||
"status": "Open"},
|
||||
{**base, "urn": 200002, "school_name": "Sarson High School",
|
||||
"status": PROPOSED},
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def client(monkeypatch):
|
||||
from backend import app as app_module
|
||||
|
||||
monkeypatch.setattr(app_module, "load_latest_school_data", _schools_df)
|
||||
monkeypatch.setattr(app_module, "load_school_data", _schools_df)
|
||||
monkeypatch.setattr(app_module, "get_supplementary_data", lambda db, urn: {})
|
||||
return TestClient(app_module.app, raise_server_exceptions=False)
|
||||
|
||||
|
||||
def test_list_payload_includes_status(client):
|
||||
resp = client.get("/api/schools")
|
||||
assert resp.status_code == 200, resp.text
|
||||
by_urn = {s["urn"]: s for s in resp.json()["schools"]}
|
||||
assert by_urn[200001]["status"] == "Open"
|
||||
assert by_urn[200002]["status"] == PROPOSED
|
||||
|
||||
|
||||
def test_detail_payload_includes_status(client):
|
||||
resp = client.get("/api/schools/200002")
|
||||
assert resp.status_code == 200, resp.text
|
||||
assert resp.json()["school_info"]["status"] == PROPOSED
|
||||
Reference in New Issue
Block a user