import { describe, test, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import RootLayout from "../../app/layout"; // Mock the font imports since they're Next.js specific vi.mock("next/font/google", () => ({ Inter: vi.fn(() => ({ variable: "--font-inter", style: { fontFamily: "Inter" }, })), Bricolage_Grotesque: vi.fn(() => ({ variable: "--font-bricolage-grotesque", style: { fontFamily: "Bricolage Grotesque" }, })), Space_Grotesk: vi.fn(() => ({ variable: "--font-space-grotesk", style: { fontFamily: "Space Grotesk" }, })), })); describe("RootLayout", () => { test("renders HTML structure with correct attributes", () => { render(
Test content
); const html = document.querySelector("html"); expect(html).toBeInTheDocument(); expect(html).toHaveAttribute("lang", "en"); expect(html).toHaveClass("font-sans"); }); test("renders body with font variables", () => { render(
Test content
); const body = document.querySelector("body"); expect(body).toBeInTheDocument(); expect(body).toHaveClass("--font-inter"); expect(body).toHaveClass("--font-bricolage-grotesque"); expect(body).toHaveClass("--font-space-grotesk"); }); test("renders main layout structure", () => { render(
Test content
); const mainContainer = document.querySelector(".min-h-screen.flex.flex-col"); expect(mainContainer).toBeInTheDocument(); }); test("renders HomeHeader component", () => { render(
Test content
); // The HomeHeader component should be rendered // We can check for its presence by looking for elements that would be in the header const header = document.querySelector("header"); expect(header).toBeInTheDocument(); }); test("renders main content area", () => { render(
Test content
); const main = document.querySelector("main"); expect(main).toBeInTheDocument(); expect(main).toHaveClass("flex-1"); expect(main).toHaveTextContent("Test content"); }); test("renders Footer component", () => { render(
Test content
); // The Footer component should be rendered const footer = document.querySelector("footer"); expect(footer).toBeInTheDocument(); }); test("renders children content correctly", () => { const testContent = "This is test content"; render(
{testContent}
); expect(screen.getByText(testContent)).toBeInTheDocument(); }); test("has correct CSS classes for layout structure", () => { render(
Test content
); const mainContainer = document.querySelector(".min-h-screen.flex.flex-col"); expect(mainContainer).toBeInTheDocument(); expect(mainContainer).toHaveClass("min-h-screen"); expect(mainContainer).toHaveClass("flex"); expect(mainContainer).toHaveClass("flex-col"); }); test("main element has correct flex properties", () => { render(
Test content
); const main = document.querySelector("main"); expect(main).toHaveClass("flex-1"); }); test("renders complete page structure", () => { render(
Test content
); // Check for all major structural elements expect(document.querySelector("html")).toBeInTheDocument(); expect(document.querySelector("body")).toBeInTheDocument(); expect(document.querySelector("header")).toBeInTheDocument(); expect(document.querySelector("main")).toBeInTheDocument(); expect(document.querySelector("footer")).toBeInTheDocument(); }); test("maintains proper document structure", () => { render(
Test content
); // Check that the document has proper structure const html = document.querySelector("html"); const body = html.querySelector("body"); const header = body.querySelector("header"); const main = body.querySelector("main"); const footer = body.querySelector("footer"); expect(html).toBeInTheDocument(); expect(body).toBeInTheDocument(); expect(header).toBeInTheDocument(); expect(main).toBeInTheDocument(); expect(footer).toBeInTheDocument(); }); test("renders multiple children correctly", () => { render(
First child
Second child
Third child
); expect(screen.getByText("First child")).toBeInTheDocument(); expect(screen.getByText("Second child")).toBeInTheDocument(); expect(screen.getByText("Third child")).toBeInTheDocument(); }); });