"""Audit H4: every payload that feeds an Ofsted badge carries the inspectorate GIAS names and whether Ofsted's own data lists the school, so the site never says "Not yet inspected" on the strength of missing data.""" import pandas as pd import pytest from fastapi.testclient import TestClient def _df(): base = dict(year=202425, local_authority='Cambridgeshire', local_authority_code=873, postcode='CB1 1AA', latitude=52.2, longitude=0.12, address='1 High St', status='Open', town='Cambridge') return pd.DataFrame([ dict(base, urn=136083, school_name='Abbey College Cambridge', phase='Secondary', school_type='Other independent school', inspectorate='ISI', ofsted_listed=False), dict(base, urn=150031, school_name='Abbas and Templecombe Church School', phase='Primary', school_type='Academy converter', inspectorate='Not applicable', ofsted_listed=True), ]) @pytest.fixture() def client(monkeypatch): from backend import app as app_module from backend import database as database_module def _no_db(): raise RuntimeError('no database in this test') monkeypatch.setattr(app_module, 'load_latest_school_data', _df) monkeypatch.setattr(app_module, 'load_school_data', _df) monkeypatch.setattr(app_module, 'get_supplementary_data', lambda db, urn: {}) monkeypatch.setattr(app_module, '_place_registry', None) monkeypatch.setattr(database_module, 'SessionLocal', _no_db) return TestClient(app_module.app, raise_server_exceptions=False) def test_the_list_carries_inspectorate_and_listing(client): resp = client.get('/api/schools?page_size=50') assert resp.status_code == 200, resp.text by_urn = {s['urn']: s for s in resp.json()['schools']} assert by_urn[136083]['inspectorate'] == 'ISI' assert by_urn[150031]['ofsted_listed'] is True def test_the_school_page_carries_them(client): info = client.get('/api/schools/136083').json()['school_info'] assert info['inspectorate'] == 'ISI' assert info['ofsted_listed'] is False def test_compare_carries_them(client): body = client.get('/api/compare?urns=136083,150031').json() assert body['comparison']['150031']['school_info']['ofsted_listed'] is True assert body['comparison']['136083']['school_info']['inspectorate'] == 'ISI' def test_a_mart_built_before_the_columns_still_loads(): # Missing columns make the main query retry with NULLs (data_loader). from backend import data_loader assert {'inspectorate', 'ofsted_listed'} <= set(data_loader._EXTRA_OPTIONAL_COLUMNS) fallback = str(data_loader._MAIN_QUERY_NO_EXTRA_COLS) assert 'NULL AS inspectorate,' in fallback and 'NULL AS ofsted_listed,' in fallback