/** * Last distance offered, rendered on both detail templates. * * The figure is the one number on these pages that a parent may act on — it is * easy to read as "we live inside the catchment, we will get a place". These * tests pin the things that stop it being read that way: the year is always * present, the caveat is always present, and the blanket "not available" * sentence appears only when it is actually true. */ import { screen } from '@testing-library/react'; import { renderSchoolDetail, renderSecondarySchoolDetail } from '../support/renderSchoolDetail'; import { primaryFixture, secondaryFixture } from '../support/schoolFixtures'; import type { SchoolAdmissionDistance } from '@/lib/types'; const cutoff = (over: Partial = {}): SchoolAdmissionDistance => ({ year: 2025, distance_m: 500, route_count: 1, la_name: 'Camden', distance_unit_raw: 'miles', ...over, }); describe('primary detail page', () => { it('shows the figure with the year it belongs to', () => { renderSchoolDetail({ ...primaryFixture, admissionDistance: cutoff({ distance_m: 772.49, year: 2024 }) }); expect(screen.getByText('0.48 miles')).toBeInTheDocument(); expect(screen.getByText(/Last distance offered/)).toHaveTextContent('September 2024'); }); it('never shows the figure without saying it is not a catchment', () => { renderSchoolDetail({ ...primaryFixture, admissionDistance: cutoff() }); expect(screen.getByText(/not a fixed catchment/)).toBeInTheDocument(); expect(screen.getByText(/moves every year/)).toBeInTheDocument(); }); it('flags that a banded school\'s figure is the widest of several routes', () => { renderSchoolDetail({ ...primaryFixture, admissionDistance: cutoff({ route_count: 4 }) }); expect(screen.getByText(/4 admission routes/)).toBeInTheDocument(); }); it('renders nothing distance-related when the LA publishes none', () => { renderSchoolDetail({ ...primaryFixture, admissionDistance: null }); expect(screen.queryByText(/Last distance offered/)).not.toBeInTheDocument(); expect(screen.queryByText(/not a fixed catchment/)).not.toBeInTheDocument(); }); it('carries the figure even with no EES admissions row', () => { // The two sources are independent; this school has a cut-off and no // admissions figures. Before this feature the section did not render at all. renderSchoolDetail({ ...primaryFixture, admissions: null, admissionsHistory: [], admissionDistance: cutoff({ distance_m: 1421.05 }), }); expect(screen.getByText('0.88 miles')).toBeInTheDocument(); }); }); describe('secondary detail page', () => { it('shows the figure with the year it belongs to', () => { renderSecondarySchoolDetail({ ...secondaryFixture, admissionDistance: cutoff({ distance_m: 3472.96 }) }); expect(screen.getByText('2.16 miles')).toBeInTheDocument(); expect(screen.getByText(/Last distance offered/)).toHaveTextContent('September 2025'); }); it('drops the blanket "not available" line once a distance exists', () => { renderSecondarySchoolDetail({ ...secondaryFixture, admissionDistance: cutoff() }); expect(screen.queryByText(/has not published a cut-off distance/)).not.toBeInTheDocument(); expect(screen.getByText(/not a fixed catchment/)).toBeInTheDocument(); }); it('names the authority that would hold the data when there is none', () => { // The old copy asserted "Historical distance cut-off data is not available // for this school" on every secondary page, including the ones whose // council does publish it. renderSecondarySchoolDetail({ ...secondaryFixture, admissionDistance: null }); expect(screen.getByText(/has not published a cut-off distance/)).toBeInTheDocument(); }); });