test: speed up browser plugin entry tests

This commit is contained in:
Peter Steinberger
2026-04-07 19:59:18 +01:00
parent 6380c872bc
commit f02ba9a3ed
3 changed files with 59 additions and 40 deletions

View File

@@ -1,5 +1,11 @@
import { describe, expect, it, vi } from "vitest";
import { createTestPluginApi } from "../../test/helpers/plugins/plugin-api.js";
import {
browserPluginNodeHostCommands,
browserPluginReload,
browserSecurityAuditCollectors,
registerBrowserPlugin,
} from "./plugin-registration.js";
import type { OpenClawPluginApi } from "./runtime-api.js";
const runtimeApiMocks = vi.hoisted(() => ({
@@ -26,8 +32,6 @@ vi.mock("./register.runtime.js", async () => {
};
});
import browserPlugin from "./index.js";
function createApi() {
const registerCli = vi.fn();
const registerGatewayMethod = vi.fn();
@@ -49,19 +53,19 @@ function createApi() {
describe("browser plugin", () => {
it("exposes static browser metadata on the plugin definition", () => {
expect(browserPlugin.reload).toEqual({ restartPrefixes: ["browser"] });
expect(browserPlugin.nodeHostCommands).toEqual([
expect(browserPluginReload).toEqual({ restartPrefixes: ["browser"] });
expect(browserPluginNodeHostCommands).toEqual([
expect.objectContaining({
command: "browser.proxy",
cap: "browser",
}),
]);
expect(browserPlugin.securityAuditCollectors).toHaveLength(1);
expect(browserSecurityAuditCollectors).toHaveLength(1);
});
it("forwards per-session browser options into the tool factory", async () => {
const { api, registerTool } = createApi();
await browserPlugin.register(api);
await registerBrowserPlugin(api);
const tool = registerTool.mock.calls[0]?.[0];
if (typeof tool !== "function") {

View File

@@ -1,41 +1,17 @@
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import {
definePluginEntry,
type OpenClawPluginToolContext,
type OpenClawPluginToolFactory,
} from "openclaw/plugin-sdk/plugin-entry";
import {
collectBrowserSecurityAuditFindings,
createBrowserPluginService,
createBrowserTool,
handleBrowserGatewayRequest,
registerBrowserCli,
runBrowserProxyCommand,
} from "./register.runtime.js";
browserPluginNodeHostCommands,
browserPluginReload,
browserSecurityAuditCollectors,
registerBrowserPlugin,
} from "./plugin-registration.js";
export default definePluginEntry({
id: "browser",
name: "Browser",
description: "Default browser tool plugin",
reload: { restartPrefixes: ["browser"] },
nodeHostCommands: [
{
command: "browser.proxy",
cap: "browser",
handle: runBrowserProxyCommand,
},
],
securityAuditCollectors: [collectBrowserSecurityAuditFindings],
register(api) {
api.registerTool(((ctx: OpenClawPluginToolContext) =>
createBrowserTool({
sandboxBridgeUrl: ctx.browser?.sandboxBridgeUrl,
allowHostControl: ctx.browser?.allowHostControl,
agentSessionKey: ctx.sessionKey,
})) as OpenClawPluginToolFactory);
api.registerCli(({ program }) => registerBrowserCli(program), { commands: ["browser"] });
api.registerGatewayMethod("browser.request", handleBrowserGatewayRequest, {
scope: "operator.write",
});
api.registerService(createBrowserPluginService());
},
reload: browserPluginReload,
nodeHostCommands: browserPluginNodeHostCommands,
securityAuditCollectors: [...browserSecurityAuditCollectors],
register: registerBrowserPlugin,
});

View File

@@ -0,0 +1,39 @@
import type {
OpenClawPluginApi,
OpenClawPluginToolContext,
OpenClawPluginToolFactory,
} from "openclaw/plugin-sdk/plugin-entry";
import {
collectBrowserSecurityAuditFindings,
createBrowserPluginService,
createBrowserTool,
handleBrowserGatewayRequest,
registerBrowserCli,
runBrowserProxyCommand,
} from "./register.runtime.js";
export const browserPluginReload = { restartPrefixes: ["browser"] } as const;
export const browserPluginNodeHostCommands = [
{
command: "browser.proxy",
cap: "browser",
handle: runBrowserProxyCommand,
},
] as const;
export const browserSecurityAuditCollectors = [collectBrowserSecurityAuditFindings] as const;
export function registerBrowserPlugin(api: OpenClawPluginApi) {
api.registerTool(((ctx: OpenClawPluginToolContext) =>
createBrowserTool({
sandboxBridgeUrl: ctx.browser?.sandboxBridgeUrl,
allowHostControl: ctx.browser?.allowHostControl,
agentSessionKey: ctx.sessionKey,
})) as OpenClawPluginToolFactory);
api.registerCli(({ program }) => registerBrowserCli(program), { commands: ["browser"] });
api.registerGatewayMethod("browser.request", handleBrowserGatewayRequest, {
scope: "operator.write",
});
api.registerService(createBrowserPluginService());
}