mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-11 02:40:44 +00:00
* fix(cli): fast-path bare channels help * fix(cli): normalize channels add argv gating * fix(cli): restore channel add completion flags
59 lines
2.4 KiB
TypeScript
59 lines
2.4 KiB
TypeScript
import { Command } from "commander";
|
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { applyParentDefaultHelpAction, isParentDefaultHelpAction } from "./parent-default-help.js";
|
|
|
|
describe("applyParentDefaultHelpAction (#73077)", () => {
|
|
let originalExitCode: NodeJS.Process["exitCode"];
|
|
let originalSuppressHelpBanner: string | undefined;
|
|
beforeEach(() => {
|
|
originalExitCode = process.exitCode;
|
|
originalSuppressHelpBanner = process.env.OPENCLAW_SUPPRESS_HELP_BANNER;
|
|
process.exitCode = undefined;
|
|
});
|
|
afterEach(() => {
|
|
process.exitCode = originalExitCode;
|
|
if (originalSuppressHelpBanner === undefined) {
|
|
delete process.env.OPENCLAW_SUPPRESS_HELP_BANNER;
|
|
} else {
|
|
process.env.OPENCLAW_SUPPRESS_HELP_BANNER = originalSuppressHelpBanner;
|
|
}
|
|
});
|
|
|
|
function buildParent(): Command {
|
|
const program = new Command();
|
|
program.exitOverride();
|
|
const parent = program.command("parent").description("test parent");
|
|
parent.exitOverride();
|
|
parent.command("list").action(() => {});
|
|
parent.command("status").action(() => {});
|
|
return parent;
|
|
}
|
|
|
|
it("invokes parent help and exits 0 when invoked without subcommand", async () => {
|
|
const parent = buildParent();
|
|
const suppressHelpBannerValues: Array<string | undefined> = [];
|
|
const helpSpy = vi.spyOn(parent, "outputHelp").mockImplementation(() => {
|
|
suppressHelpBannerValues.push(process.env.OPENCLAW_SUPPRESS_HELP_BANNER);
|
|
});
|
|
expect(isParentDefaultHelpAction(parent)).toBe(false);
|
|
applyParentDefaultHelpAction(parent);
|
|
expect(isParentDefaultHelpAction(parent)).toBe(true);
|
|
await parent.parent!.parseAsync(["node", "test", "parent"]);
|
|
expect(helpSpy).toHaveBeenCalledTimes(1);
|
|
expect(suppressHelpBannerValues).toEqual(["1"]);
|
|
expect(process.env.OPENCLAW_SUPPRESS_HELP_BANNER).toBeUndefined();
|
|
expect(process.exitCode).toBe(0);
|
|
});
|
|
|
|
it("still routes through subcommand actions when one is invoked", async () => {
|
|
const parent = buildParent();
|
|
const listAction = vi.fn();
|
|
parent.commands.find((c) => c.name() === "list")!.action(listAction);
|
|
const helpSpy = vi.spyOn(parent, "outputHelp").mockImplementation(() => {});
|
|
applyParentDefaultHelpAction(parent);
|
|
await parent.parent!.parseAsync(["node", "test", "parent", "list"]);
|
|
expect(listAction).toHaveBeenCalledTimes(1);
|
|
expect(helpSpy).not.toHaveBeenCalled();
|
|
});
|
|
});
|