import { render, screen } from "@testing-library/react"; import { notFound } from "next/navigation"; import { getServicePage } from "@/lib/site-content"; import ServicePage, { generateMetadata } from "./page"; /** * Testes de caminhos-base de ServicePage e generateMetadata (complemento de page.test.tsx). * Cobrem só o que o arquivo principal não exercita: slug desconhecido e perguntas frequentes ausentes ou vazias. */ jest.mock("next/navigation", () => ({ notFound: jest.fn(() => { throw new Error("NEXT_NOT_FOUND"); }), })); beforeEach(() => { jest.mocked(notFound).mockClear(); }); async function renderService(slug: string) { const ui = await ServicePage({ params: Promise.resolve({ slug }) }); return render(ui); } const FAQ_HEADING = "Perguntas frequentes"; describe("ServicePage: caminhos que o teste principal não cobre", () => { it("path: unknown slug -> calls notFound() and renders nothing", async () => { await expect( ServicePage({ params: Promise.resolve({ slug: "nao-existe" }) }), ).rejects.toThrow("NEXT_NOT_FOUND"); expect(notFound).toHaveBeenCalledTimes(1); }); it("path: service with a FAQ (main path) -> shows every question", async () => { const service = getServicePage("criacao-de-sites"); if (!service?.faq?.length) throw new Error("Missing service FAQ"); await renderService(service.slug); expect( screen.getByRole("heading", { level: 2, name: FAQ_HEADING }), ).toBeVisible(); for (const item of service.faq) { expect( screen.getByRole("heading", { level: 3, name: item.question }), ).toBeVisible(); } }); it("path: service without the faq field -> no FAQ section, the rest of the page stays", async () => { const service = getServicePage("criacao-de-sites"); if (!service?.faq) throw new Error("Missing service FAQ"); const originalFaq = service.faq; delete service.faq; try { await renderService(service.slug); expect(screen.queryByRole("heading", { name: FAQ_HEADING })).toBeNull(); expect( screen.getByRole("heading", { level: 2, name: "Conte o que você precisa resolver.", }), ).toBeVisible(); } finally { service.faq = originalFaq; } }); it("path: service with an empty FAQ list -> no FAQ section", async () => { const service = getServicePage("criacao-de-sites"); if (!service?.faq) throw new Error("Missing service FAQ"); const originalFaq = service.faq; service.faq = []; try { await renderService(service.slug); expect(screen.queryByRole("heading", { name: FAQ_HEADING })).toBeNull(); expect( screen.getByRole("heading", { level: 2, name: "Conte o que você precisa resolver.", }), ).toBeVisible(); } finally { service.faq = originalFaq; } }); }); describe("generateMetadata: caminho do slug desconhecido", () => { it("path: unknown slug -> only a 'not found' title, no canonical or social tags", async () => { const metadata = await generateMetadata({ params: Promise.resolve({ slug: "nao-existe" }), }); expect(metadata).toEqual({ title: "Serviço não encontrado" }); }); });