import { describe, expect, it, vi } from "vitest"; import type { ClawdbotConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import type { WizardPrompter } from "../wizard/prompts.js"; import { setupProviders } from "./onboard-providers.js"; vi.mock("node:fs/promises", () => ({ default: { access: vi.fn(async () => { throw new Error("ENOENT"); }), }, })); vi.mock("../provider-web.js", () => ({ loginWeb: vi.fn(async () => {}), })); vi.mock("./onboard-helpers.js", () => ({ detectBinary: vi.fn(async () => false), })); describe("setupProviders", () => { it("QuickStart uses single-select (no multiselect) and doesn't prompt for Telegram token when WhatsApp is chosen", async () => { const select = vi.fn(async () => "whatsapp"); const multiselect = vi.fn(async () => { throw new Error("unexpected multiselect"); }); const text = vi.fn(async ({ message }: { message: string }) => { if (message.includes("Enter Telegram bot token")) { throw new Error("unexpected Telegram token prompt"); } if (message.includes("Your personal WhatsApp number")) { return "+15555550123"; } throw new Error(`unexpected text prompt: ${message}`); }); const prompter: WizardPrompter = { intro: vi.fn(async () => {}), outro: vi.fn(async () => {}), note: vi.fn(async () => {}), select, multiselect, text: text as unknown as WizardPrompter["text"], confirm: vi.fn(async () => false), progress: vi.fn(() => ({ update: vi.fn(), stop: vi.fn() })), }; const runtime: RuntimeEnv = { log: vi.fn(), error: vi.fn(), exit: vi.fn((code: number) => { throw new Error(`exit:${code}`); }), }; await setupProviders({} as ClawdbotConfig, runtime, prompter, { skipConfirm: true, quickstartDefaults: true, forceAllowFromProviders: ["whatsapp"], }); expect(select).toHaveBeenCalledWith( expect.objectContaining({ message: "Select provider (QuickStart)" }), ); expect(multiselect).not.toHaveBeenCalled(); }); });