test.govlab/quality/core/parsers/tool.rubocop.parser.test.ts
test.govlab/quality/core/parsers/tool.rubocop.parser.test.ts is a file in Codebase Testing. 65 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { parseRubocopOutput } from "@govlab/quality/core/parsers/tool.rubocop.parser.ts";
const EXPECTED_COUNT = 2;
const RECORDED = JSON.stringify({
files: [
{
offenses: [
{
cop_name: "Metrics/CyclomaticComplexity",
correctable: false,
corrected: false,
location: { start_column: 1, start_line: 4 },
message: "Cyclomatic complexity for classify is too high. [14/12]",
severity: "convention",
},
{
cop_name: "Layout/TrailingWhitespace",
correctable: true,
corrected: false,
location: { start_column: 20, start_line: 6 },
message: "Trailing whitespace detected.",
severity: "convention",
},
{
cop_name: "Style/FrozenStringLiteralComment",
correctable: true,
corrected: true,
location: { start_column: 1, start_line: 1 },
message: "Missing frozen string literal comment.",
severity: "convention",
},
],
path: "app.rb",
},
],
metadata: { rubocop_version: "1.88.1" },
summary: { offense_count: 3, target_file_count: 1 },
});
describe("parseRubocopOutput", () => {
it("maps non-corrected offenses to gating (error, advisory:false) Findings", () => {
const findings = parseRubocopOutput(RECORDED, "ruby");
expect(findings).toHaveLength(EXPECTED_COUNT);
expect(findings[0]).toMatchObject({
advisory: false,
column: 1,
ecosystem: "ruby",
file: "app.rb",
fixable: false,
line: 4,
ruleId: "Metrics/CyclomaticComplexity",
severity: "error",
tool: "rubocop",
});
expect(findings[1]).toMatchObject({ column: 20, fixable: true, line: 6, ruleId: "Layout/TrailingWhitespace" });
});
it("drops already-corrected offenses (they are resolved, not findings)", () => {
const findings = parseRubocopOutput(RECORDED, "ruby");
expect(findings.some((finding) => finding.ruleId === "Style/FrozenStringLiteralComment")).toBe(false);
});
it("returns [] on empty, no-files, or non-JSON output", () => {
expect(parseRubocopOutput("", "ruby")).toEqual([]);
expect(parseRubocopOutput("{}", "ruby")).toEqual([]);
expect(parseRubocopOutput("not json", "ruby")).toEqual([]);
});
});