62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
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<string[]> {
|
|
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([]);
|
|
});
|
|
});
|