mirror of https://github.com/openclaw/openclaw.git
171 lines
4.8 KiB
TypeScript
171 lines
4.8 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import type { AuthProfileStore } from "../agents/auth-profiles.js";
|
|
import type { ProviderWizardOption } from "../plugins/provider-wizard.js";
|
|
import {
|
|
buildAuthChoiceGroups,
|
|
buildAuthChoiceOptions,
|
|
formatAuthChoiceChoicesForCli,
|
|
} from "./auth-choice-options.js";
|
|
import { formatStaticAuthChoiceChoicesForCli } from "./auth-choice-options.static.js";
|
|
|
|
const resolveProviderWizardOptions = vi.hoisted(() =>
|
|
vi.fn<() => ProviderWizardOption[]>(() => []),
|
|
);
|
|
vi.mock("../plugins/provider-wizard.js", () => ({
|
|
resolveProviderWizardOptions,
|
|
}));
|
|
|
|
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", () => {
|
|
resolveProviderWizardOptions.mockReturnValue([
|
|
{
|
|
value: "ollama",
|
|
label: "Ollama",
|
|
hint: "Cloud and local open models",
|
|
groupId: "ollama",
|
|
groupLabel: "Ollama",
|
|
},
|
|
{
|
|
value: "vllm",
|
|
label: "vLLM",
|
|
hint: "Local/self-hosted OpenAI-compatible server",
|
|
groupId: "vllm",
|
|
groupLabel: "vLLM",
|
|
},
|
|
{
|
|
value: "sglang",
|
|
label: "SGLang",
|
|
hint: "Fast self-hosted OpenAI-compatible server",
|
|
groupId: "sglang",
|
|
groupLabel: "SGLang",
|
|
},
|
|
]);
|
|
const options = getOptions();
|
|
|
|
for (const value of [
|
|
"github-copilot",
|
|
"token",
|
|
"zai-api-key",
|
|
"xiaomi-api-key",
|
|
"minimax-global-api",
|
|
"minimax-cn-api",
|
|
"minimax-global-oauth",
|
|
"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",
|
|
"opencode-go",
|
|
"ollama",
|
|
"sglang",
|
|
]) {
|
|
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("keeps static cli help choices off the plugin-backed catalog", () => {
|
|
resolveProviderWizardOptions.mockReturnValue([
|
|
{
|
|
value: "ollama",
|
|
label: "Ollama",
|
|
hint: "Cloud and local open models",
|
|
groupId: "ollama",
|
|
groupLabel: "Ollama",
|
|
},
|
|
]);
|
|
|
|
const cliChoices = formatStaticAuthChoiceChoicesForCli({
|
|
includeLegacyAliases: false,
|
|
includeSkip: true,
|
|
}).split("|");
|
|
|
|
expect(cliChoices).not.toContain("ollama");
|
|
expect(cliChoices).toContain("skip");
|
|
});
|
|
|
|
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);
|
|
});
|
|
|
|
it("groups OpenCode Zen and Go under one OpenCode entry", () => {
|
|
const { groups } = buildAuthChoiceGroups({
|
|
store: EMPTY_STORE,
|
|
includeSkip: false,
|
|
});
|
|
const openCodeGroup = groups.find((group) => group.value === "opencode");
|
|
|
|
expect(openCodeGroup).toBeDefined();
|
|
expect(openCodeGroup?.options.some((opt) => opt.value === "opencode-zen")).toBe(true);
|
|
expect(openCodeGroup?.options.some((opt) => opt.value === "opencode-go")).toBe(true);
|
|
});
|
|
|
|
it("shows Ollama in grouped provider selection", () => {
|
|
resolveProviderWizardOptions.mockReturnValue([
|
|
{
|
|
value: "ollama",
|
|
label: "Ollama",
|
|
hint: "Cloud and local open models",
|
|
groupId: "ollama",
|
|
groupLabel: "Ollama",
|
|
},
|
|
]);
|
|
const { groups } = buildAuthChoiceGroups({
|
|
store: EMPTY_STORE,
|
|
includeSkip: false,
|
|
});
|
|
const ollamaGroup = groups.find((group) => group.value === "ollama");
|
|
|
|
expect(ollamaGroup).toBeDefined();
|
|
expect(ollamaGroup?.options.some((opt) => opt.value === "ollama")).toBe(true);
|
|
});
|
|
});
|