import { describe, it, expect, beforeEach, afterEach } from "vitest"; import { listK8sModels } from "./models.js"; describe("listK8sModels", () => { const savedEnv: Record = {}; beforeEach(() => { savedEnv.CLAUDE_CODE_USE_BEDROCK = process.env.CLAUDE_CODE_USE_BEDROCK; savedEnv.ANTHROPIC_BEDROCK_BASE_URL = process.env.ANTHROPIC_BEDROCK_BASE_URL; delete process.env.CLAUDE_CODE_USE_BEDROCK; delete process.env.ANTHROPIC_BEDROCK_BASE_URL; }); afterEach(() => { for (const [key, value] of Object.entries(savedEnv)) { if (value === undefined) delete process.env[key]; else process.env[key] = value; } }); it("returns direct API models by default", async () => { const models = await listK8sModels(); expect(models.some((m) => m.id === "claude-opus-4-7")).toBe(true); expect(models.some((m) => m.id === "claude-opus-4-6")).toBe(true); expect(models.every((m) => !m.id.includes("anthropic."))).toBe(true); }); it("returns Bedrock models when CLAUDE_CODE_USE_BEDROCK=1", async () => { process.env.CLAUDE_CODE_USE_BEDROCK = "1"; const models = await listK8sModels(); expect(models.some((m) => m.id.includes("anthropic."))).toBe(true); expect(models.every((m) => !m.id.startsWith("claude-"))).toBe(true); }); it("returns Bedrock models when CLAUDE_CODE_USE_BEDROCK=true", async () => { process.env.CLAUDE_CODE_USE_BEDROCK = "true"; const models = await listK8sModels(); expect(models.some((m) => m.id.includes("anthropic."))).toBe(true); }); it("returns Bedrock models when ANTHROPIC_BEDROCK_BASE_URL is set", async () => { process.env.ANTHROPIC_BEDROCK_BASE_URL = "https://bedrock.us-east-1.amazonaws.com"; const models = await listK8sModels(); expect(models.some((m) => m.id.includes("anthropic."))).toBe(true); }); it("ignores blank ANTHROPIC_BEDROCK_BASE_URL", async () => { process.env.ANTHROPIC_BEDROCK_BASE_URL = " "; const models = await listK8sModels(); expect(models.some((m) => m.id === "claude-opus-4-7")).toBe(true); }); });