Cases da SEV Moda Íntima e da Lavação 047; case no formato cliente, problema, entrega, mídia e contato, com detalhes técnicos recolhidos; sem GitHub, ressalvas e fontes de commit. /cases separa clientes e Laboratório. Serviços mostram o case de cliente certo e o bloco de investimento e prazo só aparece preenchido. Metadata social própria por página, not-found com noindex, sitemap com /ia.
66 lines
2.3 KiB
TypeScript
66 lines
2.3 KiB
TypeScript
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(<CasesPage />);
|
|
|
|
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,
|
|
);
|
|
});
|
|
});
|