Both rows now take their type label and tags from lib/schoolFacts, so a parent reads the same words in the list and on the page: "State school" instead of "Academy converter", "Girls' school" instead of "Girls", the religious character instead of "Faith priority", and a Nursery class flag on primaries. Who-can-apply tags are outlined with an inset ring, which keeps them the size of their neighbours; the Selective tag no longer borrows the status colour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
119 lines
4.2 KiB
TypeScript
119 lines
4.2 KiB
TypeScript
/**
|
|
* SecondarySchoolRow — sixth-form tag must come from the GIAS
|
|
* has_sixth_form flag, not the age_range-contains-"18" heuristic.
|
|
*/
|
|
|
|
import '@testing-library/jest-dom';
|
|
import { render, screen } from '@testing-library/react';
|
|
import { SecondarySchoolRow } from '@/components/SecondarySchoolRow';
|
|
import type { School } from '@/lib/types';
|
|
|
|
const base = {
|
|
urn: 100002,
|
|
school_name: 'Beta Sixth Form College',
|
|
local_authority: 'Testshire',
|
|
school_type: 'Academy',
|
|
phase: 'Secondary',
|
|
gender: 'Mixed',
|
|
attainment_8_score: 50.0,
|
|
} as unknown as School;
|
|
|
|
describe('SecondarySchoolRow sixth-form tag', () => {
|
|
it('shows the tag for a 16-19 college with the GIAS flag set', () => {
|
|
render(
|
|
<SecondarySchoolRow
|
|
school={{ ...base, age_range: '16-19', has_sixth_form: true }}
|
|
/>,
|
|
);
|
|
expect(screen.getByText('Sixth form')).toBeInTheDocument();
|
|
});
|
|
|
|
it('hides the tag for an 11-18 school without a registered sixth form', () => {
|
|
render(
|
|
<SecondarySchoolRow
|
|
school={{ ...base, age_range: '11-18', has_sixth_form: false }}
|
|
/>,
|
|
);
|
|
expect(screen.queryByText('Sixth form')).not.toBeInTheDocument();
|
|
});
|
|
|
|
it('hides the tag when the flag is missing (pipeline not yet re-run)', () => {
|
|
render(
|
|
<SecondarySchoolRow school={{ ...base, age_range: '11-18' }} />,
|
|
);
|
|
expect(screen.queryByText('Sixth form')).not.toBeInTheDocument();
|
|
});
|
|
});
|
|
|
|
describe('SecondarySchoolRow proposed-to-close tag', () => {
|
|
it('shows the tag when GIAS status is "Open, but proposed to close"', () => {
|
|
render(
|
|
<SecondarySchoolRow
|
|
school={{ ...base, status: 'Open, but proposed to close' }}
|
|
/>,
|
|
);
|
|
expect(screen.getByText(/Proposed to close/)).toBeInTheDocument();
|
|
});
|
|
|
|
it('hides the tag for a plain open school', () => {
|
|
render(<SecondarySchoolRow school={{ ...base, status: 'Open' }} />);
|
|
expect(screen.queryByText(/Proposed to close/)).not.toBeInTheDocument();
|
|
});
|
|
|
|
it('hides the tag when status is missing', () => {
|
|
render(<SecondarySchoolRow school={base} />);
|
|
expect(screen.queryByText(/Proposed to close/)).not.toBeInTheDocument();
|
|
});
|
|
});
|
|
|
|
describe('SecondarySchoolRow admissions tag', () => {
|
|
it('tags a selective school', () => {
|
|
render(<SecondarySchoolRow school={{ ...base, admissions_policy: 'Selective' }} />);
|
|
expect(screen.getByText('Selective')).toBeInTheDocument();
|
|
});
|
|
|
|
it('does not tag a non-selective school as selective', () => {
|
|
// "Non-selective" contains "selective": a substring test tagged every
|
|
// comprehensive (Burntwood, Graveney) as Selective.
|
|
render(<SecondarySchoolRow school={{ ...base, admissions_policy: 'Non-selective' }} />);
|
|
expect(screen.queryByText('Selective')).not.toBeInTheDocument();
|
|
});
|
|
|
|
it.each(['None', 'Does not apply'])(
|
|
'gives no faith tag when the religious character is %p',
|
|
(religious_denomination) => {
|
|
render(
|
|
<SecondarySchoolRow
|
|
school={{ ...base, admissions_policy: 'Not applicable', religious_denomination }}
|
|
/>,
|
|
);
|
|
expect(screen.queryByText(religious_denomination)).not.toBeInTheDocument();
|
|
expect(screen.queryByText('Faith priority')).not.toBeInTheDocument();
|
|
},
|
|
);
|
|
|
|
it('tags the religious character the register records, not "Faith priority"', () => {
|
|
render(
|
|
<SecondarySchoolRow
|
|
school={{ ...base, admissions_policy: 'Not applicable', religious_denomination: 'Church of England' }}
|
|
/>,
|
|
);
|
|
expect(screen.getByText('Church of England')).toBeInTheDocument();
|
|
expect(screen.queryByText('Faith priority')).not.toBeInTheDocument();
|
|
});
|
|
});
|
|
|
|
describe('SecondarySchoolRow shares the school page flags', () => {
|
|
it("prints the type in the search filter's terms", () => {
|
|
render(<SecondarySchoolRow school={{ ...base, type_group: 'state' }} />);
|
|
expect(screen.getByText('State school')).toBeInTheDocument();
|
|
expect(screen.queryByText('Academy')).not.toBeInTheDocument();
|
|
});
|
|
|
|
it("flags a girls' school and fees", () => {
|
|
render(<SecondarySchoolRow school={{ ...base, type_group: 'independent', gender: 'Girls' }} />);
|
|
expect(screen.getByText("Girls' school")).toBeInTheDocument();
|
|
expect(screen.getByText('Fee-paying')).toBeInTheDocument();
|
|
});
|
|
});
|