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