mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-28 20:46:57 +02:00
test: add Kimi and Qianfan extension coverage
This commit is contained in:
33
extensions/kimi-coding/onboard.test.ts
Normal file
33
extensions/kimi-coding/onboard.test.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { resolveAgentModelPrimaryValue } from "openclaw/plugin-sdk/provider-onboard";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
applyKimiCodeConfig,
|
||||
applyKimiCodeProviderConfig,
|
||||
KIMI_CODING_MODEL_REF,
|
||||
KIMI_MODEL_REF,
|
||||
} from "./onboard.js";
|
||||
|
||||
describe("kimi coding onboard", () => {
|
||||
it("keeps the historical Kimi model ref alias pointed at the coding default", () => {
|
||||
expect(KIMI_MODEL_REF).toBe("kimi/kimi-code");
|
||||
expect(KIMI_CODING_MODEL_REF).toBe(KIMI_MODEL_REF);
|
||||
});
|
||||
|
||||
it("adds the Kimi coding provider defaults", () => {
|
||||
const cfg = applyKimiCodeProviderConfig({});
|
||||
const provider = cfg.models?.providers?.kimi;
|
||||
|
||||
expect(provider).toMatchObject({
|
||||
api: "anthropic-messages",
|
||||
baseUrl: "https://api.kimi.com/coding/",
|
||||
});
|
||||
expect(provider?.models?.map((model) => model.id)).toEqual(["kimi-code"]);
|
||||
expect(cfg.agents?.defaults?.models?.[KIMI_MODEL_REF]?.alias).toBe("Kimi");
|
||||
});
|
||||
|
||||
it("sets the agent primary model when applying the full Kimi coding preset", () => {
|
||||
const cfg = applyKimiCodeConfig({});
|
||||
|
||||
expect(resolveAgentModelPrimaryValue(cfg.agents?.defaults?.model)).toBe(KIMI_MODEL_REF);
|
||||
});
|
||||
});
|
||||
10
extensions/kimi-coding/replay-policy.test.ts
Normal file
10
extensions/kimi-coding/replay-policy.test.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { KIMI_REPLAY_POLICY } from "./replay-policy.js";
|
||||
|
||||
describe("kimi replay policy", () => {
|
||||
it("disables signature preservation for replay repair", () => {
|
||||
expect(KIMI_REPLAY_POLICY).toEqual({
|
||||
preserveSignatures: false,
|
||||
});
|
||||
});
|
||||
});
|
||||
89
extensions/qianfan/index.test.ts
Normal file
89
extensions/qianfan/index.test.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
import { resolveAgentModelPrimaryValue } from "openclaw/plugin-sdk/provider-onboard";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { resolveProviderPluginChoice } from "../../src/plugins/provider-auth-choice.runtime.js";
|
||||
import { registerSingleProviderPlugin } from "../../test/helpers/plugins/plugin-registration.js";
|
||||
import { runSingleProviderCatalog } from "../test-support/provider-model-test-helpers.js";
|
||||
import qianfanPlugin from "./index.js";
|
||||
import {
|
||||
applyQianfanConfig,
|
||||
applyQianfanProviderConfig,
|
||||
QIANFAN_DEFAULT_MODEL_REF,
|
||||
} from "./onboard.js";
|
||||
|
||||
describe("qianfan provider plugin", () => {
|
||||
it("registers Qianfan with api-key auth wizard metadata", async () => {
|
||||
const provider = await registerSingleProviderPlugin(qianfanPlugin);
|
||||
const resolved = resolveProviderPluginChoice({
|
||||
providers: [provider],
|
||||
choice: "qianfan-api-key",
|
||||
});
|
||||
|
||||
expect(provider.id).toBe("qianfan");
|
||||
expect(provider.label).toBe("Qianfan");
|
||||
expect(provider.docsPath).toBe("/providers/qianfan");
|
||||
expect(provider.envVars).toEqual(["QIANFAN_API_KEY"]);
|
||||
expect(provider.auth).toHaveLength(1);
|
||||
expect(resolved).not.toBeNull();
|
||||
expect(resolved?.provider.id).toBe("qianfan");
|
||||
expect(resolved?.method.id).toBe("api-key");
|
||||
});
|
||||
|
||||
it("builds the static Qianfan model catalog", async () => {
|
||||
const provider = await registerSingleProviderPlugin(qianfanPlugin);
|
||||
const catalogProvider = await runSingleProviderCatalog(provider);
|
||||
|
||||
expect(catalogProvider.api).toBe("openai-completions");
|
||||
expect(catalogProvider.baseUrl).toBe("https://qianfan.baidubce.com/v2");
|
||||
expect(catalogProvider.models?.map((model) => model.id)).toEqual([
|
||||
"deepseek-v3.2",
|
||||
"ernie-5.0-thinking-preview",
|
||||
]);
|
||||
expect(catalogProvider.models?.find((model) => model.id === "deepseek-v3.2")).toMatchObject({
|
||||
name: "DEEPSEEK V3.2",
|
||||
reasoning: true,
|
||||
input: ["text"],
|
||||
contextWindow: 98304,
|
||||
maxTokens: 32768,
|
||||
});
|
||||
expect(
|
||||
catalogProvider.models?.find((model) => model.id === "ernie-5.0-thinking-preview"),
|
||||
).toMatchObject({
|
||||
name: "ERNIE-5.0-Thinking-Preview",
|
||||
reasoning: true,
|
||||
input: ["text", "image"],
|
||||
contextWindow: 119000,
|
||||
maxTokens: 64000,
|
||||
});
|
||||
});
|
||||
|
||||
it("adds Qianfan provider defaults without changing primary model in provider-only mode", () => {
|
||||
const cfg = applyQianfanProviderConfig({
|
||||
agents: {
|
||||
defaults: {
|
||||
model: { primary: "anthropic/claude-opus-4-6" },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(cfg.models?.providers?.qianfan).toMatchObject({
|
||||
api: "openai-completions",
|
||||
baseUrl: "https://qianfan.baidubce.com/v2",
|
||||
});
|
||||
expect(cfg.models?.providers?.qianfan?.models?.map((model) => model.id)).toEqual([
|
||||
"deepseek-v3.2",
|
||||
"ernie-5.0-thinking-preview",
|
||||
]);
|
||||
expect(cfg.agents?.defaults?.models?.[QIANFAN_DEFAULT_MODEL_REF]?.alias).toBe("QIANFAN");
|
||||
expect(resolveAgentModelPrimaryValue(cfg.agents?.defaults?.model)).toBe(
|
||||
"anthropic/claude-opus-4-6",
|
||||
);
|
||||
});
|
||||
|
||||
it("sets Qianfan as the agent primary model in full onboarding mode", () => {
|
||||
const cfg = applyQianfanConfig({});
|
||||
|
||||
expect(resolveAgentModelPrimaryValue(cfg.agents?.defaults?.model)).toBe(
|
||||
QIANFAN_DEFAULT_MODEL_REF,
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user