import assert from "node:assert/strict"; import { describe, it } from "node:test"; const baseUrl = process.env.E2E_BASE_URL ?? "http://127.0.0.1:3100"; async function readPage(pathname) { const response = await fetch(`${baseUrl}${pathname}`); assert.equal(response.status, 200); return response.text(); } describe("Next.js production server", () => { it("renders the homepage with the main hero copy", async () => { const html = await readPage("/"); assert.match(html, /Bereit für Ihre neue Website/); assert.match(html, /E2E Beispieltermin/); }); it("server-renders current calendar content", async () => { const html = await readPage("/kalender/"); assert.match(html, /E2E Beispieltermin/); assert.match(html, /Beispielort/); }); it("renders the information page without client-side placeholders", async () => { const html = await readPage("/informationen/"); assert.match(html, /Informationsbereiche/); assert.doesNotMatch(html, /href="#"/); }); it("serves the calendar API with cache validation", async () => { const response = await fetch(`${baseUrl}/api/events`, { redirect: "manual" }); assert.equal(response.status, 200); const events = await response.json(); assert.equal(events[0].title, "E2E Beispieltermin"); assert.match(response.headers.get("cache-control") ?? "", /stale-while-revalidate/); const etag = response.headers.get("etag"); assert.ok(etag); const cached = await fetch(`${baseUrl}/api/events`, { headers: { "if-none-match": etag }, }); assert.equal(cached.status, 304); }); it("reports liveness and calendar readiness", async () => { const live = await fetch(`${baseUrl}/health/live`); assert.equal(live.status, 200); assert.deepEqual(await live.json(), { status: "ok" }); const ready = await fetch(`${baseUrl}/health/ready`); assert.equal(ready.status, 200); assert.deepEqual(await ready.json(), { status: "ok", reason: null }); }); });