Files
openclaw/src/plugins/runtime.test.ts
2026-03-15 21:53:05 -07:00

71 lines
2.3 KiB
TypeScript

import { afterEach, describe, expect, it } from "vitest";
import { createEmptyPluginRegistry } from "./registry.js";
import {
pinActivePluginHttpRouteRegistry,
releasePinnedPluginHttpRouteRegistry,
resolveActivePluginHttpRouteRegistry,
setActivePluginRegistry,
} from "./runtime.js";
describe("plugin runtime route registry", () => {
afterEach(() => {
releasePinnedPluginHttpRouteRegistry();
setActivePluginRegistry(createEmptyPluginRegistry());
});
it("keeps the pinned route registry when the active plugin registry changes", () => {
const startupRegistry = createEmptyPluginRegistry();
const laterRegistry = createEmptyPluginRegistry();
setActivePluginRegistry(startupRegistry);
pinActivePluginHttpRouteRegistry(startupRegistry);
setActivePluginRegistry(laterRegistry);
expect(resolveActivePluginHttpRouteRegistry(laterRegistry)).toBe(startupRegistry);
});
it("falls back to the provided registry when the pinned route registry has no routes", () => {
const startupRegistry = createEmptyPluginRegistry();
const explicitRegistry = createEmptyPluginRegistry();
explicitRegistry.httpRoutes.push({
path: "/demo",
auth: "plugin",
match: "exact",
handler: () => true,
pluginId: "demo",
source: "test",
});
setActivePluginRegistry(startupRegistry);
pinActivePluginHttpRouteRegistry(startupRegistry);
expect(resolveActivePluginHttpRouteRegistry(explicitRegistry)).toBe(explicitRegistry);
});
it("prefers the pinned route registry when it already owns routes", () => {
const startupRegistry = createEmptyPluginRegistry();
const explicitRegistry = createEmptyPluginRegistry();
startupRegistry.httpRoutes.push({
path: "/bluebubbles-webhook",
auth: "plugin",
match: "exact",
handler: () => true,
pluginId: "bluebubbles",
source: "test",
});
explicitRegistry.httpRoutes.push({
path: "/plugins/diffs",
auth: "plugin",
match: "prefix",
handler: () => true,
pluginId: "diffs",
source: "test",
});
setActivePluginRegistry(startupRegistry);
pinActivePluginHttpRouteRegistry(startupRegistry);
expect(resolveActivePluginHttpRouteRegistry(explicitRegistry)).toBe(startupRegistry);
});
});