Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 20d058dcf524765f53681b601f605b0d4b3129f3 Co-authored-by: adhitShet <131381638+adhitShet@users.noreply.github.com> Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com> Reviewed-by: @gumadeiras
128 lines
4.2 KiB
TypeScript
128 lines
4.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
rewriteUpdateFlagArgv,
|
|
shouldEnsureCliPath,
|
|
shouldRegisterPrimarySubcommand,
|
|
shouldSkipPluginCommandRegistration,
|
|
} from "./run-main.js";
|
|
|
|
describe("rewriteUpdateFlagArgv", () => {
|
|
it("leaves argv unchanged when --update is absent", () => {
|
|
const argv = ["node", "entry.js", "status"];
|
|
expect(rewriteUpdateFlagArgv(argv)).toBe(argv);
|
|
});
|
|
|
|
it("rewrites --update into the update command", () => {
|
|
expect(rewriteUpdateFlagArgv(["node", "entry.js", "--update"])).toEqual([
|
|
"node",
|
|
"entry.js",
|
|
"update",
|
|
]);
|
|
});
|
|
|
|
it("preserves global flags that appear before --update", () => {
|
|
expect(rewriteUpdateFlagArgv(["node", "entry.js", "--profile", "p", "--update"])).toEqual([
|
|
"node",
|
|
"entry.js",
|
|
"--profile",
|
|
"p",
|
|
"update",
|
|
]);
|
|
});
|
|
|
|
it("keeps update options after the rewritten command", () => {
|
|
expect(rewriteUpdateFlagArgv(["node", "entry.js", "--update", "--json"])).toEqual([
|
|
"node",
|
|
"entry.js",
|
|
"update",
|
|
"--json",
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe("shouldRegisterPrimarySubcommand", () => {
|
|
it("skips eager primary registration for help/version invocations", () => {
|
|
expect(shouldRegisterPrimarySubcommand(["node", "openclaw", "status", "--help"])).toBe(false);
|
|
expect(shouldRegisterPrimarySubcommand(["node", "openclaw", "-V"])).toBe(false);
|
|
expect(shouldRegisterPrimarySubcommand(["node", "openclaw", "-v"])).toBe(false);
|
|
});
|
|
|
|
it("keeps eager primary registration for regular command runs", () => {
|
|
expect(shouldRegisterPrimarySubcommand(["node", "openclaw", "status"])).toBe(true);
|
|
expect(shouldRegisterPrimarySubcommand(["node", "openclaw", "acp", "-v"])).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe("shouldSkipPluginCommandRegistration", () => {
|
|
it("skips plugin registration for root help/version", () => {
|
|
expect(
|
|
shouldSkipPluginCommandRegistration({
|
|
argv: ["node", "openclaw", "--help"],
|
|
primary: null,
|
|
hasBuiltinPrimary: false,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("skips plugin registration for builtin subcommand help", () => {
|
|
expect(
|
|
shouldSkipPluginCommandRegistration({
|
|
argv: ["node", "openclaw", "config", "--help"],
|
|
primary: "config",
|
|
hasBuiltinPrimary: true,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("skips plugin registration for builtin command runs", () => {
|
|
expect(
|
|
shouldSkipPluginCommandRegistration({
|
|
argv: ["node", "openclaw", "sessions", "--json"],
|
|
primary: "sessions",
|
|
hasBuiltinPrimary: true,
|
|
}),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("keeps plugin registration for non-builtin help", () => {
|
|
expect(
|
|
shouldSkipPluginCommandRegistration({
|
|
argv: ["node", "openclaw", "voicecall", "--help"],
|
|
primary: "voicecall",
|
|
hasBuiltinPrimary: false,
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("keeps plugin registration for non-builtin command runs", () => {
|
|
expect(
|
|
shouldSkipPluginCommandRegistration({
|
|
argv: ["node", "openclaw", "voicecall", "status"],
|
|
primary: "voicecall",
|
|
hasBuiltinPrimary: false,
|
|
}),
|
|
).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("shouldEnsureCliPath", () => {
|
|
it("skips path bootstrap for help/version invocations", () => {
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "--help"])).toBe(false);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "-V"])).toBe(false);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "-v"])).toBe(false);
|
|
});
|
|
|
|
it("skips path bootstrap for read-only fast paths", () => {
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "status"])).toBe(false);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "sessions", "--json"])).toBe(false);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "config", "get", "update"])).toBe(false);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "models", "status", "--json"])).toBe(false);
|
|
});
|
|
|
|
it("keeps path bootstrap for mutating or unknown commands", () => {
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "message", "send"])).toBe(true);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "voicecall", "status"])).toBe(true);
|
|
expect(shouldEnsureCliPath(["node", "openclaw", "acp", "-v"])).toBe(true);
|
|
});
|
|
});
|