| import process from "node:process"; |
| import { Command } from "commander"; |
| import { beforeEach, describe, expect, it, vi } from "vitest"; |
| import type { ProgramContext } from "./context.js"; |
|
|
| const registerProgramCommandsMock = vi.fn(); |
| const createProgramContextMock = vi.fn(); |
| const configureProgramHelpMock = vi.fn(); |
| const registerPreActionHooksMock = vi.fn(); |
| const setProgramContextMock = vi.fn(); |
|
|
| vi.mock("./command-registry.js", () => ({ |
| registerProgramCommands: registerProgramCommandsMock, |
| })); |
|
|
| vi.mock("./context.js", () => ({ |
| createProgramContext: createProgramContextMock, |
| })); |
|
|
| vi.mock("./help.js", () => ({ |
| configureProgramHelp: configureProgramHelpMock, |
| })); |
|
|
| vi.mock("./preaction.js", () => ({ |
| registerPreActionHooks: registerPreActionHooksMock, |
| })); |
|
|
| vi.mock("./program-context.js", () => ({ |
| setProgramContext: setProgramContextMock, |
| })); |
|
|
| const { buildProgram } = await import("./build-program.js"); |
|
|
| describe("buildProgram", () => { |
| beforeEach(() => { |
| vi.clearAllMocks(); |
| createProgramContextMock.mockReturnValue({ |
| programVersion: "9.9.9-test", |
| channelOptions: ["telegram"], |
| messageChannelOptions: "telegram", |
| agentChannelOptions: "last|telegram", |
| } satisfies ProgramContext); |
| }); |
|
|
| it("wires context/help/preaction/command registration with shared context", () => { |
| const argv = ["node", "openclaw", "status"]; |
| const originalArgv = process.argv; |
| process.argv = argv; |
| try { |
| const program = buildProgram(); |
| const ctx = createProgramContextMock.mock.results[0]?.value as ProgramContext; |
|
|
| expect(program).toBeInstanceOf(Command); |
| expect(setProgramContextMock).toHaveBeenCalledWith(program, ctx); |
| expect(configureProgramHelpMock).toHaveBeenCalledWith(program, ctx); |
| expect(registerPreActionHooksMock).toHaveBeenCalledWith(program, ctx.programVersion); |
| expect(registerProgramCommandsMock).toHaveBeenCalledWith(program, ctx, argv); |
| } finally { |
| process.argv = originalArgv; |
| } |
| }); |
| }); |
|
|