import React from "react"; import { describe, expect, it } from "vitest"; import { renderToStaticMarkup } from "react-dom/server"; import { NextRequest } from "next/server"; import PrivacyPage from "@/app/privacy/page.jsx"; import TermsPage from "@/app/terms/page.jsx"; import CookiesPage from "@/app/cookies/page.jsx"; import LegalNavigation from "@/components/legal-navigation.jsx"; import RootLayout from "@/app/layout.jsx"; import { middleware } from "@/middleware.js"; describe("public legal pages", () => { it.each([ ["Privacy Policy", PrivacyPage], ["Terms of Use", TermsPage], ["Cookie Policy", CookiesPage], ])("renders the %s heading", (heading, Page) => { const html = renderToStaticMarkup(); expect(html).toContain(`

${heading}

`); expect(html).not.toContain('aria-label="Legal information"'); }); it("keeps the root layout as the single legal navigation owner", () => { const html = renderToStaticMarkup( , ); expect(html.match(/aria-label="Legal information"/g)).toHaveLength(1); }); it("exposes all public legal links without cookie consent controls", () => { const html = renderToStaticMarkup(); expect(html).toContain('href="/privacy"'); expect(html).toContain('href="/terms"'); expect(html).toContain('href="/cookies"'); expect(html).not.toMatch(/Accept cookies|Reject cookies/i); }); it.each(["privacy", "terms", "cookies"])("keeps /%s public", async (path) => { const response = await middleware(new NextRequest(`http://localhost:3000/${path}`)); expect(response.status).toBe(200); }); });