mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 07:20:45 +00:00
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
import { Command } from "commander";
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const { acpAction, registerAcpCli } = vi.hoisted(() => {
|
|
const action = vi.fn();
|
|
const register = vi.fn((program: Command) => {
|
|
program.command("acp").action(action);
|
|
});
|
|
return { acpAction: action, registerAcpCli: register };
|
|
});
|
|
|
|
const { nodesAction, registerNodesCli } = vi.hoisted(() => {
|
|
const action = vi.fn();
|
|
const register = vi.fn((program: Command) => {
|
|
const nodes = program.command("nodes");
|
|
nodes.command("list").action(action);
|
|
});
|
|
return { nodesAction: action, registerNodesCli: register };
|
|
});
|
|
|
|
vi.mock("../acp-cli.js", () => ({ registerAcpCli }));
|
|
vi.mock("../nodes-cli.js", () => ({ registerNodesCli }));
|
|
|
|
const { registerSubCliCommands } = await import("./register.subclis.js");
|
|
|
|
describe("registerSubCliCommands", () => {
|
|
const originalArgv = process.argv;
|
|
const originalEnv = { ...process.env };
|
|
|
|
beforeEach(() => {
|
|
process.env = { ...originalEnv };
|
|
delete process.env.CLAWDBOT_DISABLE_LAZY_SUBCOMMANDS;
|
|
registerAcpCli.mockClear();
|
|
acpAction.mockClear();
|
|
registerNodesCli.mockClear();
|
|
nodesAction.mockClear();
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.argv = originalArgv;
|
|
process.env = { ...originalEnv };
|
|
});
|
|
|
|
it("registers only the primary placeholder and dispatches", async () => {
|
|
process.argv = ["node", "clawdbot", "acp"];
|
|
const program = new Command();
|
|
registerSubCliCommands(program, process.argv);
|
|
|
|
expect(program.commands.map((cmd) => cmd.name())).toEqual(["acp"]);
|
|
|
|
await program.parseAsync(process.argv);
|
|
|
|
expect(registerAcpCli).toHaveBeenCalledTimes(1);
|
|
expect(acpAction).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("registers placeholders for all subcommands when no primary", () => {
|
|
process.argv = ["node", "clawdbot"];
|
|
const program = new Command();
|
|
registerSubCliCommands(program, process.argv);
|
|
|
|
const names = program.commands.map((cmd) => cmd.name());
|
|
expect(names).toContain("acp");
|
|
expect(names).toContain("gateway");
|
|
expect(registerAcpCli).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("re-parses argv for lazy subcommands", async () => {
|
|
process.argv = ["node", "clawdbot", "nodes", "list"];
|
|
const program = new Command();
|
|
program.name("clawdbot");
|
|
registerSubCliCommands(program, process.argv);
|
|
|
|
expect(program.commands.map((cmd) => cmd.name())).toEqual(["nodes"]);
|
|
|
|
await program.parseAsync(["nodes", "list"], { from: "user" });
|
|
|
|
expect(registerNodesCli).toHaveBeenCalledTimes(1);
|
|
expect(nodesAction).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|