From c22d50808564c3d3526999b99799b08ff8a24b12 Mon Sep 17 00:00:00 2001 From: Josh Lehman Date: Tue, 17 Mar 2026 14:40:07 -0700 Subject: [PATCH] test: move chutes smoke to onboarding seams Regeneration-Prompt: | Chutes CI was still failing before test discovery with a Node module-loader error tied to importing the extension entry module. Replace that test with extension-local onboarding coverage that still exercises real Chutes code but avoids the plugin entrypoint entirely. Keep the lane meaningful by checking provider catalog setup, alias registration, and default model wiring in onboard.ts. --- extensions/chutes/index.test.ts | 38 --------------------- extensions/chutes/onboard.test.ts | 56 +++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 38 deletions(-) delete mode 100644 extensions/chutes/index.test.ts create mode 100644 extensions/chutes/onboard.test.ts diff --git a/extensions/chutes/index.test.ts b/extensions/chutes/index.test.ts deleted file mode 100644 index 70c73619b2d..00000000000 --- a/extensions/chutes/index.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; -import { registerSingleProviderPlugin } from "../../test/helpers/extensions/plugin-registration.js"; - -vi.mock("openclaw/plugin-sdk/provider-auth", () => ({ - buildOauthProviderAuthResult: vi.fn(), - createProviderApiKeyAuthMethod: vi.fn((params: { methodId: string; label: string }) => ({ - id: params.methodId, - label: params.label, - kind: "api-key", - })), - loginChutes: vi.fn(), - resolveOAuthApiKeyMarker: vi.fn((providerId: string) => `oauth:${providerId}`), -})); - -vi.mock("./onboard.js", () => ({ - CHUTES_DEFAULT_MODEL_REF: "chutes/test-model", - applyChutesApiKeyConfig: vi.fn((cfg: unknown) => cfg), - applyChutesProviderConfig: vi.fn((cfg: unknown) => cfg), -})); - -vi.mock("./provider-catalog.js", () => ({ - buildChutesProvider: vi.fn(async () => ({ - api: "openai-completions", - baseUrl: "https://chutes.test", - models: [], - })), -})); - -describe("chutes provider plugin", () => { - it("registers OAuth and API key auth flows under one provider", async () => { - const { default: chutesPlugin } = await import("./index.js"); - const provider = registerSingleProviderPlugin(chutesPlugin); - - expect(provider.id).toBe("chutes"); - expect(provider.auth.map((method) => method.id)).toEqual(["oauth", "api-key"]); - expect(provider.catalog?.run).toEqual(expect.any(Function)); - }); -}); diff --git a/extensions/chutes/onboard.test.ts b/extensions/chutes/onboard.test.ts new file mode 100644 index 00000000000..eaba15ea8f2 --- /dev/null +++ b/extensions/chutes/onboard.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, it } from "vitest"; +import { + applyChutesApiKeyConfig, + applyChutesConfig, + applyChutesProviderConfig, + CHUTES_DEFAULT_MODEL_REF, +} from "./onboard.js"; + +describe("chutes onboarding config", () => { + it("registers the Chutes provider catalog and aliases", () => { + const cfg = applyChutesProviderConfig({}); + + expect(cfg.models?.providers?.chutes?.api).toBe("openai-completions"); + expect(cfg.models?.providers?.chutes?.baseUrl).toBe("https://llm.chutes.ai/v1"); + expect(cfg.models?.providers?.chutes?.models?.length).toBeGreaterThan(0); + expect(cfg.agents?.defaults?.models?.["chutes-fast"]).toEqual({ + alias: "chutes/zai-org/GLM-4.7-FP8", + }); + expect(cfg.agents?.defaults?.models?.["chutes-vision"]).toEqual({ + alias: "chutes/chutesai/Mistral-Small-3.2-24B-Instruct-2506", + }); + expect(cfg.agents?.defaults?.models?.["chutes-pro"]).toEqual({ + alias: "chutes/deepseek-ai/DeepSeek-V3.2-TEE", + }); + }); + + it("sets the default primary model for API key onboarding", () => { + const cfg = applyChutesApiKeyConfig({ + agents: { + defaults: { + model: { + fallbacks: ["existing-fallback"], + }, + }, + }, + }); + + expect(cfg.agents?.defaults?.model).toEqual({ + primary: CHUTES_DEFAULT_MODEL_REF, + fallbacks: ["existing-fallback"], + }); + }); + + it("sets default text and image models for full onboarding", () => { + const cfg = applyChutesConfig({}); + + expect(cfg.agents?.defaults?.model).toEqual({ + primary: CHUTES_DEFAULT_MODEL_REF, + fallbacks: ["chutes/deepseek-ai/DeepSeek-V3.2-TEE", "chutes/Qwen/Qwen3-32B"], + }); + expect(cfg.agents?.defaults?.imageModel).toEqual({ + primary: "chutes/chutesai/Mistral-Small-3.2-24B-Instruct-2506", + fallbacks: ["chutes/chutesai/Mistral-Small-3.1-24B-Instruct-2503"], + }); + }); +});