refactor: share cli startup and routing helpers

This commit is contained in:
Peter Steinberger
2026-04-06 13:51:27 +01:00
parent 6ed33d29c8
commit a21709d041
15 changed files with 1189 additions and 336 deletions

View 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();
});
});