import { render, screen, cleanup } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { vi, describe, test, expect, afterEach } from "vitest"; import Header from "../../app/components/Header"; import Footer from "../../app/components/Footer"; afterEach(() => { cleanup(); }); describe("Layout Integration", () => { test("header and footer provide consistent branding", () => { render(
, ); // Check that CommunityRule branding appears in both header and footer const headerLogos = screen.getAllByAltText("CommunityRule Logo Icon"); expect(headerLogos.length).toBeGreaterThan(0); // Footer should have the organization name expect(screen.getByText("Media Economies Design Lab")).toBeInTheDocument(); }); test("navigation is consistent between header and footer", () => { render(
, ); // Header navigation items expect( screen.getAllByRole("menuitem", { name: "Navigate to Use cases page" }) .length, ).toBeGreaterThan(0); expect( screen.getAllByRole("menuitem", { name: "Navigate to Learn page" }) .length, ).toBeGreaterThan(0); expect( screen.getAllByRole("menuitem", { name: "Navigate to About page" }) .length, ).toBeGreaterThan(0); // Footer navigation items (should be present in footer as well) const useCasesLinks = screen.getAllByRole("link", { name: "Use cases" }); const learnLinks = screen.getAllByRole("link", { name: "Learn" }); const aboutLinks = screen.getAllByRole("link", { name: "About" }); expect(useCasesLinks.length).toBeGreaterThan(0); expect(learnLinks.length).toBeGreaterThan(0); expect(aboutLinks.length).toBeGreaterThan(0); }); test("header navigation is interactive", async () => { const user = userEvent.setup(); render(
); // Test navigation links const useCasesLinks = screen.getAllByRole("menuitem", { name: "Navigate to Use cases page", }); const learnLinks = screen.getAllByRole("menuitem", { name: "Navigate to Learn page", }); const aboutLinks = screen.getAllByRole("menuitem", { name: "Navigate to About page", }); const useCasesLink = useCasesLinks[0]; const learnLink = learnLinks[0]; const aboutLink = aboutLinks[0]; expect(useCasesLink).toHaveAttribute("href", "#"); expect(learnLink).toHaveAttribute("href", "#"); expect(aboutLink).toHaveAttribute("href", "#"); // Test button interactions const createRuleButtons = screen.getAllByRole("button", { name: "Create a new rule with avatar decoration", }); await user.click(createRuleButtons[0]); expect(createRuleButtons[0]).toBeInTheDocument(); }); test("footer provides contact and social information", () => { render(