Case com mídia ao lado do título e play acessível; problema de cada cliente reescrito com base nos dados; serviços relacionados em 2 cards; FAQ antes do próximo passo e bloco 'Onde já apliquei isso'; Apolo citada em IoT e arquitetura. metaTitle até 43 caracteres e descrições até 155 com teste; JSON-LD CreativeWork; imagens de compartilhamento abaixo de 100 KB; 404 e robots corrigidos; server-only nos módulos com node:.
37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
import { render, screen } from "@testing-library/react";
|
|
import { caseStudies } from "@/lib/site-content";
|
|
import CasePage from "./page";
|
|
|
|
/**
|
|
* Teste de caminhos-base de CasePage: os "fatos do projeto" no topo.
|
|
* O teste principal cobre a lista ausente (`undefined`) e a lista preenchida; aqui, a lista vazia (`[]`).
|
|
*/
|
|
|
|
jest.mock("next/navigation", () => ({ notFound: jest.fn() }));
|
|
|
|
function getCase(id: string) {
|
|
const caseStudy = caseStudies.find((item) => item.id === id);
|
|
if (!caseStudy) throw new Error(`Missing case ${id}`);
|
|
return caseStudy;
|
|
}
|
|
|
|
describe("CasePage: fatos do projeto", () => {
|
|
it("path: empty facts list -> no list in the hero, summary stays", async () => {
|
|
const caseStudy = getCase("lavacao-047");
|
|
caseStudy.facts = [];
|
|
try {
|
|
const ui = await CasePage({
|
|
params: Promise.resolve({ slug: caseStudy.id }),
|
|
});
|
|
render(ui);
|
|
|
|
expect(
|
|
screen.queryByRole("list", { name: "Fatos do projeto" }),
|
|
).toBeNull();
|
|
expect(screen.getByText(caseStudy.summary)).toBeVisible();
|
|
} finally {
|
|
delete caseStudy.facts;
|
|
}
|
|
});
|
|
});
|