From d5bfbc36d801ae38383c8586b320913ec4ab89a0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 20:08:35 +0000 Subject: [PATCH] test(cli): add program context unit coverage --- src/cli/program/context.test.ts | 37 ++++++++++++++++++++++++ src/cli/program/program-context.test.ts | 38 +++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/cli/program/context.test.ts create mode 100644 src/cli/program/program-context.test.ts diff --git a/src/cli/program/context.test.ts b/src/cli/program/context.test.ts new file mode 100644 index 000000000..18fc90deb --- /dev/null +++ b/src/cli/program/context.test.ts @@ -0,0 +1,37 @@ +import { describe, expect, it, vi } from "vitest"; + +const resolveCliChannelOptionsMock = vi.fn(() => ["telegram", "whatsapp"]); + +vi.mock("../../version.js", () => ({ + VERSION: "9.9.9-test", +})); + +vi.mock("../channel-options.js", () => ({ + resolveCliChannelOptions: resolveCliChannelOptionsMock, +})); + +const { createProgramContext } = await import("./context.js"); + +describe("createProgramContext", () => { + it("builds program context from version and resolved channel options", () => { + resolveCliChannelOptionsMock.mockReturnValue(["telegram", "whatsapp"]); + + expect(createProgramContext()).toEqual({ + programVersion: "9.9.9-test", + channelOptions: ["telegram", "whatsapp"], + messageChannelOptions: "telegram|whatsapp", + agentChannelOptions: "last|telegram|whatsapp", + }); + }); + + it("handles empty channel options", () => { + resolveCliChannelOptionsMock.mockReturnValue([]); + + expect(createProgramContext()).toEqual({ + programVersion: "9.9.9-test", + channelOptions: [], + messageChannelOptions: "", + agentChannelOptions: "last", + }); + }); +}); diff --git a/src/cli/program/program-context.test.ts b/src/cli/program/program-context.test.ts new file mode 100644 index 000000000..004c0bb7e --- /dev/null +++ b/src/cli/program/program-context.test.ts @@ -0,0 +1,38 @@ +import { Command } from "commander"; +import { describe, expect, it } from "vitest"; +import type { ProgramContext } from "./context.js"; +import { getProgramContext, setProgramContext } from "./program-context.js"; + +function makeCtx(version: string): ProgramContext { + return { + programVersion: version, + channelOptions: ["telegram"], + messageChannelOptions: "telegram", + agentChannelOptions: "last|telegram", + }; +} + +describe("program context storage", () => { + it("stores and retrieves context on a command instance", () => { + const program = new Command(); + const ctx = makeCtx("1.2.3"); + setProgramContext(program, ctx); + expect(getProgramContext(program)).toBe(ctx); + }); + + it("returns undefined when no context was set", () => { + expect(getProgramContext(new Command())).toBeUndefined(); + }); + + it("does not leak context between command instances", () => { + const programA = new Command(); + const programB = new Command(); + const ctxA = makeCtx("a"); + const ctxB = makeCtx("b"); + setProgramContext(programA, ctxA); + setProgramContext(programB, ctxB); + + expect(getProgramContext(programA)).toBe(ctxA); + expect(getProgramContext(programB)).toBe(ctxB); + }); +});