import { describe, it } from "node:test"; import { discoverRules, identityOf } from "../../../tools/core/registries/rule.registry.ts"; import { STAGES } from "../../../tools/core/types/rule.types.ts"; import assert from "node:assert/strict"; import { projectRoot } from "../../../config/surface.config.ts"; describe("identityOf", () => { it("reads a rule's identity from its filename subject on either separator", () => { assert.equal(identityOf("tools/rules/board.rule.ts"), "board"); assert.equal(identityOf(String.raw`tools\rules\board.rule.ts`), "board"); assert.equal(identityOf("bare"), "bare"); }); }); describe("discoverRules", () => { it("registers the package's own rules once each, in stage order, with no contract finding", async () => { const registry = await discoverRules(projectRoot()); const ids = registry.rules.map((rule) => rule.id); const stages = registry.rules.map((rule) => STAGES.indexOf(rule.declaration.stage)); assert.deepEqual(registry.findings, []); assert.equal(new Set(ids).size, ids.length); assert.deepEqual( stages, stages.toSorted((left, right) => left - right), ); }); });