/*
Unit tests for diagnostics covering formatFailureDiagnostics. It also guards the documented public contract and regression-sensitive edge cases.
- Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only.
- Fixtures stay inline and minimal so each case states its own setup.
- RFC-1311: Compass header sweep — declares the diagnostics suite's contract for test-file scaffold coverage.
*/
// @ai-invariant fixtures must not couple to kernel internals beyond the public surface under test
import { test, expect, describe } from "vitest";
import { formatFailureDiagnostics } from "../diagnostics.ts";
describe("formatFailureDiagnostics", () => {
test("returns [] for null", () => {
expect(formatFailureDiagnostics(null)).toEqual([]);
});
test("returns [] for undefined", () => {
expect(formatFailureDiagnostics(undefined)).toEqual([]);
});
test("returns [] for non-object", () => {
expect(formatFailureDiagnostics(42)).toEqual([]);
expect(formatFailureDiagnostics("string")).toEqual([]);
});
test("returns [] when no recognized array is present", () => {
expect(formatFailureDiagnostics({ ok: false })).toEqual([]);
});
test("diagnostics[] (strings) wins over violations[]", () => {
const lines = formatFailureDiagnostics({
diagnostics: ["first remediation line"],
violations: ["should not be picked"],
});
expect(lines).toEqual([" first remediation line"]);
});
test("violations[] (objects) when diagnostics is absent", () => {
const lines = formatFailureDiagnostics({
violations: [{ ruleId: "OS-09", file: "apps/foo/", message: "exists" }],
});
expect(lines).toEqual([" OS-09 · apps/foo/ · exists"]);
});
test("findings[] (audit shape)", () => {
const lines = formatFailureDiagnostics({
findings: [
{ ruleId: "PV-01", severity: "error", file: "dist/missing", message: "not found" },
],
});
expect(lines.length).toBeGreaterThan(0);
expect(lines[0]).toContain("PV-01");
});
test("errors[] fallback", () => {
const lines = formatFailureDiagnostics({
errors: ["something went wrong"],
});
expect(lines).toEqual([" something went wrong"]);
});
test("details[] fallback", () => {
const lines = formatFailureDiagnostics({
details: ["detail line 1"],
});
expect(lines).toEqual([" detail line 1"]);
});
test("diagnostics[] of objects formats with ruleId, file, message", () => {
const lines = formatFailureDiagnostics({
diagnostics: [{ ruleId: "X-01", file: "src/a.ts", message: "bad" }],
});
expect(lines.length).toBeGreaterThan(0);
expect(lines[0]).toContain("X-01");
});
test("truncates at 50 lines", () => {
const diagnostics = Array.from({ length: 60 }, (_, i) => `line ${i}`);
const lines = formatFailureDiagnostics({ diagnostics });
expect(lines.length).toBeLessThanOrEqual(51);
});
});