test.govlab/quality/core/parsers/tool.tflint.parser.test.ts
test.govlab/quality/core/parsers/tool.tflint.parser.test.ts is a file in Codebase Testing. 54 lines of code and 0 definitions.
import { describe, expect, it } from "vitest";
import { parseTflintOutput, tflintErrorDetail } from "@govlab/quality/core/parsers/tool.tflint.parser.ts";
describe("tflintErrorDetail", () => {
it("joins the reported error messages, and falls back to stderr then stdout", () => {
expect(tflintErrorDetail(JSON.stringify({ errors: [{ message: "a" }, { message: "b" }] }), "")).toBe("a; b");
expect(tflintErrorDetail("", "broke")).toBe("broke");
});
});
const EXPECTED_COUNT = 2;
const RECORDED = JSON.stringify({
issues: [
{
fixable: false,
message: "`region` variable has no type",
range: { filename: "main.tf", start: { column: 1, line: 12 } },
rule: { name: "terraform_typed_variables", severity: "warning" },
},
{
fixable: true,
message: "Interpolation-only expressions are deprecated",
range: { filename: "main.tf", start: { column: 21, line: 2 } },
rule: { name: "terraform_deprecated_interpolation", severity: "error" },
},
],
});
describe("parseTflintOutput", () => {
it("maps each issue to an ADVISORY finding (advisory:true) keyed by the nested rule name", () => {
const findings = parseTflintOutput(RECORDED, "iac");
expect(findings).toHaveLength(EXPECTED_COUNT);
expect(findings.every((finding) => finding.advisory)).toBe(true);
expect(findings[0]).toMatchObject({
advisory: true,
column: 1,
ecosystem: "iac",
file: "main.tf",
fixable: false,
line: 12,
ruleId: "terraform_typed_variables",
severity: "error",
tool: "tflint",
});
expect(findings[1]).toMatchObject({
advisory: true,
fixable: true,
ruleId: "terraform_deprecated_interpolation",
severity: "error",
});
});
it("returns [] on empty, no-issues, or non-JSON output", () => {
expect(parseTflintOutput("", "iac")).toEqual([]);
expect(parseTflintOutput(JSON.stringify({ issues: [] }), "iac")).toEqual([]);
expect(parseTflintOutput("not json", "iac")).toEqual([]);
});
});