chore: testes de ponta a ponta no CI e limpeza do repositório

Job e2e separado no CI; testes de teclado, rolagem, sem JS, axe no celular e menu do celular; limites de metadados derivados do sitemap; sai @react-three/fiber e @react-three/drei; pastas de ferramentas (.augment, .kiro, .claude/settings.local.json) fora do Git.
This commit is contained in:
Evandro Fonseca Junior committed 2026-10-14 17:01:37 -03:00
1 parent 6ac87824f3
commit 1a60795107
57 files changed
+625 -12090

No files matched your search

+26 -6
View File
@@ -1,8 +1,25 @@
import { readFileSync } from "node:fs";
import { readdirSync, readFileSync } from "node:fs";
import { join } from "node:path";
const root = join(__dirname, "..");
/** Arquivos de código (fora dos testes) de app/ e lib/ cuja primeira instrução é a diretiva "use client". */
function findClientFiles() {
return ["app", "lib"]
.flatMap((dir) =>
readdirSync(join(root, dir), { recursive: true, encoding: "utf8" }).map(
(file) => `${dir}/${file.replaceAll("\\", "/")}`,
),
)
.filter(
(file) =>
/\.tsx?$/.test(file) &&
!/\.test\.tsx?$/.test(file) &&
/^\s*["']use client["']/.test(readFileSync(join(root, file), "utf8")),
)
.sort();
}
describe("fronteira entre servidor e cliente", () => {
it.each([
"app/cases/_components/case-media.ts",
@@ -23,13 +40,16 @@ describe("fronteira entre servidor e cliente", () => {
it("não deixa nenhum componente de cliente importar um módulo só de servidor", () => {
const serverOnly =
/from "(?:@\/lib\/og-card|@\/lib\/portfolio-data\.server|(?:\.{1,2}\/)+(?:[\w-]+\/)*case-media)"/;
const clientFiles = [
"app/cases/_components/CasePlayer.tsx",
"app/curriculo/CvDownloadLink.tsx",
];
const clientFiles = findClientFiles();
// a busca precisa achar os componentes de cliente que existem, senão o teste passaria vazio
expect(clientFiles).toEqual(
expect.arrayContaining([
"app/cases/_components/CasePlayer.tsx",
"app/curriculo/CvDownloadLink.tsx",
]),
);
for (const file of clientFiles) {
const source = readFileSync(join(root, file), "utf8");
expect(source).toMatch(/^"use client";/);
expect(source).not.toMatch(serverOnly);
}
});