From 3adea73ee04cdedfab54b0351878b297f72756ad Mon Sep 17 00:00:00 2001 From: Tudor Date: Mon, 6 Jul 2026 11:42:11 +0100 Subject: [PATCH] fix(e2e): compare-chips test must use schools in one phase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The test picked the first two /school/ links from a 'primary' search and asserted exactly two mobile chips. But a 'primary' search can return all-through schools (e.g. 'Hessle High School and Penshurst Primary') that classify as secondary, so the two picks can split across phases — the active phase then holds one school and the chips are correctly gated out (they need ≥2 in the active phase), while the canvas still shows one line. That's a test artefact, not a bug. Pick three schools instead: across two phases the auto-selected majority phase always holds ≥2, so the chip legend is guaranteed. Assert ≥2 chips (the majority may be 2 or 3). Verified against staging. Co-Authored-By: Claude Fable 5 --- e2e/tests/journeys.spec.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/e2e/tests/journeys.spec.ts b/e2e/tests/journeys.spec.ts index 2be8c7a..cff3656 100644 --- a/e2e/tests/journeys.spec.ts +++ b/e2e/tests/journeys.spec.ts @@ -100,15 +100,20 @@ test('compare chart on mobile shows school chips with tap-to-focus', async ({ pa links.map((l) => (l as HTMLAnchorElement).getAttribute('href') || '') ); const urns = [...new Set(hrefs.map((h) => h.match(/\/school\/(\d+)/)?.[1]).filter(Boolean))]; - expect(urns.length).toBeGreaterThanOrEqual(2); + // Compare three schools, not two: a "primary" search can return all-through + // schools that classify as secondary, and the chips only appear for the + // active phase. With three schools across two phases, the auto-selected + // majority phase always holds ≥2, so the chip legend is guaranteed to render. + expect(urns.length).toBeGreaterThanOrEqual(3); - await page.goto(`/compare?urns=${urns[0]},${urns[1]}`); + await page.goto(`/compare?urns=${urns[0]},${urns[1]},${urns[2]}`); await expect(page.locator('canvas:visible').first()).toBeVisible({ timeout: 15_000 }); - // The mobile chart legend renders one chip per school inside the chart card. + // The mobile chart legend renders one chip per school in the active phase. const chipGroup = page.getByRole('group', { name: /highlight a school/i }); const chips = chipGroup.getByRole('button'); - await expect(chips).toHaveCount(2); + await expect(chips.first()).toBeVisible({ timeout: 15_000 }); + expect(await chips.count()).toBeGreaterThanOrEqual(2); // Tapping a chip focuses that school's line; tapping again releases it. await chips.first().click();