40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { readdirSync, readFileSync } from "node:fs";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
const workbenchRoot = join(process.cwd(), "src/features/workbench");
|
|
const forbiddenSupplyTerms = [
|
|
"给水管线",
|
|
"供水管网",
|
|
"阀门",
|
|
"保供",
|
|
"需水量",
|
|
"东直门",
|
|
"DN600",
|
|
"爆管",
|
|
"消防栓",
|
|
"低压片区"
|
|
] as const;
|
|
|
|
function listRuntimeFiles(directory: string): string[] {
|
|
return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
|
|
const target = join(directory, entry.name);
|
|
if (entry.isDirectory()) return listRuntimeFiles(target);
|
|
if (!/\.(ts|tsx)$/.test(entry.name) || /\.(test|e2e)\.(ts|tsx)$/.test(entry.name)) return [];
|
|
return [target];
|
|
});
|
|
}
|
|
|
|
describe("drainage domain boundary", () => {
|
|
it("does not reintroduce supply-only operating language", () => {
|
|
const violations = listRuntimeFiles(workbenchRoot).flatMap((file) => {
|
|
const source = readFileSync(file, "utf8");
|
|
return forbiddenSupplyTerms
|
|
.filter((term) => source.includes(term))
|
|
.map((term) => `${file.replace(`${workbenchRoot}/`, "")}: ${term}`);
|
|
});
|
|
|
|
expect(violations).toEqual([]);
|
|
});
|
|
});
|