import { describe, expect, it, vi } from "vitest"; import { createTestPluginApi } from "../../test/helpers/extensions/plugin-api.js"; import plugin from "./index.js"; const promptAndConfigureOllamaMock = vi.hoisted(() => vi.fn(async () => ({ config: { models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", api: "ollama", models: [], }, }, }, }, })), ); const ensureOllamaModelPulledMock = vi.hoisted(() => vi.fn(async () => {})); vi.mock("openclaw/plugin-sdk/ollama-setup", () => ({ promptAndConfigureOllama: promptAndConfigureOllamaMock, ensureOllamaModelPulled: ensureOllamaModelPulledMock, configureOllamaNonInteractive: vi.fn(), buildOllamaProvider: vi.fn(), })); function registerProvider() { const registerProviderMock = vi.fn(); plugin.register( createTestPluginApi({ id: "ollama", name: "Ollama", source: "test", config: {}, runtime: {} as never, registerProvider: registerProviderMock, }), ); expect(registerProviderMock).toHaveBeenCalledTimes(1); return registerProviderMock.mock.calls[0]?.[0]; } describe("ollama plugin", () => { it("does not preselect a default model during provider auth setup", async () => { const provider = registerProvider(); const result = await provider.auth[0].run({ config: {}, prompter: {} as never, }); expect(promptAndConfigureOllamaMock).toHaveBeenCalledWith({ cfg: {}, prompter: {}, }); expect(result.configPatch).toEqual({ models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", api: "ollama", models: [], }, }, }, }); expect(result.defaultModel).toBeUndefined(); }); it("pulls the model the user actually selected", async () => { const provider = registerProvider(); const config = { models: { providers: { ollama: { baseUrl: "http://127.0.0.1:11434", models: [], }, }, }, }; const prompter = {} as never; await provider.onModelSelected?.({ config, model: "ollama/glm-4.7-flash", prompter, }); expect(ensureOllamaModelPulledMock).toHaveBeenCalledWith({ config, model: "ollama/glm-4.7-flash", prompter, }); }); });