2026-02-22 14:40:16 -08:00
|
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
|
|
|
|
|
|
const ensureAuthProfileStoreMock = vi.hoisted(() => vi.fn());
|
|
|
|
|
const resolveAuthProfileOrderMock = vi.hoisted(() => vi.fn());
|
|
|
|
|
const resolveAuthProfileDisplayLabelMock = vi.hoisted(() => vi.fn());
|
|
|
|
|
|
|
|
|
|
vi.mock("./auth-profiles.js", () => ({
|
|
|
|
|
ensureAuthProfileStore: (...args: unknown[]) => ensureAuthProfileStoreMock(...args),
|
|
|
|
|
resolveAuthProfileOrder: (...args: unknown[]) => resolveAuthProfileOrderMock(...args),
|
|
|
|
|
resolveAuthProfileDisplayLabel: (...args: unknown[]) =>
|
|
|
|
|
resolveAuthProfileDisplayLabelMock(...args),
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
vi.mock("./model-auth.js", () => ({
|
|
|
|
|
getCustomProviderApiKey: () => undefined,
|
|
|
|
|
resolveEnvApiKey: () => null,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
const { resolveModelAuthLabel } = await import("./model-auth-label.js");
|
|
|
|
|
|
|
|
|
|
describe("resolveModelAuthLabel", () => {
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
ensureAuthProfileStoreMock.mockReset();
|
|
|
|
|
resolveAuthProfileOrderMock.mockReset();
|
|
|
|
|
resolveAuthProfileDisplayLabelMock.mockReset();
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-04 07:11:49 +08:00
|
|
|
it("does not include token value in label for token profiles", () => {
|
2026-02-22 14:40:16 -08:00
|
|
|
ensureAuthProfileStoreMock.mockReturnValue({
|
|
|
|
|
version: 1,
|
|
|
|
|
profiles: {
|
|
|
|
|
"github-copilot:default": {
|
|
|
|
|
type: "token",
|
|
|
|
|
provider: "github-copilot",
|
2026-03-04 07:11:49 +08:00
|
|
|
token: "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
2026-02-25 17:39:31 -06:00
|
|
|
tokenRef: { source: "env", provider: "default", id: "GITHUB_TOKEN" },
|
2026-02-22 14:40:16 -08:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
} as never);
|
|
|
|
|
resolveAuthProfileOrderMock.mockReturnValue(["github-copilot:default"]);
|
|
|
|
|
resolveAuthProfileDisplayLabelMock.mockReturnValue("github-copilot:default");
|
|
|
|
|
|
|
|
|
|
const label = resolveModelAuthLabel({
|
|
|
|
|
provider: "github-copilot",
|
|
|
|
|
cfg: {},
|
|
|
|
|
sessionEntry: { authProfileOverride: "github-copilot:default" } as never,
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-04 07:11:49 +08:00
|
|
|
expect(label).toBe("token (github-copilot:default)");
|
|
|
|
|
expect(label).not.toContain("ghp_");
|
|
|
|
|
expect(label).not.toContain("ref(");
|
2026-02-22 14:40:16 -08:00
|
|
|
});
|
2026-02-24 19:34:29 -06:00
|
|
|
|
2026-03-04 07:11:49 +08:00
|
|
|
it("does not include api-key value in label for api-key profiles", () => {
|
2026-02-24 19:34:29 -06:00
|
|
|
const shortSecret = "abc123";
|
|
|
|
|
ensureAuthProfileStoreMock.mockReturnValue({
|
|
|
|
|
version: 1,
|
|
|
|
|
profiles: {
|
|
|
|
|
"openai:default": {
|
|
|
|
|
type: "api_key",
|
|
|
|
|
provider: "openai",
|
|
|
|
|
key: shortSecret,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
} as never);
|
|
|
|
|
resolveAuthProfileOrderMock.mockReturnValue(["openai:default"]);
|
|
|
|
|
resolveAuthProfileDisplayLabelMock.mockReturnValue("openai:default");
|
|
|
|
|
|
|
|
|
|
const label = resolveModelAuthLabel({
|
|
|
|
|
provider: "openai",
|
|
|
|
|
cfg: {},
|
|
|
|
|
sessionEntry: { authProfileOverride: "openai:default" } as never,
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-04 07:11:49 +08:00
|
|
|
expect(label).toBe("api-key (openai:default)");
|
2026-02-24 19:34:29 -06:00
|
|
|
expect(label).not.toContain(shortSecret);
|
2026-03-04 07:11:49 +08:00
|
|
|
expect(label).not.toContain("...");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("shows oauth type with profile label", () => {
|
|
|
|
|
ensureAuthProfileStoreMock.mockReturnValue({
|
|
|
|
|
version: 1,
|
|
|
|
|
profiles: {
|
|
|
|
|
"anthropic:oauth": {
|
|
|
|
|
type: "oauth",
|
|
|
|
|
provider: "anthropic",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
} as never);
|
|
|
|
|
resolveAuthProfileOrderMock.mockReturnValue(["anthropic:oauth"]);
|
|
|
|
|
resolveAuthProfileDisplayLabelMock.mockReturnValue("anthropic:oauth");
|
|
|
|
|
|
|
|
|
|
const label = resolveModelAuthLabel({
|
|
|
|
|
provider: "anthropic",
|
|
|
|
|
cfg: {},
|
|
|
|
|
sessionEntry: { authProfileOverride: "anthropic:oauth" } as never,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
expect(label).toBe("oauth (anthropic:oauth)");
|
2026-02-24 19:34:29 -06:00
|
|
|
});
|
2026-02-22 14:40:16 -08:00
|
|
|
});
|