fix: count pupils as the whole school, not the GCSE year group
fact_performance's total_pupils is the cohort a year's results were measured on. For a secondary that is Year 11 alone, and the list API sent it as the card's "pupils": Burntwood showed 245 in search and 1,462 on its page. The list and place payloads now carry the register's whole-school count, and nothing when the register has none. Map popups and the compare basket read the same field. The header and the wellbeing section fell back to the same results figure when the census had no record. They now fall back to the register count. The shell took yearlyData only for that fallback, so the prop is gone and the results array no longer ships to the client for the chrome. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e65c93b68e
commit
5f9caad7f4
7 files changed
+144
-12
No files matched your search
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* "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));
|
||||
const pupils = screen.getByText('Pupils:').parentElement!;
|
||||
expect(pupils).toHaveTextContent('1,462');
|
||||
expect(pupils).not.toHaveTextContent('245');
|
||||
});
|
||||
|
||||
it('shows no count rather than the results cohort when the register has none', () => {
|
||||
renderSecondarySchoolDetail(withoutCensus(null));
|
||||
expect(screen.queryByText('Pupils:')).not.toBeInTheDocument();
|
||||
expect(screen.queryByText('Total pupils')).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user