71 lines
2.2 KiB
Python
71 lines
2.2 KiB
Python
"""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
|