From 21d500a65f12c9d1c9bb5b8cd91de46a7f6506db Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Thu, 16 Apr 2026 16:14:01 -0400 Subject: [PATCH] test: expose bundled plugin QA test APIs --- src/plugin-sdk/qa-runner-runtime.test.ts | 25 ++++++++++++++++++++++++ src/plugin-sdk/qa-runner-runtime.ts | 9 +++++++++ 2 files changed, 34 insertions(+) diff --git a/src/plugin-sdk/qa-runner-runtime.test.ts b/src/plugin-sdk/qa-runner-runtime.test.ts index be937ced849..d0d988bbe79 100644 --- a/src/plugin-sdk/qa-runner-runtime.test.ts +++ b/src/plugin-sdk/qa-runner-runtime.test.ts @@ -100,6 +100,31 @@ describe("plugin-sdk qa-runner-runtime", () => { }); }); + it("loads bundled plugin test APIs with the private QA source tree override", async () => { + const sourceRoot = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-qa-test-api-root-")); + tempDirs.push(sourceRoot); + fs.mkdirSync(path.join(sourceRoot, "src"), { recursive: true }); + fs.mkdirSync(path.join(sourceRoot, "extensions"), { recursive: true }); + fs.writeFileSync(path.join(sourceRoot, ".git"), "gitdir: /tmp/mock\n", "utf8"); + process.env.OPENCLAW_ENABLE_PRIVATE_QA_CLI = "1"; + resolveOpenClawPackageRootSync.mockReturnValue(sourceRoot); + + const testApi = { marker: "matrix-test-api" }; + loadBundledPluginPublicSurfaceModuleSync.mockReturnValue(testApi); + + const module = await import("./qa-runner-runtime.js"); + + expect(module.loadQaRunnerBundledPluginTestApi("matrix")).toBe(testApi); + expect(loadBundledPluginPublicSurfaceModuleSync).toHaveBeenCalledWith({ + dirName: "matrix", + artifactBasename: "test-api.js", + env: expect.objectContaining({ + OPENCLAW_ENABLE_PRIVATE_QA_CLI: "1", + OPENCLAW_BUNDLED_PLUGINS_DIR: path.join(sourceRoot, "extensions"), + }), + }); + }); + it("reports the qa runtime as unavailable when the qa-lab surface is missing", async () => { loadBundledPluginPublicSurfaceModuleSync.mockImplementation(() => { throw new Error("Unable to resolve bundled plugin public surface qa-lab/runtime-api.js"); diff --git a/src/plugin-sdk/qa-runner-runtime.ts b/src/plugin-sdk/qa-runner-runtime.ts index 7a149bdc39a..1349daa5740 100644 --- a/src/plugin-sdk/qa-runner-runtime.ts +++ b/src/plugin-sdk/qa-runner-runtime.ts @@ -62,6 +62,15 @@ export function loadQaRuntimeModule(): QaRuntimeSurface { }); } +export function loadQaRunnerBundledPluginTestApi(pluginId: string): T { + const env = resolvePrivateQaBundledPluginsEnv(); + return loadBundledPluginPublicSurfaceModuleSync({ + dirName: pluginId, + artifactBasename: "test-api.js", + ...(env ? { env } : {}), + }); +} + export function isQaRuntimeAvailable(): boolean { try { loadQaRuntimeModule();