mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-23 14:45:46 +00:00
test: speed up provider tool tests
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user