test(memory-wiki): share plugin test helpers

This commit is contained in:
Vincent Koc 2026-04-06 05:19:51 +01:00
parent 33926ecef1
commit cd2f6746f9
4 changed files with 58 additions and 65 deletions

View File

@ -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);

View File

@ -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<typeof vi.fn>,
@ -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");

View File

@ -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 });
});
});

View File

@ -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<typeof vi.fn>;
registerGatewayMethod: ReturnType<typeof vi.fn>;
registerMemoryCorpusSupplement: ReturnType<typeof vi.fn>;
registerMemoryPromptSupplement: ReturnType<typeof vi.fn>;
registerTool: ReturnType<typeof vi.fn>;
};
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,
};