test: speed up provider tool tests

This commit is contained in:
Peter Steinberger
2026-04-07 14:15:20 +01:00
parent 92c912ef66
commit 09c6528bc7
2 changed files with 9 additions and 54 deletions

View File

@@ -1,10 +1,9 @@
import { describe, expect, it, vi } from "vitest";
import { createTestPluginApi } from "../../../test/helpers/plugins/plugin-api.js";
import type { OpenClawPluginApi, OpenClawPluginToolContext } from "../runtime-api.js";
import { createLobsterTool } from "./lobster-tool.js";
import { createFakeTaskFlow } from "./taskflow-test-helpers.js";
let createLobsterTool: typeof import("./lobster-tool.js").createLobsterTool;
function fakeApi(overrides: Partial<OpenClawPluginApi> = {}): OpenClawPluginApi {
return createTestPluginApi({
id: "lobster",
@@ -32,8 +31,6 @@ function fakeCtx(overrides: Partial<OpenClawPluginToolContext> = {}): OpenClawPl
describe("lobster plugin tool", () => {
it("returns the Lobster envelope in details", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const runner = {
run: vi.fn().mockResolvedValue({
ok: true,
@@ -66,8 +63,6 @@ describe("lobster plugin tool", () => {
});
it("supports approval envelopes without changing the tool contract", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const runner = {
run: vi.fn().mockResolvedValue({
ok: true,
@@ -111,8 +106,6 @@ describe("lobster plugin tool", () => {
});
it("throws when the runner returns an error envelope", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: {
run: vi.fn().mockResolvedValue({
@@ -134,8 +127,6 @@ describe("lobster plugin tool", () => {
});
it("can run through managed TaskFlow mode", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const runner = {
run: vi.fn().mockResolvedValue({
ok: true,
@@ -192,8 +183,6 @@ describe("lobster plugin tool", () => {
});
it("rejects managed TaskFlow params when no bound taskFlow runtime is available", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
});
@@ -209,8 +198,6 @@ describe("lobster plugin tool", () => {
});
it("rejects invalid flowStateJson in managed TaskFlow mode", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
taskFlow: createFakeTaskFlow(),
@@ -228,8 +215,6 @@ describe("lobster plugin tool", () => {
});
it("rejects managed TaskFlow resume mode without a token", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
taskFlow: createFakeTaskFlow(),
@@ -246,8 +231,6 @@ describe("lobster plugin tool", () => {
});
it("rejects managed TaskFlow resume mode without approve", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
taskFlow: createFakeTaskFlow(),
@@ -264,8 +247,6 @@ describe("lobster plugin tool", () => {
});
it("requires action", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
});
@@ -273,8 +254,6 @@ describe("lobster plugin tool", () => {
});
it("rejects unknown action", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
});
@@ -286,8 +265,6 @@ describe("lobster plugin tool", () => {
});
it("rejects absolute cwd", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
});
@@ -301,8 +278,6 @@ describe("lobster plugin tool", () => {
});
it("rejects cwd that escapes the gateway working directory", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const tool = createLobsterTool(fakeApi(), {
runner: { run: vi.fn() },
});
@@ -316,8 +291,6 @@ describe("lobster plugin tool", () => {
});
it("can be gated off in sandboxed contexts", async () => {
({ createLobsterTool } = await import("./lobster-tool.js"));
const api = fakeApi();
const factoryTool = (ctx: OpenClawPluginToolContext) => {
if (ctx.sandboxed) {

View File

@@ -1,6 +1,11 @@
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import plugin from "../index.js";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { createOllamaWebSearchProvider as createContractOllamaWebSearchProvider } from "../web-search-contract-api.js";
import {
__testing as testing,
createOllamaWebSearchProvider,
runOllamaWebSearch,
} from "./web-search-provider.js";
const { fetchWithSsrFGuardMock } = vi.hoisted(() => ({
fetchWithSsrFGuardMock: vi.fn(),
@@ -11,35 +16,12 @@ vi.mock("openclaw/plugin-sdk/ssrf-runtime", () => ({
}));
describe("ollama web search provider", () => {
let createOllamaWebSearchProvider: typeof import("./web-search-provider.js").createOllamaWebSearchProvider;
let runOllamaWebSearch: typeof import("./web-search-provider.js").runOllamaWebSearch;
let testing: typeof import("./web-search-provider.js").__testing;
beforeAll(async () => {
({
createOllamaWebSearchProvider,
runOllamaWebSearch,
__testing: testing,
} = await import("./web-search-provider.js"));
});
beforeEach(() => {
fetchWithSsrFGuardMock.mockReset();
});
it("registers a keyless web search provider", () => {
const webSearchProviders: unknown[] = [];
plugin.register({
registerMemoryEmbeddingProvider() {},
registerProvider() {},
registerWebSearchProvider(provider: unknown) {
webSearchProviders.push(provider);
},
} as never);
expect(webSearchProviders).toHaveLength(1);
expect(webSearchProviders[0]).toMatchObject({
expect(createContractOllamaWebSearchProvider()).toMatchObject({
id: "ollama",
label: "Ollama Web Search",
requiresCredential: false,