# test.govlab/quality/core/converters/canon.concept.converter.test.ts

> 21 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-canon-concept-converter-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/quality/core/converters/canon.concept.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/access.converter.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/converters/access.converter.test.ts.md) and before [test.govlab/quality/core/converters/canon.converter.test.ts](https://banes-lab.com/source/testing/test.govlab/quality/core/converters/canon.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 { expect, test } from "vitest";
import { mappingConcepts } from "@govlab/quality/core/converters/canon.concept.converter.ts";

const CONCEPT = "file-length";

const CONCEPTS = [{ byEcosystem: {}, byTool: {}, dimension: "size", id: CONCEPT, sample: [], tools: 2, total: 3 }];

test("mappingConcepts groups each concept's rules per tool, with the knob a concept declares for that tool", () => {
    const rules = [
        { canonical: [CONCEPT], ecosystem: "typescript", ruleId: "max-lines", tool: "eslint" },
        { canonical: [CONCEPT], ecosystem: "python", ruleId: "C0302", tool: "pylint" },
        { canonical: CONCEPT, ecosystem: "python", ruleId: "C0303", tool: "pylint" },
    ];
    const knobs = {
        [CONCEPT]: { tools: { eslint: { default: 300, fidelity: "exact", knob: "max" } }, valueType: "number" },
    };
    const mapped = mappingConcepts(rules, CONCEPTS, knobs).get(CONCEPT);
    expect(mapped?.dimension).toBe("size");
    expect(mapped?.ruleCount).toBe(3);
    expect(mapped?.entries.map((entry) => [entry.tool, entry.knob])).toStrictEqual([
        ["pylint", null],
        ["eslint", "max"],
    ]);
});
```
