# test.govlab/quality/core/registries/validation.registry.test.ts

> 11 lines of code and 0 definitions.

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

Listed in [test.govlab/quality/core/registries](https://banes-lab.com/api/source/testing/test.govlab/quality/core/registries.md), after [test.govlab/quality/core/registries/tool.registry.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/registries/tool.registry.test.ts.md).

## Contained in

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

## Source

```typescript
import { defineValidator, registeredValidators } from "@govlab/quality/core/registries/validation.registry.ts";
import { expect, test } from "vitest";

const probe = function probe(id: string): Parameters<typeof defineValidator>[0] {
    return { appliesTo: "*", id, meta: { canonical: [], description: "probe" }, validate: () => [] };
};

test("defineValidator registers each id once, and registeredValidators lists them by id", () => {
    defineValidator(probe("zz-probe"));
    defineValidator(probe("aa-probe"));
    expect(registeredValidators().map((validator) => validator.id)).toStrictEqual(["aa-probe", "zz-probe"]);
    expect(() => defineValidator(probe("aa-probe"))).toThrow('"aa-probe"');
});
```
