test.govlab/quality/core/parsers/tool.dependency-cruiser.parser.test.ts

test.govlab/quality/core/parsers/tool.dependency-cruiser.parser.test.ts is a file in Codebase Testing. 37 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import { parseDependencyCruiserOutput } from "@govlab/quality/core/parsers/tool.dependency-cruiser.parser.ts";

const EXPECTED_COUNT = 2;

const RECORDED = JSON.stringify({
    summary: {
        violations: [
            { from: "src/a.js", rule: { name: "no-circular", severity: "error" }, to: "src/b.js", type: "cycle" },
            {
                from: "src/x.js",
                rule: { name: "no-secret", severity: "error" },
                to: "src/secret.js",
                type: "dependency",
            },
        ],
    },
});

describe("parseDependencyCruiserOutput", () => {
    it("maps each violation to an advisory (advisory:true) error finding keyed by the rule name", () => {
        const findings = parseDependencyCruiserOutput(RECORDED, "javascript");
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings[0]).toMatchObject({
            advisory: true,
            ecosystem: "javascript",
            file: "src/a.js",
            ruleId: "no-circular",
            severity: "error",
            tool: "dependency-cruiser",
        });
        expect(findings[0]?.message).toContain("src/a.js → src/b.js");
        expect(findings[1]).toMatchObject({ file: "src/x.js", ruleId: "no-secret" });
    });

    it("returns [] when there are no violations or the output is non-JSON", () => {
        expect(parseDependencyCruiserOutput("", "javascript")).toEqual([]);
        expect(parseDependencyCruiserOutput(JSON.stringify({ summary: { violations: [] } }), "javascript")).toEqual([]);
        expect(parseDependencyCruiserOutput("not json", "javascript")).toEqual([]);
    });
});