mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 16:11:36 +00:00
test(cli): add action-reparse coverage for fallback argv resolution
This commit is contained in:
78
src/cli/program/action-reparse.test.ts
Normal file
78
src/cli/program/action-reparse.test.ts
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
import { Command } from "commander";
|
||||||
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
|
||||||
|
const buildParseArgvMock = vi.fn();
|
||||||
|
const resolveActionArgsMock = vi.fn();
|
||||||
|
|
||||||
|
vi.mock("../argv.js", () => ({
|
||||||
|
buildParseArgv: buildParseArgvMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
vi.mock("./helpers.js", () => ({
|
||||||
|
resolveActionArgs: resolveActionArgsMock,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const { reparseProgramFromActionArgs } = await import("./action-reparse.js");
|
||||||
|
|
||||||
|
describe("reparseProgramFromActionArgs", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.clearAllMocks();
|
||||||
|
buildParseArgvMock.mockReturnValue(["node", "openclaw", "status"]);
|
||||||
|
resolveActionArgsMock.mockReturnValue([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("uses action command name + args as fallback argv", async () => {
|
||||||
|
const program = new Command().name("openclaw");
|
||||||
|
const parseAsync = vi.spyOn(program, "parseAsync").mockResolvedValue(program);
|
||||||
|
const actionCommand = {
|
||||||
|
name: () => "status",
|
||||||
|
parent: {
|
||||||
|
rawArgs: ["node", "openclaw", "status", "--json"],
|
||||||
|
},
|
||||||
|
} as unknown as Command;
|
||||||
|
resolveActionArgsMock.mockReturnValue(["--json"]);
|
||||||
|
|
||||||
|
await reparseProgramFromActionArgs(program, [actionCommand]);
|
||||||
|
|
||||||
|
expect(buildParseArgvMock).toHaveBeenCalledWith({
|
||||||
|
programName: "openclaw",
|
||||||
|
rawArgs: ["node", "openclaw", "status", "--json"],
|
||||||
|
fallbackArgv: ["status", "--json"],
|
||||||
|
});
|
||||||
|
expect(parseAsync).toHaveBeenCalledWith(["node", "openclaw", "status"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("falls back to action args without command name when action has no name", async () => {
|
||||||
|
const program = new Command().name("openclaw");
|
||||||
|
const parseAsync = vi.spyOn(program, "parseAsync").mockResolvedValue(program);
|
||||||
|
const actionCommand = {
|
||||||
|
name: () => "",
|
||||||
|
parent: {},
|
||||||
|
} as unknown as Command;
|
||||||
|
resolveActionArgsMock.mockReturnValue(["--json"]);
|
||||||
|
|
||||||
|
await reparseProgramFromActionArgs(program, [actionCommand]);
|
||||||
|
|
||||||
|
expect(buildParseArgvMock).toHaveBeenCalledWith({
|
||||||
|
programName: "openclaw",
|
||||||
|
rawArgs: undefined,
|
||||||
|
fallbackArgv: ["--json"],
|
||||||
|
});
|
||||||
|
expect(parseAsync).toHaveBeenCalledWith(["node", "openclaw", "status"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("uses program root when action command is missing", async () => {
|
||||||
|
const program = new Command().name("openclaw");
|
||||||
|
const parseAsync = vi.spyOn(program, "parseAsync").mockResolvedValue(program);
|
||||||
|
|
||||||
|
await reparseProgramFromActionArgs(program, []);
|
||||||
|
|
||||||
|
expect(resolveActionArgsMock).toHaveBeenCalledWith(undefined);
|
||||||
|
expect(buildParseArgvMock).toHaveBeenCalledWith({
|
||||||
|
programName: "openclaw",
|
||||||
|
rawArgs: [],
|
||||||
|
fallbackArgv: [],
|
||||||
|
});
|
||||||
|
expect(parseAsync).toHaveBeenCalledWith(["node", "openclaw", "status"]);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user