diff --git a/src/auto-reply/commands-args.test.ts b/src/auto-reply/commands-args.test.ts new file mode 100644 index 00000000000..c5e3ad71451 --- /dev/null +++ b/src/auto-reply/commands-args.test.ts @@ -0,0 +1,49 @@ +import { describe, expect, it } from "vitest"; +import type { CommandArgValues } from "./commands-registry.types.js"; +import { COMMAND_ARG_FORMATTERS } from "./commands-args.js"; + +function formatArgs(key: keyof typeof COMMAND_ARG_FORMATTERS, values: Record) { + const formatter = COMMAND_ARG_FORMATTERS[key]; + return formatter?.(values as unknown as CommandArgValues); +} + +describe("COMMAND_ARG_FORMATTERS", () => { + it("formats config args (show/get/unset/set) and normalizes values", () => { + expect(formatArgs("config", {})).toBeUndefined(); + + expect(formatArgs("config", { action: " SHOW " })).toBe("show"); + expect(formatArgs("config", { action: "get", path: " a.b " })).toBe("get a.b"); + expect(formatArgs("config", { action: "unset", path: "x" })).toBe("unset x"); + + expect(formatArgs("config", { action: "set" })).toBe("set"); + expect(formatArgs("config", { action: "set", path: "x" })).toBe("set x"); + expect(formatArgs("config", { action: "set", path: "x", value: 1 })).toBe("set x=1"); + expect(formatArgs("config", { action: "set", path: "x", value: { ok: true } })).toBe( + 'set x={"ok":true}', + ); + + expect(formatArgs("config", { action: "whoami", path: "ignored" })).toBe("whoami"); + }); + + it("formats debug args (show/reset/unset/set)", () => { + expect(formatArgs("debug", { action: "show", path: "x" })).toBe("show"); + expect(formatArgs("debug", { action: "reset", path: "x" })).toBe("reset"); + expect(formatArgs("debug", { action: "unset" })).toBe("unset"); + expect(formatArgs("debug", { action: "unset", path: "x" })).toBe("unset x"); + expect(formatArgs("debug", { action: "set", path: "x" })).toBe("set x"); + expect(formatArgs("debug", { action: "set", path: "x", value: true })).toBe("set x=true"); + }); + + it("formats queue args (order + omission)", () => { + expect(formatArgs("queue", {})).toBeUndefined(); + expect(formatArgs("queue", { mode: "fifo" })).toBe("fifo"); + expect( + formatArgs("queue", { + mode: "fifo", + debounce: 10, + cap: 2n, + drop: Symbol("tail"), + }), + ).toBe("fifo debounce:10 cap:2 drop:Symbol(tail)"); + }); +});