mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-03 04:56:25 +00:00
fix(cli): preserve lazy command parent flags
This commit is contained in:
@@ -4,6 +4,7 @@ import { reparseProgramFromActionArgs } from "./action-reparse.js";
|
||||
|
||||
const buildParseArgvMock = vi.hoisted(() => vi.fn());
|
||||
const resolveActionArgsMock = vi.hoisted(() => vi.fn());
|
||||
const resolveCommandOptionArgsMock = vi.hoisted(() => vi.fn());
|
||||
|
||||
vi.mock("../argv.js", () => ({
|
||||
buildParseArgv: buildParseArgvMock,
|
||||
@@ -11,6 +12,7 @@ vi.mock("../argv.js", () => ({
|
||||
|
||||
vi.mock("./helpers.js", () => ({
|
||||
resolveActionArgs: resolveActionArgsMock,
|
||||
resolveCommandOptionArgs: resolveCommandOptionArgsMock,
|
||||
}));
|
||||
|
||||
describe("reparseProgramFromActionArgs", () => {
|
||||
@@ -18,6 +20,7 @@ describe("reparseProgramFromActionArgs", () => {
|
||||
vi.clearAllMocks();
|
||||
buildParseArgvMock.mockReturnValue(["node", "openclaw", "status"]);
|
||||
resolveActionArgsMock.mockReturnValue([]);
|
||||
resolveCommandOptionArgsMock.mockReturnValue([]);
|
||||
});
|
||||
|
||||
it("uses action command name + args as fallback argv", async () => {
|
||||
@@ -60,6 +63,27 @@ describe("reparseProgramFromActionArgs", () => {
|
||||
expect(parseAsync).toHaveBeenCalledWith(["node", "openclaw", "status"]);
|
||||
});
|
||||
|
||||
it("preserves explicit parent command options in fallback argv", async () => {
|
||||
const program = new Command().name("browser");
|
||||
const parseAsync = vi.spyOn(program, "parseAsync").mockResolvedValue(program);
|
||||
const actionCommand = {
|
||||
name: () => "open",
|
||||
parent: program,
|
||||
} as unknown as Command;
|
||||
resolveActionArgsMock.mockReturnValue(["about:blank"]);
|
||||
resolveCommandOptionArgsMock.mockReturnValue(["--json"]);
|
||||
|
||||
await reparseProgramFromActionArgs(program, [actionCommand]);
|
||||
|
||||
expect(resolveCommandOptionArgsMock).toHaveBeenCalledWith(program);
|
||||
expect(buildParseArgvMock).toHaveBeenCalledWith({
|
||||
programName: "browser",
|
||||
rawArgs: [],
|
||||
fallbackArgv: ["--json", "open", "about:blank"],
|
||||
});
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user