test(cli): add setup registrar coverage for wizard dispatch

This commit is contained in:
Peter Steinberger
2026-02-21 20:12:29 +00:00
parent bd8b3cd15e
commit 3d2f4aea63

View File

@@ -0,0 +1,89 @@
import { Command } from "commander";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const setupCommandMock = vi.fn();
const onboardCommandMock = vi.fn();
const runtime = {
log: vi.fn(),
error: vi.fn(),
exit: vi.fn(),
};
vi.mock("../../commands/setup.js", () => ({
setupCommand: setupCommandMock,
}));
vi.mock("../../commands/onboard.js", () => ({
onboardCommand: onboardCommandMock,
}));
vi.mock("../../runtime.js", () => ({
defaultRuntime: runtime,
}));
let registerSetupCommand: typeof import("./register.setup.js").registerSetupCommand;
beforeAll(async () => {
({ registerSetupCommand } = await import("./register.setup.js"));
});
describe("registerSetupCommand", () => {
async function runCli(args: string[]) {
const program = new Command();
registerSetupCommand(program);
await program.parseAsync(args, { from: "user" });
}
beforeEach(() => {
vi.clearAllMocks();
setupCommandMock.mockResolvedValue(undefined);
onboardCommandMock.mockResolvedValue(undefined);
});
it("runs setup command by default", async () => {
await runCli(["setup", "--workspace", "/tmp/ws"]);
expect(setupCommandMock).toHaveBeenCalledWith(
expect.objectContaining({
workspace: "/tmp/ws",
}),
runtime,
);
expect(onboardCommandMock).not.toHaveBeenCalled();
});
it("runs onboard command when --wizard is set", async () => {
await runCli(["setup", "--wizard", "--mode", "remote", "--remote-url", "wss://example"]);
expect(onboardCommandMock).toHaveBeenCalledWith(
expect.objectContaining({
mode: "remote",
remoteUrl: "wss://example",
}),
runtime,
);
expect(setupCommandMock).not.toHaveBeenCalled();
});
it("runs onboard command when wizard-only flags are passed explicitly", async () => {
await runCli(["setup", "--mode", "remote", "--non-interactive"]);
expect(onboardCommandMock).toHaveBeenCalledWith(
expect.objectContaining({
mode: "remote",
nonInteractive: true,
}),
runtime,
);
expect(setupCommandMock).not.toHaveBeenCalled();
});
it("reports setup errors through runtime", async () => {
setupCommandMock.mockRejectedValueOnce(new Error("setup failed"));
await runCli(["setup"]);
expect(runtime.error).toHaveBeenCalledWith("Error: setup failed");
expect(runtime.exit).toHaveBeenCalledWith(1);
});
});