import { afterEach, describe, expect, it } from "vitest"; import { ensureOpenCodeModelConfiguredAndAvailable, listOpenCodeModels, resetOpenCodeModelsCacheForTests, } from "./models.js"; describe("openCode models", () => { afterEach(() => { delete process.env.PAPERCLIP_OPENCODE_COMMAND; resetOpenCodeModelsCacheForTests(); }); it("returns an empty list when discovery command is unavailable", async () => { process.env.PAPERCLIP_OPENCODE_COMMAND = "__paperclip_missing_opencode_command__"; await expect(listOpenCodeModels()).resolves.toEqual([]); }); it("rejects when model is missing", async () => { await expect( ensureOpenCodeModelConfiguredAndAvailable({ model: "" }), ).rejects.toThrow("OpenCode requires `adapterConfig.model`"); }); it("rejects when discovery cannot run for configured model", async () => { process.env.PAPERCLIP_OPENCODE_COMMAND = "__paperclip_missing_opencode_command__"; await expect( ensureOpenCodeModelConfiguredAndAvailable({ model: "openai/gpt-5", }), ).rejects.toThrow("Failed to start command"); }); });