test.govlab/quality/core/parsers/tool.credo.parser.test.ts
test.govlab/quality/core/parsers/tool.credo.parser.test.ts is a file in Codebase Testing. 56 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { parseCredoOutput } from "@govlab/quality/core/parsers/tool.credo.parser.ts";
const EXPECTED_COUNT = 2;
const RECORDED = `Compiling 1 file (.ex)
Generated bad app
{
"issues": [
{
"category": "readability",
"check": "Credo.Check.Readability.ModuleDoc",
"column": 11,
"column_end": 14,
"filename": "lib/bad.ex",
"line_no": 1,
"message": "Modules should have a @moduledoc tag.",
"priority": 1,
"scope": "Bad"
},
{
"category": "warning",
"check": "Credo.Check.Warning.UnusedEnumOperation",
"column": 5,
"filename": "lib/bad.ex",
"line_no": 3,
"message": "There should be no unused return values."
}
]
}`;
describe("parseCredoOutput", () => {
it("extracts the JSON object from noisy stdout and maps issues to advisory findings keyed by check", () => {
const findings = parseCredoOutput(RECORDED, "elixir");
expect(findings).toHaveLength(EXPECTED_COUNT);
expect(findings[0]).toMatchObject({
advisory: true,
column: 11,
ecosystem: "elixir",
file: "lib/bad.ex",
line: 1,
message: "Modules should have a @moduledoc tag.",
ruleId: "Credo.Check.Readability.ModuleDoc",
severity: "error",
tool: "credo",
});
expect(findings[1]).toMatchObject({
advisory: true,
line: 3,
ruleId: "Credo.Check.Warning.UnusedEnumOperation",
severity: "error",
});
});
it("returns [] when there is no JSON object or on malformed JSON", () => {
expect(parseCredoOutput("", "elixir")).toEqual([]);
expect(parseCredoOutput("Compiling... no json here", "elixir")).toEqual([]);
expect(parseCredoOutput("{ not valid json", "elixir")).toEqual([]);
});
});