From cd2f6746f923bb7fd0cd6051c3f9454dc1e58f57 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Mon, 6 Apr 2026 05:19:51 +0100 Subject: [PATCH] test(memory-wiki): share plugin test helpers --- extensions/memory-wiki/index.test.ts | 35 ++---------------- extensions/memory-wiki/src/gateway.test.ts | 25 +++---------- extensions/memory-wiki/src/status.test.ts | 20 ++++------ extensions/memory-wiki/src/test-helpers.ts | 43 +++++++++++++++++++++- 4 files changed, 58 insertions(+), 65 deletions(-) diff --git a/extensions/memory-wiki/index.test.ts b/extensions/memory-wiki/index.test.ts index 7493b4455e6..3ef8d4a7924 100644 --- a/extensions/memory-wiki/index.test.ts +++ b/extensions/memory-wiki/index.test.ts @@ -1,35 +1,8 @@ -import { describe, expect, it, vi } from "vitest"; -import { createTestPluginApi } from "../../test/helpers/plugins/plugin-api.js"; -import type { OpenClawPluginApi } from "./api.js"; +import { describe, expect, it } from "vitest"; import plugin from "./index.js"; +import { createMemoryWikiTestHarness } from "./src/test-helpers.js"; -function createApi() { - const registerCli = vi.fn(); - const registerGatewayMethod = vi.fn(); - const registerMemoryCorpusSupplement = vi.fn(); - const registerMemoryPromptSupplement = vi.fn(); - const registerTool = vi.fn(); - const api = createTestPluginApi({ - id: "memory-wiki", - name: "Memory Wiki", - source: "test", - config: {}, - runtime: {} as OpenClawPluginApi["runtime"], - registerCli, - registerGatewayMethod, - registerMemoryCorpusSupplement, - registerMemoryPromptSupplement, - registerTool, - }) as OpenClawPluginApi; - return { - api, - registerCli, - registerGatewayMethod, - registerMemoryCorpusSupplement, - registerMemoryPromptSupplement, - registerTool, - }; -} +const { createPluginApi } = createMemoryWikiTestHarness(); describe("memory-wiki plugin", () => { it("registers prompt supplement, gateway methods, tools, and wiki cli surface", async () => { @@ -40,7 +13,7 @@ describe("memory-wiki plugin", () => { registerMemoryCorpusSupplement, registerMemoryPromptSupplement, registerTool, - } = createApi(); + } = createPluginApi(); await plugin.register(api); diff --git a/extensions/memory-wiki/src/gateway.test.ts b/extensions/memory-wiki/src/gateway.test.ts index 10429d42490..71a42bf4b2c 100644 --- a/extensions/memory-wiki/src/gateway.test.ts +++ b/extensions/memory-wiki/src/gateway.test.ts @@ -1,26 +1,11 @@ import fs from "node:fs/promises"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; -import { createTestPluginApi } from "../../../test/helpers/plugins/plugin-api.js"; -import type { OpenClawPluginApi } from "../api.js"; import { registerMemoryWikiGatewayMethods } from "./gateway.js"; import { renderWikiMarkdown } from "./markdown.js"; import { createMemoryWikiTestHarness } from "./test-helpers.js"; -const { createTempDir, createVault } = createMemoryWikiTestHarness(); - -function createGatewayApi() { - const registerGatewayMethod = vi.fn(); - const api = createTestPluginApi({ - id: "memory-wiki", - name: "Memory Wiki", - source: "test", - config: {}, - runtime: {} as OpenClawPluginApi["runtime"], - registerGatewayMethod, - }) as OpenClawPluginApi; - return { api, registerGatewayMethod }; -} +const { createPluginApi, createTempDir, createVault } = createMemoryWikiTestHarness(); function findGatewayHandler( registerGatewayMethod: ReturnType, @@ -40,7 +25,7 @@ describe("memory-wiki gateway methods", () => { prefix: "memory-wiki-gateway-", initialize: true, }); - const { api, registerGatewayMethod } = createGatewayApi(); + const { api, registerGatewayMethod } = createPluginApi(); registerMemoryWikiGatewayMethods({ api, config }); const handler = findGatewayHandler(registerGatewayMethod, "wiki.status"); @@ -68,7 +53,7 @@ describe("memory-wiki gateway methods", () => { prefix: "memory-wiki-gateway-", initialize: true, }); - const { api, registerGatewayMethod } = createGatewayApi(); + const { api, registerGatewayMethod } = createPluginApi(); await fs.writeFile( path.join(rootDir, "sources", "alpha.md"), renderWikiMarkdown({ @@ -101,7 +86,7 @@ describe("memory-wiki gateway methods", () => { const inputRootDir = await createTempDir("memory-wiki-gateway-"); const inputPath = path.join(inputRootDir, "alpha-notes.txt"); await fs.writeFile(inputPath, "alpha over gateway\n", "utf8"); - const { api, registerGatewayMethod } = createGatewayApi(); + const { api, registerGatewayMethod } = createPluginApi(); const { config } = await createVault({ rootDir: path.join(inputRootDir, "vault"), }); @@ -135,7 +120,7 @@ describe("memory-wiki gateway methods", () => { const { config } = await createVault({ prefix: "memory-wiki-gateway-", }); - const { api, registerGatewayMethod } = createGatewayApi(); + const { api, registerGatewayMethod } = createPluginApi(); registerMemoryWikiGatewayMethods({ api, config }); const handler = findGatewayHandler(registerGatewayMethod, "wiki.apply"); diff --git a/extensions/memory-wiki/src/status.test.ts b/extensions/memory-wiki/src/status.test.ts index d01e5135675..07dff999a30 100644 --- a/extensions/memory-wiki/src/status.test.ts +++ b/extensions/memory-wiki/src/status.test.ts @@ -1,5 +1,4 @@ import fs from "node:fs/promises"; -import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; import { resolveMemoryWikiConfig } from "./config.js"; @@ -10,6 +9,9 @@ import { renderMemoryWikiStatus, resolveMemoryWikiStatus, } from "./status.js"; +import { createMemoryWikiTestHarness } from "./test-helpers.js"; + +const { createVault } = createMemoryWikiTestHarness(); describe("resolveMemoryWikiStatus", () => { it("reports missing vault and missing requested obsidian cli", async () => { @@ -58,12 +60,10 @@ describe("resolveMemoryWikiStatus", () => { }); it("counts source provenance from the vault", async () => { - const rootDir = await fs.mkdtemp(path.join(os.tmpdir(), "memory-wiki-status-")); - await fs.mkdir(path.join(rootDir, "sources"), { recursive: true }); - await fs.mkdir(path.join(rootDir, "entities"), { recursive: true }); - await fs.mkdir(path.join(rootDir, "concepts"), { recursive: true }); - await fs.mkdir(path.join(rootDir, "syntheses"), { recursive: true }); - await fs.mkdir(path.join(rootDir, "reports"), { recursive: true }); + const { rootDir, config } = await createVault({ + prefix: "memory-wiki-status-", + initialize: true, + }); await fs.writeFile( path.join(rootDir, "sources", "native.md"), renderWikiMarkdown({ @@ -113,10 +113,6 @@ describe("resolveMemoryWikiStatus", () => { "utf8", ); - const config = resolveMemoryWikiConfig( - { vault: { path: rootDir } }, - { homedir: "/Users/tester" }, - ); const status = await resolveMemoryWikiStatus(config, { pathExists: async () => true, resolveCommand: async () => null, @@ -130,8 +126,6 @@ describe("resolveMemoryWikiStatus", () => { unsafeLocal: 1, other: 0, }); - - await fs.rm(rootDir, { recursive: true, force: true }); }); }); diff --git a/extensions/memory-wiki/src/test-helpers.ts b/extensions/memory-wiki/src/test-helpers.ts index ce804066f68..d3ad0b5cf06 100644 --- a/extensions/memory-wiki/src/test-helpers.ts +++ b/extensions/memory-wiki/src/test-helpers.ts @@ -1,7 +1,9 @@ import fs from "node:fs/promises"; import os from "node:os"; import path from "node:path"; -import { afterEach } from "vitest"; +import { afterEach, vi } from "vitest"; +import { createTestPluginApi } from "../../../test/helpers/plugins/plugin-api.js"; +import type { OpenClawPluginApi } from "../api.js"; import { resolveMemoryWikiConfig, type MemoryWikiPluginConfig, @@ -16,6 +18,15 @@ export type MemoryWikiTestVault = { config: ResolvedMemoryWikiConfig; }; +export type MemoryWikiPluginApiHarness = { + api: OpenClawPluginApi; + registerCli: ReturnType; + registerGatewayMethod: ReturnType; + registerMemoryCorpusSupplement: ReturnType; + registerMemoryPromptSupplement: ReturnType; + registerTool: ReturnType; +}; + export function createMemoryWikiTestHarness() { const tempDirs: string[] = []; @@ -57,7 +68,37 @@ export function createMemoryWikiTestHarness() { return { rootDir, config }; } + function createPluginApi(): MemoryWikiPluginApiHarness { + const registerCli = vi.fn(); + const registerGatewayMethod = vi.fn(); + const registerMemoryCorpusSupplement = vi.fn(); + const registerMemoryPromptSupplement = vi.fn(); + const registerTool = vi.fn(); + const api = createTestPluginApi({ + id: "memory-wiki", + name: "Memory Wiki", + source: "test", + config: {}, + runtime: {} as OpenClawPluginApi["runtime"], + registerCli, + registerGatewayMethod, + registerMemoryCorpusSupplement, + registerMemoryPromptSupplement, + registerTool, + }) as OpenClawPluginApi; + + return { + api, + registerCli, + registerGatewayMethod, + registerMemoryCorpusSupplement, + registerMemoryPromptSupplement, + registerTool, + }; + } + return { + createPluginApi, createTempDir, createVault, };