# test.govlab/docs/core/factories/registry.factory.test.ts

> 45 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-docs-core-factories-registry-factory-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/docs/core/factories/registry.factory.test.ts.txt

Listed in [test.govlab/docs/core/factories](https://banes-lab.com/api/source/testing/test.govlab/docs/core/factories.md), after [test.govlab/docs/core/factories/graph.typescript.factory.test.ts](https://banes-lab.com/source/testing/test.govlab/docs/core/factories/graph.typescript.factory.test.ts.md) and before [test.govlab/docs/core/factories/seed.factory.test.ts](https://banes-lab.com/source/testing/test.govlab/docs/core/factories/seed.factory.test.ts.md).

## Contained in

- [test.govlab/docs/core/factories](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-docs-core-factories.md)

## Source

```typescript
import { describe, expect, it } from "vitest";
import type { DocForm } from "@govlab/docs/types/location.types.ts";
import { RegistryBuilder } from "@govlab/docs/core/factories/registry.factory.ts";
import type { UserRegistries } from "@govlab/docs/types/manifest.types.ts";

const GUIDE: DocForm = { boundary: false, folder: "guides", id: "guide", kind: "authored", ownerAxis: "concern" };
const BASE: UserRegistries = {
    activityVerbs: { scaling: "scale" },
    concerns: ["scaling"],
    forms: { guide: GUIDE },
    refVerbs: {},
};

const CANDIDATE_FORMS: readonly unknown[] = [
    { ...GUIDE, folder: "runbooks", id: "runbook" },
    { ...GUIDE, id: "clash" },
    { id: "broken" },
];
const CANDIDATE_CONCERNS: readonly unknown[] = [{ concern: "operations", verb: "operate" }, "scaling", ""];
const CANDIDATE_VERBS: readonly unknown[] = [
    { checks: ["path"], satisfies: ["paths"], verb: "uses" },
    { verb: "broken" },
];

const builtRegistries = function builtRegistries(): UserRegistries {
    const builder = new RegistryBuilder(BASE);
    for (const form of CANDIDATE_FORMS) {
        builder.addForm(form);
    }
    for (const concern of CANDIDATE_CONCERNS) {
        builder.addConcern(concern);
    }
    for (const verb of CANDIDATE_VERBS) {
        builder.addRefVerb(verb);
    }
    return builder.frozen();
};

describe("RegistryBuilder", () => {
    it("adds valid forms, concerns and reference verbs once, and refuses malformed or colliding ones", () => {
        const registries = builtRegistries();
        expect(Object.keys(registries.forms)).toStrictEqual(["guide", "runbook"]);
        expect(registries.concerns).toStrictEqual(["scaling", "operations"]);
        expect(registries.activityVerbs).toStrictEqual({ operations: "operate", scaling: "scale" });
        expect(Object.keys(registries.refVerbs)).toStrictEqual(["uses"]);
        expect(Object.isFrozen(registries.forms)).toBe(true);
        expect(Object.keys(BASE.forms)).toStrictEqual(["guide"]);
    });
});
```
