fix(rankings,admissions): correct education-accuracy audit findings #74
@@ -438,6 +438,18 @@ test('compare chart on mobile shows school chips with tap-to-focus', async ({ pa
|
|||||||
await expect(chips.first()).toHaveAttribute('aria-pressed', 'false');
|
await expect(chips.first()).toHaveAttribute('aria-pressed', 'false');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('admissions guide renders its key milestones', async ({ page }) => {
|
||||||
|
// Static content page — assert the guide loads and the load-bearing
|
||||||
|
// milestones parents rely on are present (dates are statutory, so these
|
||||||
|
// strings are stable invariants, not data-refresh-sensitive).
|
||||||
|
await page.goto('/admissions');
|
||||||
|
await expect(page.getByRole('heading', { name: /School Admissions Guide/i })).toBeVisible();
|
||||||
|
await expect(page.getByRole('heading', { name: /Primary school admissions/i })).toBeVisible();
|
||||||
|
await expect(page.getByRole('heading', { name: /Secondary school admissions/i })).toBeVisible();
|
||||||
|
// National Offer Day is the milestone the whole guide builds toward.
|
||||||
|
await expect(page.getByText(/National Offer Day/i).first()).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
test('rankings page loads a populated table', async ({ page }) => {
|
test('rankings page loads a populated table', async ({ page }) => {
|
||||||
await page.goto('/rankings');
|
await page.goto('/rankings');
|
||||||
await expect(page.getByRole('heading', { name: /rankings/i }).first()).toBeVisible();
|
await expect(page.getByRole('heading', { name: /rankings/i }).first()).toBeVisible();
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ interface Step {
|
|||||||
const SECONDARY_STEPS: Step[] = [
|
const SECONDARY_STEPS: Step[] = [
|
||||||
{
|
{
|
||||||
title: 'Check entry criteria',
|
title: 'Check entry criteria',
|
||||||
body: 'Look at each school\'s admissions policy — catchment areas, faith criteria, sibling priority, and aptitude tests vary widely.',
|
body: 'Look at each school\'s admissions policy — catchment areas, faith criteria, sibling priority, and aptitude tests vary widely. Two deadlines catch parents out: grammar and other selective schools need separate entrance-test registration months earlier (often by September), and faith schools often want a supplementary information form sent directly to the school alongside the council application.',
|
||||||
tool: { label: 'Find schools & view their admissions history', href: '/' },
|
tool: { label: 'Find schools & view their admissions history', href: '/' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -73,14 +73,14 @@ const SECONDARY_STEPS: Step[] = [
|
|||||||
{
|
{
|
||||||
date: '31 October',
|
date: '31 October',
|
||||||
title: 'Application deadline',
|
title: 'Application deadline',
|
||||||
body: 'Submit your ranked list of up to six schools. Councils treat all preferences equally — list schools in the genuine order you want them, not strategically.',
|
body: 'Submit your ranked list of schools — most councils allow three to six preferences (London boroughs typically six). Councils treat all preferences equally, so list schools in the genuine order you want them, not strategically.',
|
||||||
highlight: 'deadline',
|
highlight: 'deadline',
|
||||||
tool: { label: 'Compare performance to order your preferences', href: '/rankings' },
|
tool: { label: 'Compare performance to order your preferences', href: '/rankings' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
date: '1 March',
|
date: '1 March',
|
||||||
title: 'National Offer Day',
|
title: 'National Offer Day',
|
||||||
body: 'Results are published online, usually from 12:01 am. You\'ll receive an email or letter with your allocated school.',
|
body: 'Your allocated school appears on the council\'s online admissions portal and is sent by email. Release times are set by each council — often from late afternoon, though some publish overnight — so check your council\'s page rather than refreshing at midnight.',
|
||||||
highlight: 'offer',
|
highlight: 'offer',
|
||||||
tool: { label: 'Look up your allocated school', href: '/' },
|
tool: { label: 'Look up your allocated school', href: '/' },
|
||||||
},
|
},
|
||||||
@@ -100,7 +100,7 @@ const SECONDARY_STEPS: Step[] = [
|
|||||||
const PRIMARY_STEPS: Step[] = [
|
const PRIMARY_STEPS: Step[] = [
|
||||||
{
|
{
|
||||||
title: 'Research entry criteria',
|
title: 'Research entry criteria',
|
||||||
body: 'Faith schools, language units, and distance-based catchments differ by school. Start by reading each school\'s admissions policy on their website or the council\'s website.',
|
body: 'Faith schools, language units, and distance-based catchments differ by school. Start by reading each school\'s admissions policy — and note that faith schools often require a supplementary information form sent directly to the school, in addition to the council application.',
|
||||||
tool: { label: 'Find schools & view their admissions history', href: '/' },
|
tool: { label: 'Find schools & view their admissions history', href: '/' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -144,7 +144,7 @@ interface Tip {
|
|||||||
const TIPS: Tip[] = [
|
const TIPS: Tip[] = [
|
||||||
{
|
{
|
||||||
heading: 'Equal preference rule',
|
heading: 'Equal preference rule',
|
||||||
body: 'Councils rank offers by your eligibility for each school, not by the order you listed them. You cannot game the system — put schools in the order you actually want them.',
|
body: 'Councils consider every school you list before making any offer, then give you the highest-ranked one you qualify for. Your order only decides which qualifying school you get — you can\'t game it, so list schools in the order you genuinely want them.',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
heading: 'Late applications go to the back',
|
heading: 'Late applications go to the back',
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ export function RankingsView({
|
|||||||
<header className={styles.header}>
|
<header className={styles.header}>
|
||||||
<h1>School Rankings</h1>
|
<h1>School Rankings</h1>
|
||||||
<p className={styles.subtitle}>
|
<p className={styles.subtitle}>
|
||||||
Top-performing schools by {metricLabel.toLowerCase()}
|
Schools ranked by {metricLabel.toLowerCase()}
|
||||||
{!selectedArea && rankings.length > 0 && <span className={styles.limitNote}> — showing top {rankings.length}</span>}
|
{!selectedArea && rankings.length > 0 && <span className={styles.limitNote}> — showing top {rankings.length}</span>}
|
||||||
</p>
|
</p>
|
||||||
</header>
|
</header>
|
||||||
@@ -143,7 +143,10 @@ export function RankingsView({
|
|||||||
<p className={styles.metricDescription}>{currentMetricDef.description}</p>
|
<p className={styles.metricDescription}>{currentMetricDef.description}</p>
|
||||||
)}
|
)}
|
||||||
{isProgressScore && (
|
{isProgressScore && (
|
||||||
<p className={styles.progressHint}>Progress scores: 0 = national average. Positive = above average.</p>
|
<p className={styles.progressHint}>
|
||||||
|
Progress scores: 0 = national average. Positive = above average.
|
||||||
|
{isPrimary && ' KS2 progress isn’t published for 2023/24 or 2024/25 (there’s no key stage 1 baseline) — pick an earlier year to rank by it.'}
|
||||||
|
</p>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Filters */}
|
{/* Filters */}
|
||||||
@@ -218,7 +221,11 @@ export function RankingsView({
|
|||||||
{rankings.length === 0 ? (
|
{rankings.length === 0 ? (
|
||||||
<EmptyState
|
<EmptyState
|
||||||
title="No rankings found"
|
title="No rankings found"
|
||||||
message="Try selecting a different metric, area, or year."
|
message={
|
||||||
|
isPrimary && isProgressScore
|
||||||
|
? 'KS2 progress scores aren’t published for the most recent years (2023/24 and 2024/25) because there’s no key stage 1 baseline. Select an earlier year to see progress rankings.'
|
||||||
|
: 'Try selecting a different metric, area, or year.'
|
||||||
|
}
|
||||||
action={{
|
action={{
|
||||||
label: 'Clear filters',
|
label: 'Clear filters',
|
||||||
onClick: () => router.push(`${pathname}?phase=${selectedPhase}`),
|
onClick: () => router.push(`${pathname}?phase=${selectedPhase}`),
|
||||||
|
|||||||
Reference in New Issue
Block a user