mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-14 02:31:24 +00:00
refactor: share cli startup and routing helpers
This commit is contained in:
76
src/cli/command-bootstrap.test.ts
Normal file
76
src/cli/command-bootstrap.test.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const ensureConfigReadyMock = vi.hoisted(() => vi.fn(async () => {}));
|
||||
const ensureCliPluginRegistryLoadedMock = vi.hoisted(() => vi.fn(async () => {}));
|
||||
|
||||
vi.mock("./program/config-guard.js", () => ({
|
||||
ensureConfigReady: ensureConfigReadyMock,
|
||||
}));
|
||||
|
||||
vi.mock("./plugin-registry-loader.js", () => ({
|
||||
ensureCliPluginRegistryLoaded: ensureCliPluginRegistryLoadedMock,
|
||||
resolvePluginRegistryScopeForCommandPath: vi.fn((commandPath: string[]) =>
|
||||
commandPath[0] === "status" || commandPath[0] === "health" ? "channels" : "all",
|
||||
),
|
||||
}));
|
||||
|
||||
describe("ensureCliCommandBootstrap", () => {
|
||||
let ensureCliCommandBootstrap: typeof import("./command-bootstrap.js").ensureCliCommandBootstrap;
|
||||
|
||||
beforeEach(async () => {
|
||||
vi.clearAllMocks();
|
||||
vi.resetModules();
|
||||
({ ensureCliCommandBootstrap } = await import("./command-bootstrap.js"));
|
||||
});
|
||||
|
||||
it("runs config guard and plugin loading with shared options", async () => {
|
||||
const runtime = {} as never;
|
||||
|
||||
await ensureCliCommandBootstrap({
|
||||
runtime,
|
||||
commandPath: ["agents", "list"],
|
||||
suppressDoctorStdout: true,
|
||||
allowInvalid: true,
|
||||
loadPlugins: true,
|
||||
});
|
||||
|
||||
expect(ensureConfigReadyMock).toHaveBeenCalledWith({
|
||||
runtime,
|
||||
commandPath: ["agents", "list"],
|
||||
allowInvalid: true,
|
||||
suppressDoctorStdout: true,
|
||||
});
|
||||
expect(ensureCliPluginRegistryLoadedMock).toHaveBeenCalledWith({
|
||||
scope: "all",
|
||||
routeLogsToStderr: true,
|
||||
});
|
||||
});
|
||||
|
||||
it("skips config guard without skipping plugin loading", async () => {
|
||||
await ensureCliCommandBootstrap({
|
||||
runtime: {} as never,
|
||||
commandPath: ["status"],
|
||||
suppressDoctorStdout: true,
|
||||
skipConfigGuard: true,
|
||||
loadPlugins: true,
|
||||
});
|
||||
|
||||
expect(ensureConfigReadyMock).not.toHaveBeenCalled();
|
||||
expect(ensureCliPluginRegistryLoadedMock).toHaveBeenCalledWith({
|
||||
scope: "channels",
|
||||
routeLogsToStderr: true,
|
||||
});
|
||||
});
|
||||
|
||||
it("does nothing extra when plugin loading is disabled", async () => {
|
||||
await ensureCliCommandBootstrap({
|
||||
runtime: {} as never,
|
||||
commandPath: ["config", "validate"],
|
||||
skipConfigGuard: true,
|
||||
loadPlugins: false,
|
||||
});
|
||||
|
||||
expect(ensureConfigReadyMock).not.toHaveBeenCalled();
|
||||
expect(ensureCliPluginRegistryLoadedMock).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user