import { getServicePage } from "@/lib/site-content"; import { AREAS, type AreaId, PROBLEMAS, problemaPorId, problemasDaArea, } from "./problemas"; const areas = Object.keys(AREAS) as AreaId[]; describe("PROBLEMAS", () => { it("tem 27 problemas", () => { expect(PROBLEMAS).toHaveLength(27); }); it("tem ids únicos em kebab-case sem acento", () => { const ids = PROBLEMAS.map(({ id }) => id); expect(new Set(ids).size).toBe(ids.length); for (const id of ids) expect(id).toMatch(/^[a-z0-9]+(-[a-z0-9]+)*$/); }); it("tem os rótulos das seis áreas", () => { expect(AREAS).toEqual({ vender: "Vender e ser encontrado", atender: "Atender", operar: "Operar", fiscal: "Fiscal e financeiro", sistemas: "Sistemas e integrações", seguranca: "Segurança e dados", }); }); it("dá a toda área ao menos 4 problemas", () => { for (const area of areas) expect(problemasDaArea(area).length).toBeGreaterThanOrEqual(4); }); it("aponta cada destino para uma página de serviço que existe", () => { const fora = PROBLEMAS.filter( ({ destino }) => !destino.startsWith("/servicos/"), ); expect(fora.map(({ destino }) => destino)).toEqual(["/ia"]); for (const { destino } of PROBLEMAS.filter((p) => p.destino.startsWith("/servicos/"), )) { expect(getServicePage(destino.replace("/servicos/", ""))).toBeDefined(); } }); it("não cita nome de cliente", () => { const clientes = /SEV|Lavação|NutriScan|SC Plus|AS Serviços|Julia/; for (const { nome, solucao } of PROBLEMAS) { expect(nome).not.toMatch(clientes); expect(solucao).not.toMatch(clientes); } }); }); describe("problemaPorId", () => { it("acha pelo id", () => { expect(problemaPorId(PROBLEMAS[0].id)).toBe(PROBLEMAS[0]); }); it("devolve undefined para id inexistente", () => { expect(problemaPorId("nao-existe")).toBeUndefined(); }); }); describe("problemasDaArea", () => { it("devolve só os da área", () => { for (const area of areas) { const lista = problemasDaArea(area); expect(lista.every((p) => p.area === area)).toBe(true); } expect(areas.reduce((n, a) => n + problemasDaArea(a).length, 0)).toBe(27); }); });