# test.govlab/quality/core/validators/binding.validator.test.ts

> 10 lines of code and 0 definitions.

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

Listed in [test.govlab/quality/core/validators](https://banes-lab.com/api/source/testing/test.govlab/quality/core/validators.md), before [test.govlab/quality/core/validators/concern.validator.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/validators/concern.validator.test.ts.md).

## Contained in

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

## Source

```typescript
import { expect, test } from "vitest";
import { bindingFindings } from "@govlab/quality/core/validators/binding.validator.ts";

const rule = (id: string, text: string): { file: string; id: string; text: string } => ({ file: `${id}.ts`, id, text });

const isConcept = (concept: string): boolean => concept === "magic-number";

test("bindingFindings reports a rule with no contract, no canonical list, or an unknown concept", () => {
    const contracts = new Set(["no-x"]);
    expect(bindingFindings([rule("no-x", 'canonical: ["magic-number"]')], contracts, isConcept)).toStrictEqual([]);
    const findings = bindingFindings([rule("no-y", 'canonical: ["ghost"]'), rule("no-x", "")], contracts, isConcept);
    expect(findings.map((finding) => finding.reason)).toStrictEqual(["no-contract", "unknown-concept", "no-canonical"]);
});
```
