diff --git a/extensions/bluebubbles/src/monitor.test.ts b/extensions/bluebubbles/src/monitor.test.ts index 4bcc0045caf..d1eb3e4a18d 100644 --- a/extensions/bluebubbles/src/monitor.test.ts +++ b/extensions/bluebubbles/src/monitor.test.ts @@ -29,7 +29,7 @@ import { EMPTY_DISPATCH_RESULT, resetBlueBubblesMonitorTestState, type DispatchReplyParams, -} from "./test-support/monitor.js"; +} from "./test-support/monitor-test-support.js"; // Mock dependencies vi.mock("./send.js", () => ({ diff --git a/extensions/bluebubbles/src/monitor.webhook-auth.test.ts b/extensions/bluebubbles/src/monitor.webhook-auth.test.ts index 33fcc7c42e9..b3e8575475c 100644 --- a/extensions/bluebubbles/src/monitor.webhook-auth.test.ts +++ b/extensions/bluebubbles/src/monitor.webhook-auth.test.ts @@ -26,7 +26,7 @@ import { EMPTY_DISPATCH_RESULT, resetBlueBubblesMonitorTestState, type DispatchReplyParams, -} from "./test-support/monitor.js"; +} from "./test-support/monitor-test-support.js"; // Mock dependencies vi.mock("./send.js", () => ({ diff --git a/extensions/bluebubbles/src/test-support/monitor.ts b/extensions/bluebubbles/src/test-support/monitor-test-support.ts similarity index 100% rename from extensions/bluebubbles/src/test-support/monitor.ts rename to extensions/bluebubbles/src/test-support/monitor-test-support.ts diff --git a/extensions/feishu/src/monitor.acp-init-failure.lifecycle.test.ts b/extensions/feishu/src/monitor.acp-init-failure.lifecycle.test.ts index 699d34157b0..98c628010a5 100644 --- a/extensions/feishu/src/monitor.acp-init-failure.lifecycle.test.ts +++ b/extensions/feishu/src/monitor.acp-init-failure.lifecycle.test.ts @@ -11,7 +11,7 @@ import { restoreFeishuLifecycleStateDir, setFeishuLifecycleStateDir, setupFeishuLifecycleHandler, -} from "./test-support/lifecycle.js"; +} from "./test-support/lifecycle-test-support.js"; import type { ResolvedFeishuAccount } from "./types.js"; const { diff --git a/extensions/feishu/src/monitor.bot-menu.lifecycle.test.ts b/extensions/feishu/src/monitor.bot-menu.lifecycle.test.ts index 103a0e95c04..5575e3583c0 100644 --- a/extensions/feishu/src/monitor.bot-menu.lifecycle.test.ts +++ b/extensions/feishu/src/monitor.bot-menu.lifecycle.test.ts @@ -15,7 +15,7 @@ import { restoreFeishuLifecycleStateDir, setFeishuLifecycleStateDir, setupFeishuLifecycleHandler, -} from "./test-support/lifecycle.js"; +} from "./test-support/lifecycle-test-support.js"; import type { ResolvedFeishuAccount } from "./types.js"; const { diff --git a/extensions/feishu/src/monitor.broadcast.reply-once.lifecycle.test.ts b/extensions/feishu/src/monitor.broadcast.reply-once.lifecycle.test.ts index e9889546040..f0ab36ca65d 100644 --- a/extensions/feishu/src/monitor.broadcast.reply-once.lifecycle.test.ts +++ b/extensions/feishu/src/monitor.broadcast.reply-once.lifecycle.test.ts @@ -13,7 +13,7 @@ import { runFeishuLifecycleSequence, setFeishuLifecycleStateDir, setupFeishuLifecycleHandler, -} from "./test-support/lifecycle.js"; +} from "./test-support/lifecycle-test-support.js"; import type { FeishuConfig, ResolvedFeishuAccount } from "./types.js"; const { diff --git a/extensions/feishu/src/monitor.card-action.lifecycle.test.ts b/extensions/feishu/src/monitor.card-action.lifecycle.test.ts index 7ecc3319e96..44012947c05 100644 --- a/extensions/feishu/src/monitor.card-action.lifecycle.test.ts +++ b/extensions/feishu/src/monitor.card-action.lifecycle.test.ts @@ -17,7 +17,7 @@ import { restoreFeishuLifecycleStateDir, setFeishuLifecycleStateDir, setupFeishuLifecycleHandler, -} from "./test-support/lifecycle.js"; +} from "./test-support/lifecycle-test-support.js"; import type { ResolvedFeishuAccount } from "./types.js"; const { diff --git a/extensions/feishu/src/monitor.reply-once.lifecycle.test.ts b/extensions/feishu/src/monitor.reply-once.lifecycle.test.ts index 6ef4f7544cd..8faea22d2b1 100644 --- a/extensions/feishu/src/monitor.reply-once.lifecycle.test.ts +++ b/extensions/feishu/src/monitor.reply-once.lifecycle.test.ts @@ -16,7 +16,7 @@ import { restoreFeishuLifecycleStateDir, setFeishuLifecycleStateDir, setupFeishuLifecycleHandler, -} from "./test-support/lifecycle.js"; +} from "./test-support/lifecycle-test-support.js"; import type { ResolvedFeishuAccount } from "./types.js"; const { diff --git a/extensions/feishu/src/test-support/lifecycle.ts b/extensions/feishu/src/test-support/lifecycle-test-support.ts similarity index 100% rename from extensions/feishu/src/test-support/lifecycle.ts rename to extensions/feishu/src/test-support/lifecycle-test-support.ts diff --git a/extensions/matrix/src/matrix/monitor/route.test.ts b/extensions/matrix/src/matrix/monitor/route.test.ts index 6877286c2c8..c6f503ba11d 100644 --- a/extensions/matrix/src/matrix/monitor/route.test.ts +++ b/extensions/matrix/src/matrix/monitor/route.test.ts @@ -7,7 +7,7 @@ import { resolveAgentRoute, setActivePluginRegistry, type OpenClawConfig, -} from "../../test-support/monitor-route.js"; +} from "../../test-support/monitor-route-test-support.js"; import { resolveMatrixInboundRoute } from "./route.js"; const baseCfg = { diff --git a/extensions/matrix/src/test-support/monitor-route-test-support.ts b/extensions/matrix/src/test-support/monitor-route-test-support.ts new file mode 100644 index 00000000000..d90e4217ef7 --- /dev/null +++ b/extensions/matrix/src/test-support/monitor-route-test-support.ts @@ -0,0 +1,8 @@ +export { + __testing, + createTestRegistry, + registerSessionBindingAdapter, + resolveAgentRoute, + setActivePluginRegistry, + type OpenClawConfig, +} from "../../../../test/helpers/plugins/matrix-monitor-route.js"; diff --git a/extensions/matrix/src/test-support/monitor-route.ts b/extensions/matrix/src/test-support/monitor-route.ts deleted file mode 100644 index 1685caa0ddb..00000000000 --- a/extensions/matrix/src/test-support/monitor-route.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type { OpenClawConfig } from "../../../../src/config/config.js"; -export { - __testing, - registerSessionBindingAdapter, -} from "../../../../src/infra/outbound/session-binding-service.js"; -export { setActivePluginRegistry } from "../../../../src/plugins/runtime.js"; -export { resolveAgentRoute } from "../../../../src/routing/resolve-route.js"; -export { createTestRegistry } from "../../../../src/test-utils/channel-plugins.js"; diff --git a/extensions/openai/provider-catalog.contract.test.ts b/extensions/openai/provider-catalog.contract.test.ts index 13370e77215..4342f65bb15 100644 --- a/extensions/openai/provider-catalog.contract.test.ts +++ b/extensions/openai/provider-catalog.contract.test.ts @@ -1,3 +1,3 @@ -import { describeOpenAIProviderCatalogContract } from "./test-support/provider-catalog.contract.js"; +import { describeOpenAIProviderCatalogContract } from "./test-support/provider-catalog.contract-test-support.js"; describeOpenAIProviderCatalogContract(); diff --git a/extensions/openai/test-support/provider-catalog.contract.ts b/extensions/openai/test-support/provider-catalog.contract-test-support.ts similarity index 77% rename from extensions/openai/test-support/provider-catalog.contract.ts rename to extensions/openai/test-support/provider-catalog.contract-test-support.ts index 0ffcba08615..2f861c0f480 100644 --- a/extensions/openai/test-support/provider-catalog.contract.ts +++ b/extensions/openai/test-support/provider-catalog.contract-test-support.ts @@ -3,9 +3,10 @@ import { expectAugmentedCodexCatalog, expectCodexBuiltInSuppression, expectCodexMissingAuthHint, -} from "../../../src/plugins/provider-runtime.test-support.js"; -import type { ProviderPlugin } from "../../../src/plugins/types.js"; -import { loadBundledPluginPublicSurfaceSync } from "../../../src/test-utils/bundled-plugin-public-surface.js"; + importProviderRuntimeCatalogModule, + loadBundledPluginPublicSurfaceSync, +} from "../../../test/helpers/plugins/provider-catalog.js"; +import type { ProviderPlugin } from "../../../test/helpers/plugins/provider-catalog.js"; import { registerProviderPlugin, requireRegisteredProvider, @@ -13,12 +14,9 @@ import { const PROVIDER_CATALOG_CONTRACT_TIMEOUT_MS = 300_000; -type ResolvePluginProviders = - typeof import("../../../src/plugins/providers.runtime.js").resolvePluginProviders; -type ResolveOwningPluginIdsForProvider = - typeof import("../../../src/plugins/providers.js").resolveOwningPluginIdsForProvider; -type ResolveCatalogHookProviderPluginIds = - typeof import("../../../src/plugins/providers.js").resolveCatalogHookProviderPluginIds; +type ResolvePluginProviders = (params?: { onlyPluginIds?: string[] }) => ProviderPlugin[]; +type ResolveOwningPluginIdsForProvider = (params: { provider: string }) => string[] | undefined; +type ResolveCatalogHookProviderPluginIds = (params: unknown) => string[]; const resolvePluginProvidersMock = vi.hoisted(() => vi.fn(() => [])); const resolveOwningPluginIdsForProviderMock = vi.hoisted(() => @@ -40,9 +38,15 @@ vi.mock("../../../src/plugins/providers.runtime.js", () => ({ })); export function describeOpenAIProviderCatalogContract() { - let augmentModelCatalogWithProviderPlugins: typeof import("../../../src/plugins/provider-runtime.js").augmentModelCatalogWithProviderPlugins; - let resetProviderRuntimeHookCacheForTest: typeof import("../../../src/plugins/provider-runtime.js").resetProviderRuntimeHookCacheForTest; - let resolveProviderBuiltInModelSuppression: typeof import("../../../src/plugins/provider-runtime.js").resolveProviderBuiltInModelSuppression; + let augmentModelCatalogWithProviderPlugins: Awaited< + ReturnType + >["augmentModelCatalogWithProviderPlugins"]; + let resetProviderRuntimeHookCacheForTest: Awaited< + ReturnType + >["resetProviderRuntimeHookCacheForTest"]; + let resolveProviderBuiltInModelSuppression: Awaited< + ReturnType + >["resolveProviderBuiltInModelSuppression"]; let openaiProviders: ProviderPlugin[]; let openaiProvider: ProviderPlugin; @@ -68,7 +72,7 @@ export function describeOpenAIProviderCatalogContract() { augmentModelCatalogWithProviderPlugins, resetProviderRuntimeHookCacheForTest, resolveProviderBuiltInModelSuppression, - } = await import("../../../src/plugins/provider-runtime.js")); + } = await importProviderRuntimeCatalogModule()); }); beforeEach(() => { diff --git a/extensions/zalo/src/monitor.image.polling.test.ts b/extensions/zalo/src/monitor.image.polling.test.ts index 5b33b3d449c..3fa1f5dcd08 100644 --- a/extensions/zalo/src/monitor.image.polling.test.ts +++ b/extensions/zalo/src/monitor.image.polling.test.ts @@ -5,14 +5,14 @@ import { createImageUpdate, createLifecycleMonitorSetup, expectImageLifecycleDelivery, -} from "../test-support/lifecycle.js"; +} from "../test-support/lifecycle-test-support.js"; import { getUpdatesMock, getZaloRuntimeMock, loadLifecycleMonitorModule, resetLifecycleTestState, sendMessageMock, -} from "../test-support/monitor-mocks.js"; +} from "../test-support/monitor-mocks-test-support.js"; describe("Zalo polling image handling", () => { const { diff --git a/extensions/zalo/src/monitor.pairing.lifecycle.test.ts b/extensions/zalo/src/monitor.pairing.lifecycle.test.ts index 7dd46b880f0..bd5d1cad550 100644 --- a/extensions/zalo/src/monitor.pairing.lifecycle.test.ts +++ b/extensions/zalo/src/monitor.pairing.lifecycle.test.ts @@ -5,13 +5,13 @@ import { createTextUpdate, postWebhookReplay, settleAsyncWork, -} from "../test-support/lifecycle.js"; +} from "../test-support/lifecycle-test-support.js"; import { resetLifecycleTestState, sendMessageMock, setLifecycleRuntimeCore, startWebhookLifecycleMonitor, -} from "../test-support/monitor-mocks.js"; +} from "../test-support/monitor-mocks-test-support.js"; describe("Zalo pairing lifecycle", () => { const readAllowFromStoreMock = vi.fn(async () => [] as string[]); diff --git a/extensions/zalo/src/monitor.reply-once.lifecycle.test.ts b/extensions/zalo/src/monitor.reply-once.lifecycle.test.ts index a59ce99ed78..546f839670f 100644 --- a/extensions/zalo/src/monitor.reply-once.lifecycle.test.ts +++ b/extensions/zalo/src/monitor.reply-once.lifecycle.test.ts @@ -6,13 +6,13 @@ import { createTextUpdate, postWebhookReplay, settleAsyncWork, -} from "../test-support/lifecycle.js"; +} from "../test-support/lifecycle-test-support.js"; import { resetLifecycleTestState, sendMessageMock, setLifecycleRuntimeCore, startWebhookLifecycleMonitor, -} from "../test-support/monitor-mocks.js"; +} from "../test-support/monitor-mocks-test-support.js"; describe("Zalo reply-once lifecycle", () => { const finalizeInboundContextMock = vi.fn((ctx: Record) => ctx); diff --git a/extensions/zalo/src/monitor.webhook.test.ts b/extensions/zalo/src/monitor.webhook.test.ts index bd1c00f9617..1c05ae6148f 100644 --- a/extensions/zalo/src/monitor.webhook.test.ts +++ b/extensions/zalo/src/monitor.webhook.test.ts @@ -10,7 +10,7 @@ import { createTextUpdate, expectImageLifecycleDelivery, postWebhookReplay, -} from "../test-support/lifecycle.js"; +} from "../test-support/lifecycle-test-support.js"; import { clearZaloWebhookSecurityStateForTest, getZaloWebhookRateLimitStateSizeForTest, diff --git a/extensions/zalo/test-support/lifecycle.ts b/extensions/zalo/test-support/lifecycle-test-support.ts similarity index 100% rename from extensions/zalo/test-support/lifecycle.ts rename to extensions/zalo/test-support/lifecycle-test-support.ts diff --git a/extensions/zalo/test-support/monitor-mocks.ts b/extensions/zalo/test-support/monitor-mocks-test-support.ts similarity index 97% rename from extensions/zalo/test-support/monitor-mocks.ts rename to extensions/zalo/test-support/monitor-mocks-test-support.ts index 7b343898a5b..fbb7c8aa3c4 100644 --- a/extensions/zalo/test-support/monitor-mocks.ts +++ b/extensions/zalo/test-support/monitor-mocks-test-support.ts @@ -1,7 +1,9 @@ import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk/zalo"; import { vi } from "vitest"; -import { createEmptyPluginRegistry } from "../../../src/plugins/registry.js"; -import { setActivePluginRegistry } from "../../../src/plugins/runtime.js"; +import { + createEmptyPluginRegistry, + setActivePluginRegistry, +} from "../../../test/helpers/plugins/plugin-registry.js"; import { createPluginRuntimeMock } from "../../../test/helpers/plugins/plugin-runtime-mock.js"; import { createRuntimeEnv } from "../../../test/helpers/plugins/runtime-env.js"; import type { ResolvedZaloAccount } from "../src/types.js"; diff --git a/test/helpers/plugins/matrix-monitor-route.ts b/test/helpers/plugins/matrix-monitor-route.ts new file mode 100644 index 00000000000..1668a7e441a --- /dev/null +++ b/test/helpers/plugins/matrix-monitor-route.ts @@ -0,0 +1,8 @@ +export type { OpenClawConfig } from "../../../src/config/config.js"; +export { + __testing, + registerSessionBindingAdapter, +} from "../../../src/infra/outbound/session-binding-service.js"; +export { setActivePluginRegistry } from "../../../src/plugins/runtime.js"; +export { resolveAgentRoute } from "../../../src/routing/resolve-route.js"; +export { createTestRegistry } from "../../../src/test-utils/channel-plugins.js"; diff --git a/test/helpers/plugins/plugin-registry.ts b/test/helpers/plugins/plugin-registry.ts new file mode 100644 index 00000000000..40b23db0cdb --- /dev/null +++ b/test/helpers/plugins/plugin-registry.ts @@ -0,0 +1,2 @@ +export { createEmptyPluginRegistry } from "../../../src/plugins/registry.js"; +export { setActivePluginRegistry } from "../../../src/plugins/runtime.js"; diff --git a/test/helpers/plugins/provider-catalog.ts b/test/helpers/plugins/provider-catalog.ts new file mode 100644 index 00000000000..0886397d560 --- /dev/null +++ b/test/helpers/plugins/provider-catalog.ts @@ -0,0 +1,27 @@ +export { + expectAugmentedCodexCatalog, + expectCodexBuiltInSuppression, + expectCodexMissingAuthHint, +} from "../../../src/plugins/provider-runtime.test-support.js"; +export type { ProviderPlugin } from "../../../src/plugins/types.js"; +export { loadBundledPluginPublicSurfaceSync } from "../../../src/test-utils/bundled-plugin-public-surface.js"; + +type ProviderRuntimeCatalogModule = Pick< + typeof import("../../../src/plugins/provider-runtime.js"), + | "augmentModelCatalogWithProviderPlugins" + | "resetProviderRuntimeHookCacheForTest" + | "resolveProviderBuiltInModelSuppression" +>; + +export async function importProviderRuntimeCatalogModule(): Promise { + const { + augmentModelCatalogWithProviderPlugins, + resetProviderRuntimeHookCacheForTest, + resolveProviderBuiltInModelSuppression, + } = await import("../../../src/plugins/provider-runtime.js"); + return { + augmentModelCatalogWithProviderPlugins, + resetProviderRuntimeHookCacheForTest, + resolveProviderBuiltInModelSuppression, + }; +}