The row of grey chips under the name mixed the council, a GIAS governance term, the age range and provision, with no labels. Parents could not tell what "Wandsworth" or "Nursery" meant, and selective, faith and fees were missing or buried in the details. The header now prints one fact line (phase pill · ages · type · pupils), then flags only for what applies, in a fixed order: who can apply or what it costs (Fee-paying, Selective, Girls'/Boys' school, the religious character as recorded), then what the school offers (Nursery class, Sixth form). Flags carry no hue: they are facts, not verdicts. The council joins the address unless the address already names it. The details keep headteacher, website, phone, academy trust (hidden when it has the school's own name) and capacity; county, constituency and religious character leave the header. The proposed-to-close strip is unchanged. lib/schoolFacts holds the type label and the flags so the search rows can print the same words. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
/**
|
|
* "Pupils" on a school page is the size of the school.
|
|
*
|
|
* A year's results row carries the cohort its figures were measured on. For a
|
|
* secondary that is the GCSE year group alone (Burntwood: 245, against 1,462
|
|
* on roll), so it must never stand in for the whole-school count.
|
|
*/
|
|
|
|
import { screen } from '@testing-library/react';
|
|
import { secondaryFixture } from '../support/schoolFixtures';
|
|
import { renderSecondarySchoolDetail } from '../support/renderSchoolDetail';
|
|
|
|
jest.mock('@/lib/analytics', () => ({
|
|
track: jest.fn(),
|
|
getNavigationSource: () => 'direct',
|
|
}));
|
|
jest.mock('@/components/PerformanceChart', () => ({
|
|
PerformanceChart: () => <div data-testid="performance-chart" />,
|
|
}));
|
|
jest.mock('@/components/SatsChart', () => ({
|
|
__esModule: true,
|
|
default: () => <div data-testid="sats-chart" />,
|
|
}));
|
|
jest.mock('@/components/AdmissionsTrendChart', () => ({
|
|
__esModule: true,
|
|
default: () => <div data-testid="admissions-trend-chart" />,
|
|
}));
|
|
jest.mock('@/components/SchoolHeroMap', () => ({
|
|
SchoolHeroMap: () => <div data-testid="hero-map" />,
|
|
__esModule: true,
|
|
}));
|
|
|
|
function withoutCensus(schoolTotal: number | null) {
|
|
const yearlyData = secondaryFixture.yearlyData.map((r) => ({ ...r, total_pupils: 245 }));
|
|
return {
|
|
...secondaryFixture,
|
|
census: null,
|
|
yearlyData,
|
|
schoolInfo: { ...secondaryFixture.schoolInfo, total_pupils: schoolTotal },
|
|
};
|
|
}
|
|
|
|
describe('pupil count without a census record', () => {
|
|
it('uses the register count in the header, not the results cohort', () => {
|
|
renderSecondarySchoolDetail(withoutCensus(1462));
|
|
expect(screen.getByText('1,462 pupils')).toBeInTheDocument();
|
|
expect(screen.queryByText('245 pupils')).not.toBeInTheDocument();
|
|
});
|
|
|
|
it('shows no count rather than the results cohort when the register has none', () => {
|
|
renderSecondarySchoolDetail(withoutCensus(null));
|
|
expect(screen.queryByText(/^[\d,]+ pupils$/)).not.toBeInTheDocument();
|
|
expect(screen.queryByText('Total pupils')).not.toBeInTheDocument();
|
|
});
|
|
});
|