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:
1 parent
6ac87824f3
commit
1a60795107
57 files changed
+625
-12090
No files matched your search
+26
-6
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user