Every generateStaticParams is gated behind PRERENDER_PLACES and wrapped in the same try/catch the school route uses. The plan claimed authority pages were 'few enough to always prebuild' — but few enough still means the API must be reachable at build time, and in CI it is not: the build failed with ECONNREFUSED rather than degrading to ISR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
31 lines
1.2 KiB
TypeScript
31 lines
1.2 KiB
TypeScript
import { generateMetadata as placeMeta } from '@/app/schools/[place]/page';
|
|
|
|
jest.mock('@/lib/places', () => ({
|
|
...jest.requireActual('@/lib/places'),
|
|
fetchPlace: jest.fn(async (kind: string, slug: string) =>
|
|
slug === 'atlantis' ? null : ({
|
|
place: { kind, slug, name: 'Brentwood', count: 29,
|
|
parent_authority: 'Essex' },
|
|
schools: [], averages: { rwm_expected_pct: 63, attainment_8_score: null },
|
|
})),
|
|
fetchPlaces: jest.fn(async () => []),
|
|
}));
|
|
|
|
describe('place page metadata', () => {
|
|
it('titles the page the way the place is searched', async () => {
|
|
const m = await placeMeta({ params: Promise.resolve({ place: 'brentwood' }) });
|
|
expect(m.title).toMatch(/schools in brentwood/i);
|
|
});
|
|
|
|
it('canonicalises to its own path on the www host', async () => {
|
|
const m = await placeMeta({ params: Promise.resolve({ place: 'brentwood' }) });
|
|
expect(m.alternates?.canonical)
|
|
.toBe('https://www.schoolcompare.co.uk/schools/brentwood');
|
|
});
|
|
|
|
it('an unknown place gets a not-found title rather than inventing one', async () => {
|
|
const m = await placeMeta({ params: Promise.resolve({ place: 'atlantis' }) });
|
|
expect(m.title).toMatch(/not found/i);
|
|
});
|
|
});
|