import { describe, expect, it } from "vitest"; import type { AuthProfileStore } from "../agents/auth-profiles.js"; import { buildAuthChoiceGroups, buildAuthChoiceOptions, formatAuthChoiceChoicesForCli, } from "./auth-choice-options.js"; const EMPTY_STORE: AuthProfileStore = { version: 1, profiles: {} }; function getOptions(includeSkip = false) { return buildAuthChoiceOptions({ store: EMPTY_STORE, includeSkip, }); } describe("buildAuthChoiceOptions", () => { it("includes core and provider-specific auth choices", () => { const options = getOptions(); for (const value of [ "github-copilot", "token", "zai-api-key", "xiaomi-api-key", "minimax-api", "minimax-api-key-cn", "minimax-api-lightning", "moonshot-api-key", "moonshot-api-key-cn", "kimi-code-api-key", "together-api-key", "ai-gateway-api-key", "cloudflare-ai-gateway-api-key", "synthetic-api-key", "chutes", "qwen-portal", "xai-api-key", "mistral-api-key", "volcengine-api-key", "byteplus-api-key", "vllm", ]) { expect(options.some((opt) => opt.value === value)).toBe(true); } }); it("builds cli help choices from the same catalog", () => { const options = getOptions(true); const cliChoices = formatAuthChoiceChoicesForCli({ includeLegacyAliases: false, includeSkip: true, }).split("|"); for (const option of options) { expect(cliChoices).toContain(option.value); } }); it("can include legacy aliases in cli help choices", () => { const cliChoices = formatAuthChoiceChoicesForCli({ includeLegacyAliases: true, includeSkip: true, }).split("|"); expect(cliChoices).toContain("setup-token"); expect(cliChoices).toContain("oauth"); expect(cliChoices).toContain("claude-cli"); expect(cliChoices).toContain("codex-cli"); }); it("shows Chutes in grouped provider selection", () => { const { groups } = buildAuthChoiceGroups({ store: EMPTY_STORE, includeSkip: false, }); const chutesGroup = groups.find((group) => group.value === "chutes"); expect(chutesGroup).toBeDefined(); expect(chutesGroup?.options.some((opt) => opt.value === "chutes")).toBe(true); }); });