143 lines
3.6 KiB
TypeScript
143 lines
3.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { resolveAuthProfileOrder } from "./auth-profiles.js";
|
|
|
|
describe("resolveAuthProfileOrder", () => {
|
|
const _store: AuthProfileStore = {
|
|
version: 1,
|
|
profiles: {
|
|
"anthropic:default": {
|
|
type: "api_key",
|
|
provider: "anthropic",
|
|
key: "sk-default",
|
|
},
|
|
"anthropic:work": {
|
|
type: "api_key",
|
|
provider: "anthropic",
|
|
key: "sk-work",
|
|
},
|
|
},
|
|
};
|
|
const _cfg = {
|
|
auth: {
|
|
profiles: {
|
|
"anthropic:default": { provider: "anthropic", mode: "api_key" },
|
|
"anthropic:work": { provider: "anthropic", mode: "api_key" },
|
|
},
|
|
},
|
|
};
|
|
|
|
it("normalizes z.ai aliases in auth.order", () => {
|
|
const order = resolveAuthProfileOrder({
|
|
cfg: {
|
|
auth: {
|
|
order: { "z.ai": ["zai:work", "zai:default"] },
|
|
profiles: {
|
|
"zai:default": { provider: "zai", mode: "api_key" },
|
|
"zai:work": { provider: "zai", mode: "api_key" },
|
|
},
|
|
},
|
|
},
|
|
store: {
|
|
version: 1,
|
|
profiles: {
|
|
"zai:default": {
|
|
type: "api_key",
|
|
provider: "zai",
|
|
key: "sk-default",
|
|
},
|
|
"zai:work": {
|
|
type: "api_key",
|
|
provider: "zai",
|
|
key: "sk-work",
|
|
},
|
|
},
|
|
},
|
|
provider: "zai",
|
|
});
|
|
expect(order).toEqual(["zai:work", "zai:default"]);
|
|
});
|
|
it("normalizes provider casing in auth.order keys", () => {
|
|
const order = resolveAuthProfileOrder({
|
|
cfg: {
|
|
auth: {
|
|
order: { OpenAI: ["openai:work", "openai:default"] },
|
|
profiles: {
|
|
"openai:default": { provider: "openai", mode: "api_key" },
|
|
"openai:work": { provider: "openai", mode: "api_key" },
|
|
},
|
|
},
|
|
},
|
|
store: {
|
|
version: 1,
|
|
profiles: {
|
|
"openai:default": {
|
|
type: "api_key",
|
|
provider: "openai",
|
|
key: "sk-default",
|
|
},
|
|
"openai:work": {
|
|
type: "api_key",
|
|
provider: "openai",
|
|
key: "sk-work",
|
|
},
|
|
},
|
|
},
|
|
provider: "openai",
|
|
});
|
|
expect(order).toEqual(["openai:work", "openai:default"]);
|
|
});
|
|
it("normalizes z.ai aliases in auth.profiles", () => {
|
|
const order = resolveAuthProfileOrder({
|
|
cfg: {
|
|
auth: {
|
|
profiles: {
|
|
"zai:default": { provider: "z.ai", mode: "api_key" },
|
|
"zai:work": { provider: "Z.AI", mode: "api_key" },
|
|
},
|
|
},
|
|
},
|
|
store: {
|
|
version: 1,
|
|
profiles: {
|
|
"zai:default": {
|
|
type: "api_key",
|
|
provider: "zai",
|
|
key: "sk-default",
|
|
},
|
|
"zai:work": {
|
|
type: "api_key",
|
|
provider: "zai",
|
|
key: "sk-work",
|
|
},
|
|
},
|
|
},
|
|
provider: "zai",
|
|
});
|
|
expect(order).toEqual(["zai:default", "zai:work"]);
|
|
});
|
|
it("prioritizes oauth profiles when order missing", () => {
|
|
const mixedStore: AuthProfileStore = {
|
|
version: 1,
|
|
profiles: {
|
|
"anthropic:default": {
|
|
type: "api_key",
|
|
provider: "anthropic",
|
|
key: "sk-default",
|
|
},
|
|
"anthropic:oauth": {
|
|
type: "oauth",
|
|
provider: "anthropic",
|
|
access: "access-token",
|
|
refresh: "refresh-token",
|
|
expires: Date.now() + 60_000,
|
|
},
|
|
},
|
|
};
|
|
const order = resolveAuthProfileOrder({
|
|
store: mixedStore,
|
|
provider: "anthropic",
|
|
});
|
|
expect(order).toEqual(["anthropic:oauth", "anthropic:default"]);
|
|
});
|
|
});
|