mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 16:50:43 +00:00
test: split heavy extension test shards
This commit is contained in:
@@ -33,12 +33,12 @@ function findExtensionWithoutTests() {
|
||||
}
|
||||
|
||||
describe("scripts/test-extension.mjs", () => {
|
||||
it("resolves channel-root extensions onto the channel vitest config", () => {
|
||||
it("resolves split channel extensions onto their own vitest configs", () => {
|
||||
const plan = resolveExtensionTestPlan({ targetArg: "slack", cwd: process.cwd() });
|
||||
|
||||
expect(plan.extensionId).toBe("slack");
|
||||
expect(plan.extensionDir).toBe(bundledPluginRoot("slack"));
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-channels.config.ts");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-slack.config.ts");
|
||||
expect(plan.roots).toContain(bundledPluginRoot("slack"));
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
@@ -79,11 +79,11 @@ describe("scripts/test-extension.mjs", () => {
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
|
||||
it("resolves provider extensions onto the provider vitest config", () => {
|
||||
it("resolves OpenAI onto its own provider vitest config", () => {
|
||||
const plan = resolveExtensionTestPlan({ targetArg: "openai", cwd: process.cwd() });
|
||||
|
||||
expect(plan.extensionId).toBe("openai");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-providers.config.ts");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-provider-openai.config.ts");
|
||||
expect(plan.roots).toContain(bundledPluginRoot("openai"));
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
@@ -183,7 +183,7 @@ describe("scripts/test-extension.mjs", () => {
|
||||
|
||||
expect(plan.roots).toContain(bundledPluginRoot("line"));
|
||||
expect(plan.roots).not.toContain("src/line");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-channels.config.ts");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-line.config.ts");
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
|
||||
@@ -294,13 +294,6 @@ describe("scripts/test-extension.mjs", () => {
|
||||
roots: [bundledPluginRoot("bluebubbles")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-channels.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["line", "slack"],
|
||||
roots: [bundledPluginRoot("slack"), bundledPluginRoot("line")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-diffs.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
@@ -322,6 +315,13 @@ describe("scripts/test-extension.mjs", () => {
|
||||
roots: [bundledPluginRoot("irc")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-line.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["line"],
|
||||
roots: [bundledPluginRoot("line")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-matrix.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
@@ -351,12 +351,19 @@ describe("scripts/test-extension.mjs", () => {
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-providers.config.ts",
|
||||
config: "test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["openai"],
|
||||
roots: [bundledPluginRoot("openai")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-slack.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["slack"],
|
||||
roots: [bundledPluginRoot("slack")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-telegram.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
applyParallelVitestCachePaths,
|
||||
buildFullSuiteVitestRunPlans,
|
||||
buildVitestRunPlans,
|
||||
listFullExtensionVitestProjectConfigs,
|
||||
shouldAcquireLocalHeavyCheckLock,
|
||||
resolveChangedTargetArgs,
|
||||
resolveParallelFullSuiteConcurrency,
|
||||
@@ -28,12 +29,89 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("ignores changed files that cannot map to test lanes", () => {
|
||||
it("keeps the broad changed run for shared test helpers", () => {
|
||||
expect(
|
||||
resolveChangedTargetArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"test/helpers/channels/plugin.ts",
|
||||
]),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("keeps the broad changed run for unknown root surfaces", () => {
|
||||
expect(
|
||||
resolveChangedTargetArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"unknown/file.txt",
|
||||
]),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("skips changed docs files that cannot map to test lanes", () => {
|
||||
expect(
|
||||
resolveChangedTargetArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"docs/help/testing.md",
|
||||
]),
|
||||
).toBeNull();
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("skips root agent guidance changes instead of broad-running tests", () => {
|
||||
expect(
|
||||
buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => ["AGENTS.md"]),
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("skips app-only changes because app tests are separate from Vitest lanes", () => {
|
||||
expect(
|
||||
buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"apps/macos/OpenClaw/AppDelegate.swift",
|
||||
]),
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("adds extension tests for public plugin SDK changes", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"src/plugin-sdk/provider-entry.ts",
|
||||
]);
|
||||
|
||||
expect(plans).toEqual([
|
||||
{
|
||||
config: "test/vitest/vitest.unit-fast.config.ts",
|
||||
forwardedArgs: [],
|
||||
includePatterns: ["src/plugin-sdk/provider-entry.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
...listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
]);
|
||||
});
|
||||
|
||||
it("routes LM Studio changes to the provider extension lane", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"extensions/lmstudio/src/runtime.ts",
|
||||
]);
|
||||
|
||||
expect(plans).toEqual([
|
||||
{
|
||||
config: "test/vitest/vitest.extension-providers.config.ts",
|
||||
forwardedArgs: [],
|
||||
includePatterns: ["extensions/lmstudio/src/**/*.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it("routes the top-level extensions target to every extension shard", () => {
|
||||
expect(buildVitestRunPlans(["extensions"], process.cwd())).toEqual(
|
||||
listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
);
|
||||
});
|
||||
|
||||
it("narrows default-lane changed source files to include globs", () => {
|
||||
@@ -115,7 +193,7 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("routes changed plugin-sdk source allowlist files to sibling light tests", () => {
|
||||
it("keeps changed plugin-sdk allowlist files on sibling light tests plus extension tests", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"src/plugin-sdk/provider-entry.ts",
|
||||
]);
|
||||
@@ -127,6 +205,12 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
includePatterns: ["src/plugin-sdk/provider-entry.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
...listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -149,7 +233,7 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("keeps non-allowlisted plugin-sdk source files on the heavy lane", () => {
|
||||
it("keeps non-allowlisted plugin-sdk source files on the heavy lane plus extension tests", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"src/plugin-sdk/facade-runtime.ts",
|
||||
]);
|
||||
@@ -161,6 +245,12 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
includePatterns: ["src/plugin-sdk/**/*.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
...listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -316,16 +406,21 @@ describe("scripts/test-projects full-suite sharding", () => {
|
||||
"test/vitest/vitest.full-auto-reply.config.ts",
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix.config.ts",
|
||||
"test/vitest/vitest.extension-memory.config.ts",
|
||||
"test/vitest/vitest.extension-messaging.config.ts",
|
||||
"test/vitest/vitest.extension-msteams.config.ts",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.extension-telegram.config.ts",
|
||||
"test/vitest/vitest.extension-voice-call.config.ts",
|
||||
"test/vitest/vitest.extension-whatsapp.config.ts",
|
||||
@@ -499,16 +594,21 @@ describe("scripts/test-projects full-suite sharding", () => {
|
||||
"test/vitest/vitest.auto-reply-reply.config.ts",
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix.config.ts",
|
||||
"test/vitest/vitest.extension-memory.config.ts",
|
||||
"test/vitest/vitest.extension-messaging.config.ts",
|
||||
"test/vitest/vitest.extension-msteams.config.ts",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.extension-telegram.config.ts",
|
||||
"test/vitest/vitest.extension-voice-call.config.ts",
|
||||
"test/vitest/vitest.extension-whatsapp.config.ts",
|
||||
|
||||
@@ -22,14 +22,20 @@ import { createExtensionAcpxVitestConfig } from "./vitest/vitest.extension-acpx.
|
||||
import { createExtensionBlueBubblesVitestConfig } from "./vitest/vitest.extension-bluebubbles.config.ts";
|
||||
import { createExtensionChannelsVitestConfig } from "./vitest/vitest.extension-channels.config.ts";
|
||||
import { createExtensionDiffsVitestConfig } from "./vitest/vitest.extension-diffs.config.ts";
|
||||
import { createExtensionDiscordVitestConfig } from "./vitest/vitest.extension-discord.config.ts";
|
||||
import { createExtensionFeishuVitestConfig } from "./vitest/vitest.extension-feishu.config.ts";
|
||||
import { createExtensionImessageVitestConfig } from "./vitest/vitest.extension-imessage.config.ts";
|
||||
import { createExtensionIrcVitestConfig } from "./vitest/vitest.extension-irc.config.ts";
|
||||
import { createExtensionLineVitestConfig } from "./vitest/vitest.extension-line.config.ts";
|
||||
import { createExtensionMatrixVitestConfig } from "./vitest/vitest.extension-matrix.config.ts";
|
||||
import { createExtensionMattermostVitestConfig } from "./vitest/vitest.extension-mattermost.config.ts";
|
||||
import { createExtensionMemoryVitestConfig } from "./vitest/vitest.extension-memory.config.ts";
|
||||
import { createExtensionMessagingVitestConfig } from "./vitest/vitest.extension-messaging.config.ts";
|
||||
import { createExtensionMsTeamsVitestConfig } from "./vitest/vitest.extension-msteams.config.ts";
|
||||
import { createExtensionProviderOpenAiVitestConfig } from "./vitest/vitest.extension-provider-openai.config.ts";
|
||||
import { createExtensionProvidersVitestConfig } from "./vitest/vitest.extension-providers.config.ts";
|
||||
import { createExtensionSignalVitestConfig } from "./vitest/vitest.extension-signal.config.ts";
|
||||
import { createExtensionSlackVitestConfig } from "./vitest/vitest.extension-slack.config.ts";
|
||||
import { createExtensionTelegramVitestConfig } from "./vitest/vitest.extension-telegram.config.ts";
|
||||
import { createExtensionVoiceCallVitestConfig } from "./vitest/vitest.extension-voice-call.config.ts";
|
||||
import { createExtensionWhatsAppVitestConfig } from "./vitest/vitest.extension-whatsapp.config.ts";
|
||||
@@ -183,14 +189,20 @@ describe("scoped vitest configs", () => {
|
||||
const defaultExtensionBlueBubblesConfig = createExtensionBlueBubblesVitestConfig({});
|
||||
const defaultExtensionChannelsConfig = createExtensionChannelsVitestConfig({});
|
||||
const defaultExtensionDiffsConfig = createExtensionDiffsVitestConfig({});
|
||||
const defaultExtensionDiscordConfig = createExtensionDiscordVitestConfig({});
|
||||
const defaultExtensionFeishuConfig = createExtensionFeishuVitestConfig({});
|
||||
const defaultExtensionImessageConfig = createExtensionImessageVitestConfig({});
|
||||
const defaultExtensionIrcConfig = createExtensionIrcVitestConfig({});
|
||||
const defaultExtensionLineConfig = createExtensionLineVitestConfig({});
|
||||
const defaultExtensionMatrixConfig = createExtensionMatrixVitestConfig({});
|
||||
const defaultExtensionMattermostConfig = createExtensionMattermostVitestConfig({});
|
||||
const defaultExtensionMemoryConfig = createExtensionMemoryVitestConfig({});
|
||||
const defaultExtensionMsTeamsConfig = createExtensionMsTeamsVitestConfig({});
|
||||
const defaultExtensionMessagingConfig = createExtensionMessagingVitestConfig({});
|
||||
const defaultExtensionProviderOpenAiConfig = createExtensionProviderOpenAiVitestConfig({});
|
||||
const defaultExtensionProvidersConfig = createExtensionProvidersVitestConfig({});
|
||||
const defaultExtensionSignalConfig = createExtensionSignalVitestConfig({});
|
||||
const defaultExtensionSlackConfig = createExtensionSlackVitestConfig({});
|
||||
const defaultExtensionTelegramConfig = createExtensionTelegramVitestConfig({});
|
||||
const defaultExtensionVoiceCallConfig = createExtensionVoiceCallVitestConfig({});
|
||||
const defaultExtensionWhatsAppConfig = createExtensionWhatsAppVitestConfig({});
|
||||
@@ -230,7 +242,13 @@ describe("scoped vitest configs", () => {
|
||||
defaultAcpConfig,
|
||||
defaultExtensionsConfig,
|
||||
defaultExtensionChannelsConfig,
|
||||
defaultExtensionDiscordConfig,
|
||||
defaultExtensionImessageConfig,
|
||||
defaultExtensionLineConfig,
|
||||
defaultExtensionProviderOpenAiConfig,
|
||||
defaultExtensionProvidersConfig,
|
||||
defaultExtensionSignalConfig,
|
||||
defaultExtensionSlackConfig,
|
||||
defaultInfraConfig,
|
||||
defaultAutoReplyConfig,
|
||||
defaultAutoReplyCoreConfig,
|
||||
@@ -337,17 +355,17 @@ describe("scoped vitest configs", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("normalizes extension channel include patterns relative to the scoped dir", () => {
|
||||
expect(defaultExtensionChannelsConfig.test?.dir).toBe(path.join(process.cwd(), "extensions"));
|
||||
expect(defaultExtensionChannelsConfig.test?.include).toEqual(
|
||||
expect.arrayContaining([
|
||||
"discord/**/*.test.ts",
|
||||
"line/**/*.test.ts",
|
||||
"slack/**/*.test.ts",
|
||||
"signal/**/*.test.ts",
|
||||
"imessage/**/*.test.ts",
|
||||
]),
|
||||
);
|
||||
it("normalizes split extension channel include patterns relative to the scoped dir", () => {
|
||||
for (const [config, include] of [
|
||||
[defaultExtensionDiscordConfig, "discord/**/*.test.ts"],
|
||||
[defaultExtensionLineConfig, "line/**/*.test.ts"],
|
||||
[defaultExtensionSlackConfig, "slack/**/*.test.ts"],
|
||||
[defaultExtensionSignalConfig, "signal/**/*.test.ts"],
|
||||
[defaultExtensionImessageConfig, "imessage/**/*.test.ts"],
|
||||
] as const) {
|
||||
expect(config.test?.dir).toBe(path.join(process.cwd(), "extensions"));
|
||||
expect(config.test?.include).toEqual([include]);
|
||||
}
|
||||
});
|
||||
|
||||
it("normalizes bluebubbles extension include patterns relative to the scoped dir", () => {
|
||||
@@ -385,8 +403,13 @@ describe("scoped vitest configs", () => {
|
||||
it("normalizes extension provider include patterns relative to the scoped dir", () => {
|
||||
expect(defaultExtensionProvidersConfig.test?.dir).toBe(path.join(process.cwd(), "extensions"));
|
||||
expect(defaultExtensionProvidersConfig.test?.include).toEqual(
|
||||
expect.arrayContaining(["openai/**/*.test.ts", "xai/**/*.test.ts", "google/**/*.test.ts"]),
|
||||
expect.arrayContaining(["xai/**/*.test.ts", "google/**/*.test.ts"]),
|
||||
);
|
||||
expect(defaultExtensionProvidersConfig.test?.include).not.toContain("openai/**/*.test.ts");
|
||||
expect(defaultExtensionProviderOpenAiConfig.test?.dir).toBe(
|
||||
path.join(process.cwd(), "extensions"),
|
||||
);
|
||||
expect(defaultExtensionProviderOpenAiConfig.test?.include).toEqual(["openai/**/*.test.ts"]);
|
||||
});
|
||||
|
||||
it("normalizes extension messaging include patterns relative to the scoped dir", () => {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import path from "node:path";
|
||||
import {
|
||||
BUNDLED_PLUGIN_PATH_PREFIX,
|
||||
bundledPluginRoot,
|
||||
} from "../../scripts/lib/bundled-plugin-paths.mjs";
|
||||
import { BUNDLED_PLUGIN_PATH_PREFIX } from "../../scripts/lib/bundled-plugin-paths.mjs";
|
||||
import { splitChannelExtensionTestRoots } from "./vitest.extension-channel-split-paths.mjs";
|
||||
|
||||
const normalizeRepoPath = (value) => value.split(path.sep).join("/");
|
||||
|
||||
@@ -10,17 +8,13 @@ export const extensionRoutedChannelTestFiles = [];
|
||||
|
||||
const extensionRoutedChannelTestFileSet = new Set(extensionRoutedChannelTestFiles);
|
||||
|
||||
export const channelTestRoots = [
|
||||
"src/channels",
|
||||
bundledPluginRoot("discord"),
|
||||
bundledPluginRoot("slack"),
|
||||
bundledPluginRoot("signal"),
|
||||
bundledPluginRoot("imessage"),
|
||||
bundledPluginRoot("line"),
|
||||
];
|
||||
export const channelTestRoots = ["src/channels", ...splitChannelExtensionTestRoots];
|
||||
|
||||
export const extensionChannelTestRoots = channelTestRoots.filter((root) =>
|
||||
root.startsWith(BUNDLED_PLUGIN_PATH_PREFIX),
|
||||
const splitChannelExtensionTestRootSet = new Set(splitChannelExtensionTestRoots);
|
||||
|
||||
export const extensionChannelTestRoots = channelTestRoots.filter(
|
||||
(root) =>
|
||||
root.startsWith(BUNDLED_PLUGIN_PATH_PREFIX) && !splitChannelExtensionTestRootSet.has(root),
|
||||
);
|
||||
export const coreChannelTestRoots = channelTestRoots.filter(
|
||||
(root) => !root.startsWith(BUNDLED_PLUGIN_PATH_PREFIX),
|
||||
|
||||
@@ -48,16 +48,21 @@ export const rootVitestProjects = [
|
||||
"test/vitest/vitest.channels.config.ts",
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix.config.ts",
|
||||
"test/vitest/vitest.extension-memory.config.ts",
|
||||
"test/vitest/vitest.extension-msteams.config.ts",
|
||||
"test/vitest/vitest.extension-messaging.config.ts",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.extension-telegram.config.ts",
|
||||
"test/vitest/vitest.extension-voice-call.config.ts",
|
||||
"test/vitest/vitest.extension-whatsapp.config.ts",
|
||||
|
||||
14
test/vitest/vitest.extension-channel-single-config.ts
Normal file
14
test/vitest/vitest.extension-channel-single-config.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { createScopedVitestConfig } from "./vitest.scoped-config.ts";
|
||||
|
||||
export function createSingleChannelExtensionVitestConfig(
|
||||
extensionId: string,
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createScopedVitestConfig([`${extensionId}/**/*.test.ts`], {
|
||||
dir: "extensions",
|
||||
env,
|
||||
name: `extension-${extensionId}`,
|
||||
passWithNoTests: true,
|
||||
setupFiles: ["test/setup.extensions.ts"],
|
||||
});
|
||||
}
|
||||
44
test/vitest/vitest.extension-channel-split-paths.mjs
Normal file
44
test/vitest/vitest.extension-channel-split-paths.mjs
Normal file
@@ -0,0 +1,44 @@
|
||||
import { bundledPluginRoot } from "../../scripts/lib/bundled-plugin-paths.mjs";
|
||||
|
||||
export const splitChannelExtensionShardSpecs = [
|
||||
{
|
||||
id: "discord",
|
||||
kind: "extensionDiscord",
|
||||
config: "test/vitest/vitest.extension-discord.config.ts",
|
||||
},
|
||||
{
|
||||
id: "slack",
|
||||
kind: "extensionSlack",
|
||||
config: "test/vitest/vitest.extension-slack.config.ts",
|
||||
},
|
||||
{
|
||||
id: "signal",
|
||||
kind: "extensionSignal",
|
||||
config: "test/vitest/vitest.extension-signal.config.ts",
|
||||
},
|
||||
{
|
||||
id: "imessage",
|
||||
kind: "extensionImessage",
|
||||
config: "test/vitest/vitest.extension-imessage.config.ts",
|
||||
},
|
||||
{
|
||||
id: "line",
|
||||
kind: "extensionLine",
|
||||
config: "test/vitest/vitest.extension-line.config.ts",
|
||||
},
|
||||
];
|
||||
|
||||
export const splitChannelExtensionTestRoots = splitChannelExtensionShardSpecs.map((spec) =>
|
||||
bundledPluginRoot(spec.id),
|
||||
);
|
||||
|
||||
export function resolveSplitChannelExtensionShard(root) {
|
||||
const normalizedRoot = root.replaceAll("\\", "/");
|
||||
return splitChannelExtensionShardSpecs.find(
|
||||
(spec) => bundledPluginRoot(spec.id) === normalizedRoot,
|
||||
);
|
||||
}
|
||||
|
||||
export function isSplitChannelExtensionRoot(root) {
|
||||
return Boolean(resolveSplitChannelExtensionShard(root));
|
||||
}
|
||||
9
test/vitest/vitest.extension-discord.config.ts
Normal file
9
test/vitest/vitest.extension-discord.config.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { createSingleChannelExtensionVitestConfig } from "./vitest.extension-channel-single-config.ts";
|
||||
|
||||
export function createExtensionDiscordVitestConfig(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createSingleChannelExtensionVitestConfig("discord", env);
|
||||
}
|
||||
|
||||
export default createExtensionDiscordVitestConfig();
|
||||
9
test/vitest/vitest.extension-imessage.config.ts
Normal file
9
test/vitest/vitest.extension-imessage.config.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { createSingleChannelExtensionVitestConfig } from "./vitest.extension-channel-single-config.ts";
|
||||
|
||||
export function createExtensionImessageVitestConfig(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createSingleChannelExtensionVitestConfig("imessage", env);
|
||||
}
|
||||
|
||||
export default createExtensionImessageVitestConfig();
|
||||
9
test/vitest/vitest.extension-line.config.ts
Normal file
9
test/vitest/vitest.extension-line.config.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { createSingleChannelExtensionVitestConfig } from "./vitest.extension-channel-single-config.ts";
|
||||
|
||||
export function createExtensionLineVitestConfig(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createSingleChannelExtensionVitestConfig("line", env);
|
||||
}
|
||||
|
||||
export default createExtensionLineVitestConfig();
|
||||
27
test/vitest/vitest.extension-provider-openai.config.ts
Normal file
27
test/vitest/vitest.extension-provider-openai.config.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { providerOpenAiExtensionTestRoots } from "./vitest.extension-provider-paths.mjs";
|
||||
import { loadPatternListFromEnv } from "./vitest.pattern-file.ts";
|
||||
import { createScopedVitestConfig } from "./vitest.scoped-config.ts";
|
||||
|
||||
export function loadIncludePatternsFromEnv(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
): string[] | null {
|
||||
return loadPatternListFromEnv("OPENCLAW_VITEST_INCLUDE_FILE", env);
|
||||
}
|
||||
|
||||
export function createExtensionProviderOpenAiVitestConfig(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createScopedVitestConfig(
|
||||
loadIncludePatternsFromEnv(env) ??
|
||||
providerOpenAiExtensionTestRoots.map((root) => `${root}/**/*.test.ts`),
|
||||
{
|
||||
dir: "extensions",
|
||||
env,
|
||||
name: "extension-provider-openai",
|
||||
passWithNoTests: true,
|
||||
setupFiles: ["test/setup.extensions.ts"],
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
export default createExtensionProviderOpenAiVitestConfig();
|
||||
@@ -14,6 +14,7 @@ export const providerExtensionIds = [
|
||||
"groq",
|
||||
"huggingface",
|
||||
"kimi-coding",
|
||||
"lmstudio",
|
||||
"microsoft",
|
||||
"microsoft-foundry",
|
||||
"minimax",
|
||||
@@ -22,7 +23,6 @@ export const providerExtensionIds = [
|
||||
"moonshot",
|
||||
"nvidia",
|
||||
"ollama",
|
||||
"openai",
|
||||
"openrouter",
|
||||
"qianfan",
|
||||
"stepfun",
|
||||
@@ -33,8 +33,17 @@ export const providerExtensionIds = [
|
||||
"zai",
|
||||
];
|
||||
|
||||
export const providerOpenAiExtensionIds = ["openai"];
|
||||
|
||||
export const providerExtensionTestRoots = providerExtensionIds.map((id) => bundledPluginRoot(id));
|
||||
export const providerOpenAiExtensionTestRoots = providerOpenAiExtensionIds.map((id) =>
|
||||
bundledPluginRoot(id),
|
||||
);
|
||||
|
||||
export function isProviderExtensionRoot(root) {
|
||||
return providerExtensionTestRoots.includes(root);
|
||||
}
|
||||
|
||||
export function isProviderOpenAiExtensionRoot(root) {
|
||||
return providerOpenAiExtensionTestRoots.includes(root);
|
||||
}
|
||||
|
||||
9
test/vitest/vitest.extension-signal.config.ts
Normal file
9
test/vitest/vitest.extension-signal.config.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { createSingleChannelExtensionVitestConfig } from "./vitest.extension-channel-single-config.ts";
|
||||
|
||||
export function createExtensionSignalVitestConfig(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createSingleChannelExtensionVitestConfig("signal", env);
|
||||
}
|
||||
|
||||
export default createExtensionSignalVitestConfig();
|
||||
9
test/vitest/vitest.extension-slack.config.ts
Normal file
9
test/vitest/vitest.extension-slack.config.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { createSingleChannelExtensionVitestConfig } from "./vitest.extension-channel-single-config.ts";
|
||||
|
||||
export function createExtensionSlackVitestConfig(
|
||||
env: Record<string, string | undefined> = process.env,
|
||||
) {
|
||||
return createSingleChannelExtensionVitestConfig("slack", env);
|
||||
}
|
||||
|
||||
export default createExtensionSlackVitestConfig();
|
||||
@@ -10,7 +10,10 @@ import { mattermostExtensionTestRoots } from "./vitest.extension-mattermost-path
|
||||
import { memoryExtensionTestRoots } from "./vitest.extension-memory-paths.mjs";
|
||||
import { messagingExtensionTestRoots } from "./vitest.extension-messaging-paths.mjs";
|
||||
import { msTeamsExtensionTestRoots } from "./vitest.extension-msteams-paths.mjs";
|
||||
import { providerExtensionTestRoots } from "./vitest.extension-provider-paths.mjs";
|
||||
import {
|
||||
providerExtensionTestRoots,
|
||||
providerOpenAiExtensionTestRoots,
|
||||
} from "./vitest.extension-provider-paths.mjs";
|
||||
import { telegramExtensionTestRoots } from "./vitest.extension-telegram-paths.mjs";
|
||||
import { voiceCallExtensionTestRoots } from "./vitest.extension-voice-call-paths.mjs";
|
||||
import { whatsAppExtensionTestRoots } from "./vitest.extension-whatsapp-paths.mjs";
|
||||
@@ -47,6 +50,7 @@ export function createExtensionsVitestConfig(
|
||||
...memoryExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
...messagingExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
...msTeamsExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
...providerOpenAiExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
...providerExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
...telegramExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
...voiceCallExtensionTestRoots.map((root) => `${root.replace(/^extensions\//u, "")}/**`),
|
||||
|
||||
@@ -61,14 +61,20 @@ const SCOPED_PROJECT_GROUP_ORDER_BY_NAME = new Map(
|
||||
"extension-bluebubbles",
|
||||
"extension-channels",
|
||||
"extension-diffs",
|
||||
"extension-discord",
|
||||
"extension-feishu",
|
||||
"extension-imessage",
|
||||
"extension-irc",
|
||||
"extension-line",
|
||||
"extension-mattermost",
|
||||
"extension-matrix",
|
||||
"extension-memory",
|
||||
"extension-messaging",
|
||||
"extension-msteams",
|
||||
"extension-provider-openai",
|
||||
"extension-providers",
|
||||
"extension-signal",
|
||||
"extension-slack",
|
||||
"extension-telegram",
|
||||
"extension-voice-call",
|
||||
"extension-whatsapp",
|
||||
|
||||
@@ -142,13 +142,18 @@ export const sharedVitestConfig = {
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles-paths.mjs",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channel-single-config.ts",
|
||||
"test/vitest/vitest.extension-channel-split-paths.mjs",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs-paths.mjs",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu-paths.mjs",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc-paths.mjs",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost-paths.mjs",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix-paths.mjs",
|
||||
@@ -195,7 +200,10 @@ export const sharedVitestConfig = {
|
||||
"test/vitest/vitest.extension-zalo-paths.mjs",
|
||||
"test/vitest/vitest.extension-zalo.config.ts",
|
||||
"test/vitest/vitest.extension-provider-paths.mjs",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.logging.config.ts",
|
||||
"test/vitest/vitest.process.config.ts",
|
||||
"test/vitest/vitest.tasks.config.ts",
|
||||
|
||||
@@ -103,16 +103,21 @@ export const fullSuiteVitestShards = [
|
||||
projects: [
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix.config.ts",
|
||||
"test/vitest/vitest.extension-memory.config.ts",
|
||||
"test/vitest/vitest.extension-messaging.config.ts",
|
||||
"test/vitest/vitest.extension-msteams.config.ts",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.extension-telegram.config.ts",
|
||||
"test/vitest/vitest.extension-voice-call.config.ts",
|
||||
"test/vitest/vitest.extension-whatsapp.config.ts",
|
||||
|
||||
Reference in New Issue
Block a user