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

> 37 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-section-validator-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/quality/core/validators/section.validator.test.ts.txt

Listed in [test.govlab/quality/core/validators](https://banes-lab.com/api/source/testing/test.govlab/quality/core/validators.md), after [test.govlab/quality/core/validators/filename.validator.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/validators/filename.validator.test.ts.md) and before [test.govlab/quality/core/validators/surface.validator.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/validators/surface.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 {
    booleanFieldError,
    isObject,
    isStringArray,
    requireObjectField,
    stringArrayFieldError,
    stringFieldErrors,
    validateBlockExclusions,
    validateEcosystems,
    validateOwners,
} from "@govlab/quality/core/validators/section.validator.ts";
import { expect, test } from "vitest";

test("section guards narrow values as documented", () => {
    expect(isObject({})).toBe(true);
    expect(isObject(null)).toBe(false);
    expect(isStringArray(["a"])).toBe(true);
    expect(isStringArray("nope")).toBe(false);
});

test("section field checks report a wrong type and pass a right one", () => {
    expect(requireObjectField({ a: 1 }, "a")).toHaveLength(1);
    expect(requireObjectField({ a: {} }, "a")).toStrictEqual([]);
    expect(stringFieldErrors({ a: 1 }, ["a"])).toHaveLength(1);
    expect(stringArrayFieldError({ a: [1] }, "a", "bad")).toStrictEqual(["bad"]);
    expect(booleanFieldError({ a: "x" }, "a", "bad")).toStrictEqual(["bad"]);
    expect(booleanFieldError({ a: true }, "a", "bad")).toStrictEqual([]);
});

test("section validators refuse unknown ecosystems, non-string owners and incomplete block exclusions", () => {
    expect(validateEcosystems(["typescript"])).toStrictEqual([]);
    expect(validateEcosystems(["cobol"])).toHaveLength(1);
    expect(validateEcosystems("typescript")).toHaveLength(1);
    expect(validateOwners({ lint: { python: "ruff" } })).toStrictEqual([]);
    expect(validateOwners({ lint: { python: 1 } })).toHaveLength(1);
    expect(validateBlockExclusions([])).toStrictEqual([]);
    expect(validateBlockExclusions([{ file: "a.ts", functions: ["f"], rule: "r" }])).toStrictEqual([]);
    expect(validateBlockExclusions([{ file: "a.ts", functions: [], rule: "r" }])).toHaveLength(1);
    expect(validateBlockExclusions("nope")).toHaveLength(1);
});
```
