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

> 25 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-coordination-core-registries-rule-registry-test-ts
Source text: https://banes-lab.com/source/testing/test.coordination/core/registries/rule.registry.test.ts.txt

Listed in [test.coordination/core/registries](https://banes-lab.com/api/source/testing/test.coordination/core/registries.md), after [test.coordination/core/registries/fixture.registry.test.ts](https://banes-lab.com/source/testing/test.coordination/core/registries/fixture.registry.test.ts.md) and before [test.coordination/core/registries/snapshot.registry.test.ts](https://banes-lab.com/source/testing/test.coordination/core/registries/snapshot.registry.test.ts.md).

## Contained in

- [test.coordination/core/registries](https://banes-lab.com/anatomy/testing/folder-testing-test-coordination-core-registries.md)

## Source

```typescript
import { describe, it } from "vitest";
import { discoverRules, identityOf } from "coordination-surface/tools/core/registries/rule.registry.ts";
import { STAGES } from "coordination-surface/tools/core/types/rule.types.ts";
import assert from "node:assert/strict";
import { projectRoot } from "coordination-surface/config/surface.config.ts";

describe("identityOf", () => {
    it("reads a rule's identity from its filename subject on either separator", () => {
        assert.equal(identityOf("kit/rules/board.rule.ts"), "board");
        assert.equal(identityOf(String.raw`kit\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),
        );
    });
});
```
