# tests/core/registries/rule.registry.test.ts

> 25 lines of code and 0 definitions.

Tree: Coordination tree
Language: typescript
Canonical: https://banes-lab.com/anatomy/coordination#file-coordination-tests-core-registries-rule-registry-test-ts
Source text: https://banes-lab.com/assets/sources/source.3530a1cfdd1dd2121352dc6e1cb5c3f68f9bacadb8ab52a5706bfe03e52d6fbf.generated.txt

## Source

```typescript
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),
        );
    });
});
```
