test.govlab/quality/core/selectors/record.selector.test.ts

test.govlab/quality/core/selectors/record.selector.test.ts is a file in Codebase Testing. 46 lines of code and 0 definitions.

import {
    arrayField,
    boolField,
    firstNumberField,
    firstRecord,
    hasField,
    isRecord,
    numberField,
    numericField,
    recordAt,
    recordsAt,
    stringArrayField,
    stringArrayFieldOr,
    stringField,
} from "@govlab/quality/core/selectors/record.selector.ts";
import { expect, test } from "vitest";

const DEFAULT = 7;
const record = {
    a: "x",
    flags: ["b", 1],
    list: [{ n: 1 }, 2],
    n: 3,
    nested: { k: 1 },
    numeric: "4",
    on: true,
    span: [5],
};

test("record selectors read typed fields with fallbacks", () => {
    expect(isRecord(record)).toBe(true);
    expect(recordAt(record, "nested")).toStrictEqual({ k: 1 });
    expect(recordAt(record, "a")).toStrictEqual({});
    expect(recordsAt(record, "list")).toStrictEqual([{ n: 1 }]);
    expect(firstRecord([])).toStrictEqual({});
    expect(stringField(record, "a")).toBe("x");
    expect(stringField(record, "n", "none")).toBe("none");
    expect(numberField(record, "n", DEFAULT)).toBe(3);
    expect(numberField(record, "a", DEFAULT)).toBe(DEFAULT);
    expect(boolField(record, "on")).toBe(true);
    expect(hasField(record, "missing")).toBe(false);
    expect(arrayField(record, "flags")).toStrictEqual(["b", 1]);
    expect(stringArrayField(record, "flags")).toStrictEqual(["b"]);
    expect(stringArrayFieldOr(record, "missing", ["d"])).toStrictEqual(["d"]);
    expect(numericField(record, "numeric", DEFAULT)).toBe(4);
    expect(firstNumberField(record, "span", DEFAULT)).toBe(5);
    expect(firstNumberField(record, "a", DEFAULT)).toBe(DEFAULT);
});