import { describe, expect, it, vi } from "vitest"; import { setupOnboardingShellCompletion } from "./onboarding.completion.js"; describe("setupOnboardingShellCompletion", () => { it("QuickStart: installs without prompting", async () => { const prompter = { confirm: vi.fn(async () => false), note: vi.fn(async () => {}), }; const deps = { resolveCliName: () => "openclaw", checkShellCompletionStatus: vi.fn(async () => ({ shell: "zsh", profileInstalled: false, cacheExists: false, cachePath: "/tmp/openclaw.zsh", usesSlowPattern: false, })), ensureCompletionCacheExists: vi.fn(async () => true), installCompletion: vi.fn(async () => {}), }; await setupOnboardingShellCompletion({ flow: "quickstart", prompter, deps }); expect(prompter.confirm).not.toHaveBeenCalled(); expect(deps.ensureCompletionCacheExists).toHaveBeenCalledWith("openclaw"); expect(deps.installCompletion).toHaveBeenCalledWith("zsh", true, "openclaw"); expect(prompter.note).toHaveBeenCalled(); }); it("Advanced: prompts; skip means no install", async () => { const prompter = { confirm: vi.fn(async () => false), note: vi.fn(async () => {}), }; const deps = { resolveCliName: () => "openclaw", checkShellCompletionStatus: vi.fn(async () => ({ shell: "zsh", profileInstalled: false, cacheExists: false, cachePath: "/tmp/openclaw.zsh", usesSlowPattern: false, })), ensureCompletionCacheExists: vi.fn(async () => true), installCompletion: vi.fn(async () => {}), }; await setupOnboardingShellCompletion({ flow: "advanced", prompter, deps }); expect(prompter.confirm).toHaveBeenCalledTimes(1); expect(deps.ensureCompletionCacheExists).not.toHaveBeenCalled(); expect(deps.installCompletion).not.toHaveBeenCalled(); expect(prompter.note).not.toHaveBeenCalled(); }); });