feat(jogo): expediente dos mortos, jogo de zumbis em primeira pessoa
Etapa 1 inteira (logica com 100% de cobertura, cena 3D, toque, sons, bancada de desempenho, e2e) e a base da etapa 2 (mapa novo no Tiled, texturas, imagens dos itens, sons conferidos, golpe recortado e medido). Pagina /jogo fora do menu e do sitemap ate a medicao no celular.
This commit is contained in:
1 parent
c7d09d63d4
commit
67b32fcab3
118 files changed
+16730
No files matched your search
@@ -0,0 +1,78 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user