import { readdir, readFile } from "node:fs/promises"; import { join } from "node:path"; import { describe, expect, it } from "@suaveplan/testing/runner"; const SRC_DIR = join(import.meta.dirname, "..", "src"); async function collectTsFiles(dir: string): Promise { const entries = await readdir(dir, { withFileTypes: true }); const files: string[] = []; for (const entry of entries) { const full = join(dir, entry.name); if (entry.isDirectory()) { files.push(...(await collectTsFiles(full))); } else if ( entry.isFile() && entry.name.endsWith(".ts") && !entry.name.endsWith(".test.ts") ) { files.push(full); } } return files; } describe("source quality: no disallowed patterns", () => { it("no vi.mock / jest.mock in src/", { timeout: 5000 }, async () => { const files = await collectTsFiles(SRC_DIR); const violations: string[] = []; for (const file of files) { const content = await readFile(file, "utf-8"); if (content.includes("vi.mock") || content.includes("jest.mock")) { violations.push(file); } } expect(violations).toEqual([]); }); it("no TODO or FIXME in src/", { timeout: 5000 }, async () => { const files = await collectTsFiles(SRC_DIR); const violations: string[] = []; for (const file of files) { const content = await readFile(file, "utf-8"); if (/\bTODO\b|\bFIXME\b/.test(content)) { violations.push(file); } } expect(violations).toEqual([]); }); it("no ts-ignore in src/", { timeout: 5000 }, async () => { const files = await collectTsFiles(SRC_DIR); const violations: string[] = []; for (const file of files) { const content = await readFile(file, "utf-8"); if (content.includes("@ts-ignore")) { violations.push(file); } } expect(violations).toEqual([]); }); });