mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-14 03:20:49 +00:00
79 lines
2.4 KiB
TypeScript
79 lines
2.4 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import { registerPluginHttpRoute } from "./http-registry.js";
|
|
import { createEmptyPluginRegistry } from "./registry.js";
|
|
|
|
describe("registerPluginHttpRoute", () => {
|
|
it("registers route and unregisters it", () => {
|
|
const registry = createEmptyPluginRegistry();
|
|
const handler = vi.fn();
|
|
|
|
const unregister = registerPluginHttpRoute({
|
|
path: "/plugins/demo",
|
|
handler,
|
|
registry,
|
|
});
|
|
|
|
expect(registry.httpRoutes).toHaveLength(1);
|
|
expect(registry.httpRoutes[0]?.path).toBe("/plugins/demo");
|
|
expect(registry.httpRoutes[0]?.handler).toBe(handler);
|
|
|
|
unregister();
|
|
expect(registry.httpRoutes).toHaveLength(0);
|
|
});
|
|
|
|
it("returns noop unregister when path is missing", () => {
|
|
const registry = createEmptyPluginRegistry();
|
|
const logs: string[] = [];
|
|
const unregister = registerPluginHttpRoute({
|
|
path: "",
|
|
handler: vi.fn(),
|
|
registry,
|
|
accountId: "default",
|
|
log: (msg) => logs.push(msg),
|
|
});
|
|
|
|
expect(registry.httpRoutes).toHaveLength(0);
|
|
expect(logs).toEqual(['plugin: webhook path missing for account "default"']);
|
|
expect(() => unregister()).not.toThrow();
|
|
});
|
|
|
|
it("replaces stale route on same path and keeps latest registration", () => {
|
|
const registry = createEmptyPluginRegistry();
|
|
const logs: string[] = [];
|
|
const firstHandler = vi.fn();
|
|
const secondHandler = vi.fn();
|
|
|
|
const unregisterFirst = registerPluginHttpRoute({
|
|
path: "/plugins/synology",
|
|
handler: firstHandler,
|
|
registry,
|
|
accountId: "default",
|
|
pluginId: "synology-chat",
|
|
log: (msg) => logs.push(msg),
|
|
});
|
|
|
|
const unregisterSecond = registerPluginHttpRoute({
|
|
path: "/plugins/synology",
|
|
handler: secondHandler,
|
|
registry,
|
|
accountId: "default",
|
|
pluginId: "synology-chat",
|
|
log: (msg) => logs.push(msg),
|
|
});
|
|
|
|
expect(registry.httpRoutes).toHaveLength(1);
|
|
expect(registry.httpRoutes[0]?.handler).toBe(secondHandler);
|
|
expect(logs).toContain(
|
|
'plugin: replacing stale webhook path /plugins/synology for account "default" (synology-chat)',
|
|
);
|
|
|
|
// Old unregister must not remove the replacement route.
|
|
unregisterFirst();
|
|
expect(registry.httpRoutes).toHaveLength(1);
|
|
expect(registry.httpRoutes[0]?.handler).toBe(secondHandler);
|
|
|
|
unregisterSecond();
|
|
expect(registry.httpRoutes).toHaveLength(0);
|
|
});
|
|
});
|