test.govlab/quality/core/parsers/tool.kics.parser.test.ts

test.govlab/quality/core/parsers/tool.kics.parser.test.ts is a file in Codebase Testing. 56 lines of code and 0 definitions.

import { describe, expect, it } from "vitest";
import { parseKicsReport } from "@govlab/quality/core/parsers/tool.kics.parser.ts";

const EXPECTED_COUNT = 3;
const THIRD = 2;

const RECORDED = JSON.stringify({
    queries: [
        {
            category: "Supply-Chain",
            description: "Setting state to latest performs an update.",
            files: [{ file_name: "govlab-governance/polyglot/ansible/playbook.yml", line: 7 }],
            query_name: "Unpinned Package Version",
            severity: "LOW",
        },
        {
            description: "World-writable file permissions.",
            files: [
                { file_name: "a.yml", line: 3 },
                { file_name: "b.yml", line: 9 },
            ],
            query_name: "Insecure Permissions",
            severity: "HIGH",
        },
    ],
});

describe("parseKicsReport", () => {
    it("expands each query×file pair into an advisory finding keyed by query name, severity mapped", () => {
        const findings = parseKicsReport(RECORDED, "ansible");
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings[0]).toMatchObject({
            advisory: true,
            ecosystem: "ansible",
            file: "govlab-governance/polyglot/ansible/playbook.yml",
            line: 7,
            ruleId: "Unpinned Package Version",
            severity: "error",
            tool: "kics",
        });
        expect(findings[1]).toMatchObject({
            advisory: true,
            line: 3,
            ruleId: "Insecure Permissions",
            severity: "error",
        });
        expect(findings[THIRD]).toMatchObject({
            advisory: true,
            file: "b.yml",
            line: 9,
            ruleId: "Insecure Permissions",
        });
    });

    it("returns [] on empty, no-queries, or non-JSON output", () => {
        expect(parseKicsReport("", "ansible")).toEqual([]);
        expect(parseKicsReport(JSON.stringify({ queries: [] }), "ansible")).toEqual([]);
        expect(parseKicsReport("not json", "ansible")).toEqual([]);
    });
});