refactor: move extension-owned tests to extensions

This commit is contained in:
Peter Steinberger
2026-03-27 21:36:46 +00:00
parent d506eea076
commit 992b30604d
209 changed files with 4828 additions and 3173 deletions

View File

@@ -2,15 +2,14 @@ import { mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
import {
MOONSHOT_BASE_URL as MOONSHOT_AI_BASE_URL,
MOONSHOT_CN_BASE_URL,
} from "../../extensions/moonshot/api.js";
import { captureEnv } from "../test-utils/env.js";
import { resolveImplicitProvidersForTest } from "./models-config.e2e-harness.js";
import { applyNativeStreamingUsageCompat } from "./models-config.providers.js";
import { buildMoonshotProvider } from "./models-config.providers.static.js";
const MOONSHOT_AI_BASE_URL = "https://api.moonshot.ai/v1";
const MOONSHOT_CN_BASE_URL = "https://api.moonshot.cn/v1";
describe("moonshot implicit provider (#33637)", () => {
it("uses explicit CN baseUrl when provided", async () => {
const agentDir = mkdtempSync(join(tmpdir(), "openclaw-test-"));

View File

@@ -1,6 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type { ModelDefinitionConfig } from "../config/types.models.js";
import { resolveOpenClawAgentDir } from "./agent-paths.js";
import {
CUSTOM_PROXY_MODELS_CONFIG,
@@ -12,6 +13,63 @@ import {
} from "./models-config.e2e-harness.js";
import type { ProviderConfig as ModelsProviderConfig } from "./models-config.providers.js";
function createModel(id: string): ModelDefinitionConfig {
return {
id,
name: id,
reasoning: false,
input: ["text"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 128_000,
maxTokens: 8_192,
};
}
function buildDeepSeekProvider(): ModelsProviderConfig {
return {
baseUrl: "https://api.deepseek.com/v1",
api: "openai-completions",
models: [createModel("deepseek-chat")],
};
}
function buildMinimaxProvider(): ModelsProviderConfig {
return {
baseUrl: "https://api.minimax.io/anthropic",
api: "anthropic-messages",
models: [createModel("MiniMax-M2.7")],
};
}
function buildMistralProvider(): ModelsProviderConfig {
return {
baseUrl: "https://api.mistral.ai/v1",
api: "openai-completions",
models: [createModel("mistral-medium-latest")],
};
}
function buildSyntheticProvider(): ModelsProviderConfig {
return {
baseUrl: "https://api.synthetic.new/anthropic",
api: "anthropic-messages",
models: [createModel("hf:MiniMaxAI/MiniMax-M2.5")],
};
}
function buildXaiProvider(): ModelsProviderConfig {
return {
baseUrl: "https://api.x.ai/v1",
api: "openai-completions",
models: [createModel("grok-4-fast")],
};
}
vi.mock("./auth-profiles/external-cli-sync.js", () => ({
syncExternalCliCredentials: () => false,
}));
@@ -20,19 +78,6 @@ vi.mock("./models-config.providers.js", async () => {
const actual = await vi.importActual<typeof import("./models-config.providers.js")>(
"./models-config.providers.js",
);
const [
{ buildDeepSeekProvider },
{ buildMinimaxProvider },
{ buildMistralProvider },
{ buildSyntheticProvider },
{ buildXaiProvider },
] = await Promise.all([
import("../../extensions/deepseek/provider-catalog.js"),
import("../../extensions/minimax/provider-catalog.js"),
import("../../extensions/mistral/provider-catalog.js"),
import("../../extensions/synthetic/provider-catalog.js"),
import("../../extensions/xai/provider-catalog.js"),
]);
return {
...actual,
resolveImplicitProviders: async ({ env }: { env?: NodeJS.ProcessEnv }) => {

View File

@@ -1,5 +1,5 @@
import type { Skill } from "@mariozechner/pi-coding-agent";
export function resolveSkillSource(skill: Skill): string {
return skill.sourceInfo.source;
return (skill as Skill & { sourceInfo?: { source?: string } }).sourceInfo?.source ?? "unknown";
}

View File

@@ -15,7 +15,7 @@ import {
import * as hookRunnerGlobal from "../plugins/hook-runner-global.js";
import type { HookRunner } from "../plugins/hooks.js";
import { setActivePluginRegistry } from "../plugins/runtime.js";
import { createTestRegistry } from "../test-utils/channel-plugins.js";
import { createChannelTestPluginBase, createTestRegistry } from "../test-utils/channel-plugins.js";
import * as piEmbedded from "./pi-embedded.js";
import * as agentStep from "./tools/agent-step.js";
@@ -190,7 +190,6 @@ vi.mock("./subagent-registry-runtime.js", () => subagentRegistryMock);
describe("subagent announce formatting", () => {
let previousFastTestEnv: string | undefined;
let runSubagentAnnounceFlow: (typeof import("./subagent-announce.js"))["runSubagentAnnounceFlow"];
let matrixPlugin: (typeof import("../../extensions/matrix/index.js"))["matrixPlugin"];
beforeAll(async () => {
// Set FAST_TEST_MODE before importing the module to ensure the module-level
@@ -199,7 +198,6 @@ describe("subagent announce formatting", () => {
// See: https://github.com/openclaw/openclaw/issues/31298
previousFastTestEnv = process.env.OPENCLAW_TEST_FAST;
process.env.OPENCLAW_TEST_FAST = "1";
({ matrixPlugin } = await import("../../extensions/matrix/index.js"));
({ runSubagentAnnounceFlow } = await import("./subagent-announce.js"));
});
@@ -316,7 +314,13 @@ describe("subagent announce formatting", () => {
sessionStore = {};
sessionBindingServiceTesting.resetSessionBindingAdaptersForTests();
setActivePluginRegistry(
createTestRegistry([{ pluginId: "matrix", plugin: matrixPlugin, source: "test" }]),
createTestRegistry([
{
pluginId: "matrix",
plugin: createChannelTestPluginBase({ id: "matrix", label: "Matrix" }),
source: "test",
},
]),
);
setConfigOverride({
session: {