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.
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { existsSync } from "node:fs";
|
|
import { getCaseMedia } from "./case-media";
|
|
|
|
/** Testes de caminhos-base de getCaseMedia: id inválido, pôster ausente e pôster presente em disco. */
|
|
|
|
jest.mock("node:fs", () => {
|
|
const actual = jest.requireActual<typeof import("node:fs")>("node:fs");
|
|
return { ...actual, existsSync: jest.fn(actual.existsSync) };
|
|
});
|
|
|
|
const mockedExistsSync = jest.mocked(existsSync);
|
|
|
|
beforeEach(() => {
|
|
mockedExistsSync.mockClear();
|
|
});
|
|
|
|
describe("getCaseMedia", () => {
|
|
it.each([
|
|
["with path traversal", "../../etc/passwd"],
|
|
["with upper case", "Sev-Modaintima"],
|
|
["with a slash", "sev/modaintima"],
|
|
["empty", ""],
|
|
])("path: id %s -> undefined without touching the disk", (_label, id) => {
|
|
expect(getCaseMedia(id, "desktop")).toBeUndefined();
|
|
expect(mockedExistsSync).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("path: valid id with no poster on disk -> undefined", () => {
|
|
expect(getCaseMedia("twins-lab", "desktop")).toBeUndefined();
|
|
expect(mockedExistsSync).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("path: valid id with the poster on disk -> the showcase assets of that device", () => {
|
|
const desktop = getCaseMedia("sev-modaintima", "desktop");
|
|
const mobile = getCaseMedia("sev-modaintima", "mobile");
|
|
|
|
expect(desktop?.poster).toBe("/videos/sev-modaintima/desktop.webp");
|
|
expect(mobile?.poster).toBe("/videos/sev-modaintima/mobile.webp");
|
|
expect(desktop?.sources.length).toBeGreaterThan(0);
|
|
});
|
|
});
|