/** * The single seam between the characterization tests and the component tree. * * Task 7 of the server/client split rewrites the bodies of these functions to * render the new shell + server-sections composition. Nothing else in the test * suite may change — the characterization assertions passing unmodified across * that rewrite is the proof that behaviour was preserved. * * National averages are currently fetched client-side via useEffect, so this * helper stubs global.fetch. Once they arrive as a server-supplied prop the * stub goes away; the tests use findBy* queries so they pass either way. */ import { render } from '@testing-library/react'; import type { ReactNode } from 'react'; import { SchoolDetailView } from '@/components/SchoolDetailView'; import { SecondarySchoolDetailView } from '@/components/SecondarySchoolDetailView'; import { ComparisonProvider } from '@/context/ComparisonProvider'; import { nationalAveragesFixture } from './schoolFixtures'; // Both views call useComparison(), which throws outside the provider. In the // app this wrapper comes from app/layout.tsx. function withProviders(ui: ReactNode) { return {ui}; } function stubNationalAveragesFetch() { global.fetch = jest.fn((url: any) => String(url).includes('national-averages') ? Promise.resolve({ ok: true, json: () => Promise.resolve(nationalAveragesFixture) }) : Promise.resolve({ ok: false, json: () => Promise.resolve({}) }), ) as unknown as typeof fetch; } export function renderSchoolDetail(fixture: any) { stubNationalAveragesFetch(); return render(withProviders()); } export function renderSecondarySchoolDetail(fixture: any) { stubNationalAveragesFetch(); return render(withProviders()); }