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

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

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

const EXPECTED_COUNT = 2;

const RECORDED =
    '[{"Failure":"function Complex has cognitive complexity 15 (> max enabled 3)","Position":{"Start":{"Column":1,"Filename":"bad.go","Line":3}},"RuleName":"cognitive-complexity","Severity":"warning"},' +
    '{"Failure":"maximum number of arguments per function exceeded; max 2 but got 3","Position":{"Start":{"Column":1,"Filename":"bad.go","Line":3}},"RuleName":"argument-limit","Severity":"error"}]';

describe("parseReviveOutput", () => {
    it("maps each failure to a gating (advisory:false) error finding keyed by RuleName when elected", () => {
        const findings = parseReviveOutput(RECORDED, "go", false);
        expect(findings).toHaveLength(EXPECTED_COUNT);
        expect(findings[0]).toMatchObject({
            advisory: false,
            column: 1,
            ecosystem: "go",
            file: "bad.go",
            line: 3,
            ruleId: "cognitive-complexity",
            severity: "error",
            tool: "revive",
        });
        expect(findings[1]).toMatchObject({ advisory: false, ruleId: "argument-limit", severity: "error" });
    });

    it("marks every finding advisory (non-gating) but still an error when revive runs unelected", () => {
        const findings = parseReviveOutput(RECORDED, "go", true);
        expect(findings.every((finding) => finding.advisory && finding.severity === "error")).toBe(true);
    });

    it("returns [] on empty or non-array output", () => {
        expect(parseReviveOutput("", "go", false)).toEqual([]);
        expect(parseReviveOutput("[]", "go", false)).toEqual([]);
        expect(parseReviveOutput("not json", "go", false)).toEqual([]);
    });
});