95 lines
2.5 KiB
TypeScript
95 lines
2.5 KiB
TypeScript
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,
|
||
});
|
||
});
|
||
});
|