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.
65 lines
2.3 KiB
TypeScript
65 lines
2.3 KiB
TypeScript
import { render, screen } from "@testing-library/react";
|
|
import { getShowcaseAssets } from "@/lib/project-showcase";
|
|
import { CaseCover } from "./CaseCover";
|
|
import { getCaseMedia } from "./case-media";
|
|
|
|
/**
|
|
* Testes de caminhos-base de CaseCover: sem captura (nada), com captura (moldura + pôster)
|
|
* e os valores padrão de `sizes` e `priority`.
|
|
*/
|
|
|
|
jest.mock("./case-media", () => ({ getCaseMedia: jest.fn() }));
|
|
|
|
const mockedGetCaseMedia = jest.mocked(getCaseMedia);
|
|
const props = {
|
|
id: "sev-modaintima",
|
|
title: "SEV Moda Íntima",
|
|
demoUrl: "https://sevmodaintima.com.br",
|
|
};
|
|
|
|
afterEach(() => {
|
|
mockedGetCaseMedia.mockReset();
|
|
});
|
|
|
|
describe("CaseCover", () => {
|
|
it("path: no desktop capture -> renders nothing", () => {
|
|
mockedGetCaseMedia.mockReturnValue(undefined);
|
|
const { container } = render(<CaseCover {...props} />);
|
|
|
|
expect(container).toBeEmptyDOMElement();
|
|
expect(mockedGetCaseMedia).toHaveBeenCalledWith(props.id, "desktop");
|
|
});
|
|
|
|
it("path: capture found -> poster inside the browser frame, with the real domain in the bar", () => {
|
|
mockedGetCaseMedia.mockImplementation(getShowcaseAssets);
|
|
const { container } = render(<CaseCover {...props} />);
|
|
|
|
const image = screen.getByAltText(`Captura de tela do site ${props.title}`);
|
|
expect(container.querySelector(".ds-bframe")).toContainElement(image);
|
|
expect(image.getAttribute("src")).toContain(
|
|
encodeURIComponent(`/videos/${props.id}/desktop.webp`),
|
|
);
|
|
expect(container.querySelector(".ds-bframe-url")).toHaveTextContent(
|
|
"sevmodaintima.com.br",
|
|
);
|
|
});
|
|
|
|
it("path: sizes and priority omitted -> default sizes and lazy loading", () => {
|
|
mockedGetCaseMedia.mockImplementation(getShowcaseAssets);
|
|
render(<CaseCover {...props} />);
|
|
|
|
const image = screen.getByAltText(`Captura de tela do site ${props.title}`);
|
|
expect(image).toHaveAttribute("sizes", "(min-width: 1024px) 560px, 100vw");
|
|
expect(image).toHaveAttribute("loading", "lazy");
|
|
});
|
|
|
|
it("path: sizes and priority given -> uses them", () => {
|
|
mockedGetCaseMedia.mockImplementation(getShowcaseAssets);
|
|
render(<CaseCover {...props} sizes="320px" priority />);
|
|
|
|
const image = screen.getByAltText(`Captura de tela do site ${props.title}`);
|
|
expect(image).toHaveAttribute("sizes", "320px");
|
|
expect(image).not.toHaveAttribute("loading", "lazy");
|
|
});
|
|
});
|