import { render, screen, within } from "@testing-library/react"; import { clientCases } from "@/lib/site-content"; import { getCaseMedia } from "./_components/case-media"; import CasesPage from "./page"; /** * Teste de caminhos-base da lista de cases de cliente em CasesPage: * o caminho "case de cliente sem captura gravada" (a página principal só vê cases com captura). */ jest.mock("./_components/case-media", () => { const actual = jest.requireActual("./_components/case-media"); return { ...actual, getCaseMedia: jest.fn(actual.getCaseMedia) }; }); const actualGetCaseMedia = jest.requireActual< typeof import("./_components/case-media") >("./_components/case-media").getCaseMedia; const mockedGetCaseMedia = jest.mocked(getCaseMedia); afterEach(() => { mockedGetCaseMedia.mockImplementation(actualGetCaseMedia); }); function clientCard(container: HTMLElement, id: string) { const card = container .querySelector(`a[href="/cases/${id}"]`) ?.closest("article"); if (!card) throw new Error(`Missing client card ${id}`); return card; } describe("CasesPage: cases de cliente", () => { it("path: client case without a desktop capture -> card keeps text and links but no cover", () => { const [withoutCapture, withCapture] = clientCases; mockedGetCaseMedia.mockImplementation((id, device) => id === withoutCapture.id ? undefined : actualGetCaseMedia(id, device), ); const { container } = render(); const bare = clientCard(container, withoutCapture.id); expect(bare.querySelector(".ds-bframe")).toBeNull(); expect(bare.querySelector("img")).toBeNull(); expect( within(bare).queryByRole("link", { name: `Ver o case ${withoutCapture.title}`, }), ).toBeNull(); expect(within(bare).getByText(withoutCapture.headline)).toBeVisible(); expect( within(bare).getByRole("link", { name: "Ver o case" }), ).toHaveAttribute("href", `/cases/${withoutCapture.id}`); // os outros cases de cliente continuam com a capa const covered = clientCard(container, withCapture.id); expect(covered.querySelector(".ds-bframe img")).toHaveAttribute( "alt", `Captura de tela do site ${withCapture.title}`, ); expect(screen.getAllByRole("link", { name: "Ver o case" })).toHaveLength( clientCases.length, ); }); });