Files
confidence-engine/tests/legal-pages.test.jsx

44 lines
1.7 KiB
React

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(<Page />);
expect(html).toContain(`<h1 class="text-3xl font-bold tracking-tight text-teal-700">${heading}</h1>`);
expect(html).not.toContain('aria-label="Legal information"');
});
it("keeps the root layout as the single legal navigation owner", () => {
const html = renderToStaticMarkup(
<RootLayout>
<PrivacyPage />
</RootLayout>,
);
expect(html.match(/aria-label="Legal information"/g)).toHaveLength(1);
});
it("exposes all public legal links without cookie consent controls", () => {
const html = renderToStaticMarkup(<LegalNavigation />);
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);
});
});