# test.govlab/quality/core/converters/concern.converter.test.ts

> 104 lines of code and 0 definitions.

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

Listed in [test.govlab/quality/core/converters](https://banes-lab.com/api/source/testing/test.govlab/quality/core/converters.md), after [test.govlab/quality/core/converters/comment.converter.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/converters/comment.converter.test.ts.md) and before [test.govlab/quality/core/converters/css.converter.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/converters/css.converter.test.ts.md).

## Contained in

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

## Source

```typescript
import type { CanonicalData, CanonicalSettingRecord } from "@govlab/quality/types/canon.types.ts";
import type { ConcernConfig, ConcernValue } from "@govlab/quality/types/concern.types.ts";
import {
    concernsToCanonicalConfig,
    parseConcernValue,
    resolveConcernMap,
} from "@govlab/quality/core/converters/concern.converter.ts";
import { describe, expect, it } from "vitest";

const CYCLO = 12;
const DEEP = 3;
const LONG = 20;
const FILE_LEN = 200;
const LINE_LEN = 120;
const ACCESS = 5;
const VALUE_KIND = "value";
const DEEP_NESTING = "deep-nesting";

const cm = function cm(entries: [string, ConcernValue][]): ConcernConfig {
    return Object.fromEntries(entries);
};

const setting = function setting(id: string, kind: CanonicalSettingRecord["kind"]): CanonicalSettingRecord {
    return { default: null, dimension: "probe", id, kind, surface: "probe", valueType: "number" };
};

const DATA: CanonicalData = {
    conflicts: [],
    ownership: [],
    rows: [],
    settings: [
        setting("long-function", VALUE_KIND),
        setting(DEEP_NESTING, VALUE_KIND),
        setting("cyclomatic-complexity", VALUE_KIND),
        setting("too-many-params", VALUE_KIND),
        setting("indentation", VALUE_KIND),
        setting("access-control", "rule-intent"),
        setting("csp", "rule-intent"),
    ],
};

describe("concernsToCanonicalConfig", () => {
    it("maps numeric concerns into the value channel of matching value-kind settings", () => {
        const out = concernsToCanonicalConfig(
            cm([
                [DEEP_NESTING, DEEP],
                ["long-function", LONG],
            ]),
            DATA,
        );
        expect(out.values).toEqual(
            cm([
                [DEEP_NESTING, DEEP],
                ["long-function", LONG],
            ]),
        );
        expect(out.enabled).toBeUndefined();
    });

    it("aliases the 'spacing' concern onto the 'indentation' value setting", () => {
        expect(concernsToCanonicalConfig({ spacing: 4 }, DATA).values).toEqual({ indentation: 4 });
    });

    it("skips concerns with no value setting (line-length, file-length)", () => {
        const out = concernsToCanonicalConfig(
            cm([
                ["file-length", FILE_LEN],
                ["line-length", LINE_LEN],
            ]),
            DATA,
        );
        expect(out.values).toBeUndefined();
        expect(out.enabled).toBeUndefined();
    });

    it("takes the numeric operand from a [severity, value] array", () => {
        const out = concernsToCanonicalConfig(cm([["cyclomatic-complexity", ["warn", CYCLO]]]), DATA);
        expect(out.values).toEqual(cm([["cyclomatic-complexity", CYCLO]]));
    });

    it("opts a rule-intent setting in on `true`, and skips `false`", () => {
        const out = concernsToCanonicalConfig(
            cm([
                ["access-control", true],
                ["csp", false],
            ]),
            DATA,
        );
        expect(out.enabled).toEqual(cm([["access-control", true]]));
    });

    it("ignores a numeric concern aimed at a rule-intent setting", () => {
        const out = concernsToCanonicalConfig(cm([["access-control", ACCESS]]), DATA);
        expect(out.values).toBeUndefined();
        expect(out.enabled).toBeUndefined();
    });
});

describe("parseConcernValue", () => {
    it("reads each concern value shape", () => {
        expect(parseConcernValue(true)).toStrictEqual({ exclude: false });
        expect(parseConcernValue(false)).toStrictEqual({ exclude: true });
        expect(parseConcernValue(DEEP)).toStrictEqual({ exclude: false, value: DEEP });
        expect(parseConcernValue("single")).toStrictEqual({ exclude: false, optionValue: ["single"] });
        expect(parseConcernValue(["a", 1])).toStrictEqual({ exclude: false, optionValue: ["a", 1] });
    });
});

describe("resolveConcernMap", () => {
    it("resolves each concept entry", () => {
        expect(resolveConcernMap(cm([[DEEP_NESTING, DEEP]])).get(DEEP_NESTING)).toStrictEqual({
            exclude: false,
            value: DEEP,
        });
    });
});
```
