import { describe, expect, it } from "vitest" ;
import {
formatConfigIssueLine,
formatConfigIssueLines,
normalizeConfigIssue,
normalizeConfigIssuePath,
normalizeConfigIssues,
} from "./issue-format.js" ;
describe("config issue format" , () => {
it("normalizes empty paths to <root>" , () => {
expect(normalizeConfigIssuePath("" )).toBe("<root>" );
expect(normalizeConfigIssuePath(" " )).toBe("<root>" );
expect(normalizeConfigIssuePath(null )).toBe("<root>" );
expect(normalizeConfigIssuePath(undefined)).toBe("<root>" );
});
it("formats issue lines with and without markers" , () => {
expect(formatConfigIssueLine({ path: "" , message: "broken" }, "-" )).toBe("- : broken" );
expect(
formatConfigIssueLine({ path: "" , message: "broken" }, "-" , { normalizeRoot: true }),
).toBe("- <root>: broken" );
expect(formatConfigIssueLine({ path: "gateway.bind" , message: "invalid" }, "" )).toBe(
"gateway.bind: invalid" ,
);
expect(
formatConfigIssueLines(
[
{ path: "" , message: "first" },
{ path: "channels.signal.dmPolicy" , message: "second" },
],
"×" ,
{ normalizeRoot: true },
),
).toEqual(["× <root>: first" , "× channels.signal.dmPolicy: second" ]);
});
it("sanitizes control characters and ANSI sequences in formatted lines" , () => {
expect(
formatConfigIssueLine(
{
path: "gateway.\nbind\x1b[31m" ,
message: "bad\r\n\tvalue\x1b[0m\u0007" ,
},
"-" ,
),
).toBe("- gateway.\\nbind: bad\\r\\n\\tvalue" );
});
it("normalizes issue metadata for machine output" , () => {
expect(
normalizeConfigIssue({
path: "" ,
message: "invalid" ,
allowedValues: ["stable" , "beta" ],
allowedValuesHiddenCount: 0 ,
}),
).toEqual({
path: "<root>" ,
message: "invalid" ,
allowedValues: ["stable" , "beta" ],
});
expect(
normalizeConfigIssues([
{
path: "update.channel" ,
message: "invalid" ,
allowedValues: [],
allowedValuesHiddenCount: 2 ,
},
]),
).toEqual([
{
path: "update.channel" ,
message: "invalid" ,
},
]);
expect(
normalizeConfigIssue({
path: "update.channel" ,
message: "invalid" ,
allowedValues: ["stable" ],
allowedValuesHiddenCount: 2 ,
}),
).toEqual({
path: "update.channel" ,
message: "invalid" ,
allowedValues: ["stable" ],
allowedValuesHiddenCount: 2 ,
});
});
});
Messung V0.5 in Prozent C=100 H=93 G=96
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland