From e2c68cb1695ae0e95a5e76a17fa3b8bd6f561f6b Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 14:44:15 +0000 Subject: [PATCH] refactor(test): share plugin hook registry helper --- src/plugins/hooks.test-helpers.ts | 25 ++++++++++++++++++ src/plugins/wired-hooks-gateway.test.ts | 32 +++-------------------- src/plugins/wired-hooks-message.test.ts | 34 ++++--------------------- src/plugins/wired-hooks-session.test.ts | 32 +++-------------------- 4 files changed, 38 insertions(+), 85 deletions(-) create mode 100644 src/plugins/hooks.test-helpers.ts diff --git a/src/plugins/hooks.test-helpers.ts b/src/plugins/hooks.test-helpers.ts new file mode 100644 index 0000000000..d1600aca13 --- /dev/null +++ b/src/plugins/hooks.test-helpers.ts @@ -0,0 +1,25 @@ +import type { PluginRegistry } from "./registry.js"; + +export function createMockPluginRegistry( + hooks: Array<{ hookName: string; handler: (...args: unknown[]) => unknown }>, +): PluginRegistry { + return { + hooks: hooks as never[], + typedHooks: hooks.map((h) => ({ + pluginId: "test-plugin", + hookName: h.hookName, + handler: h.handler, + priority: 0, + source: "test", + })), + tools: [], + httpHandlers: [], + httpRoutes: [], + channelRegistrations: [], + gatewayHandlers: {}, + cliRegistrars: [], + services: [], + providers: [], + commands: [], + } as unknown as PluginRegistry; +} diff --git a/src/plugins/wired-hooks-gateway.test.ts b/src/plugins/wired-hooks-gateway.test.ts index 0d2d101aac..663fe0e1f0 100644 --- a/src/plugins/wired-hooks-gateway.test.ts +++ b/src/plugins/wired-hooks-gateway.test.ts @@ -6,37 +6,13 @@ * and validating the integration pattern. */ import { describe, expect, it, vi } from "vitest"; -import type { PluginRegistry } from "./registry.js"; import { createHookRunner } from "./hooks.js"; - -function createMockRegistry( - hooks: Array<{ hookName: string; handler: (...args: unknown[]) => unknown }>, -): PluginRegistry { - return { - hooks: hooks as never[], - typedHooks: hooks.map((h) => ({ - pluginId: "test-plugin", - hookName: h.hookName, - handler: h.handler, - priority: 0, - source: "test", - })), - tools: [], - httpHandlers: [], - httpRoutes: [], - channelRegistrations: [], - gatewayHandlers: {}, - cliRegistrars: [], - services: [], - providers: [], - commands: [], - } as unknown as PluginRegistry; -} +import { createMockPluginRegistry } from "./hooks.test-helpers.js"; describe("gateway hook runner methods", () => { it("runGatewayStart invokes registered gateway_start hooks", async () => { const handler = vi.fn(); - const registry = createMockRegistry([{ hookName: "gateway_start", handler }]); + const registry = createMockPluginRegistry([{ hookName: "gateway_start", handler }]); const runner = createHookRunner(registry); await runner.runGatewayStart({ port: 18789 }, { port: 18789 }); @@ -46,7 +22,7 @@ describe("gateway hook runner methods", () => { it("runGatewayStop invokes registered gateway_stop hooks", async () => { const handler = vi.fn(); - const registry = createMockRegistry([{ hookName: "gateway_stop", handler }]); + const registry = createMockPluginRegistry([{ hookName: "gateway_stop", handler }]); const runner = createHookRunner(registry); await runner.runGatewayStop({ reason: "test shutdown" }, { port: 18789 }); @@ -55,7 +31,7 @@ describe("gateway hook runner methods", () => { }); it("hasHooks returns true for registered gateway hooks", () => { - const registry = createMockRegistry([{ hookName: "gateway_start", handler: vi.fn() }]); + const registry = createMockPluginRegistry([{ hookName: "gateway_start", handler: vi.fn() }]); const runner = createHookRunner(registry); expect(runner.hasHooks("gateway_start")).toBe(true); diff --git a/src/plugins/wired-hooks-message.test.ts b/src/plugins/wired-hooks-message.test.ts index 3f8b5e6829..a41c601385 100644 --- a/src/plugins/wired-hooks-message.test.ts +++ b/src/plugins/wired-hooks-message.test.ts @@ -4,37 +4,13 @@ * Tests the hook runner methods directly since outbound delivery is deeply integrated. */ import { describe, expect, it, vi } from "vitest"; -import type { PluginRegistry } from "./registry.js"; import { createHookRunner } from "./hooks.js"; - -function createMockRegistry( - hooks: Array<{ hookName: string; handler: (...args: unknown[]) => unknown }>, -): PluginRegistry { - return { - hooks: hooks as never[], - typedHooks: hooks.map((h) => ({ - pluginId: "test-plugin", - hookName: h.hookName, - handler: h.handler, - priority: 0, - source: "test", - })), - tools: [], - httpHandlers: [], - httpRoutes: [], - channelRegistrations: [], - gatewayHandlers: {}, - cliRegistrars: [], - services: [], - providers: [], - commands: [], - } as unknown as PluginRegistry; -} +import { createMockPluginRegistry } from "./hooks.test-helpers.js"; describe("message_sending hook runner", () => { it("runMessageSending invokes registered hooks and returns modified content", async () => { const handler = vi.fn().mockReturnValue({ content: "modified content" }); - const registry = createMockRegistry([{ hookName: "message_sending", handler }]); + const registry = createMockPluginRegistry([{ hookName: "message_sending", handler }]); const runner = createHookRunner(registry); const result = await runner.runMessageSending( @@ -51,7 +27,7 @@ describe("message_sending hook runner", () => { it("runMessageSending can cancel message delivery", async () => { const handler = vi.fn().mockReturnValue({ cancel: true }); - const registry = createMockRegistry([{ hookName: "message_sending", handler }]); + const registry = createMockPluginRegistry([{ hookName: "message_sending", handler }]); const runner = createHookRunner(registry); const result = await runner.runMessageSending( @@ -66,7 +42,7 @@ describe("message_sending hook runner", () => { describe("message_sent hook runner", () => { it("runMessageSent invokes registered hooks with success=true", async () => { const handler = vi.fn(); - const registry = createMockRegistry([{ hookName: "message_sent", handler }]); + const registry = createMockPluginRegistry([{ hookName: "message_sent", handler }]); const runner = createHookRunner(registry); await runner.runMessageSent( @@ -82,7 +58,7 @@ describe("message_sent hook runner", () => { it("runMessageSent invokes registered hooks with error on failure", async () => { const handler = vi.fn(); - const registry = createMockRegistry([{ hookName: "message_sent", handler }]); + const registry = createMockPluginRegistry([{ hookName: "message_sent", handler }]); const runner = createHookRunner(registry); await runner.runMessageSent( diff --git a/src/plugins/wired-hooks-session.test.ts b/src/plugins/wired-hooks-session.test.ts index d44ce45c9f..90737a36bf 100644 --- a/src/plugins/wired-hooks-session.test.ts +++ b/src/plugins/wired-hooks-session.test.ts @@ -4,37 +4,13 @@ * Tests the hook runner methods directly since session init is deeply integrated. */ import { describe, expect, it, vi } from "vitest"; -import type { PluginRegistry } from "./registry.js"; import { createHookRunner } from "./hooks.js"; - -function createMockRegistry( - hooks: Array<{ hookName: string; handler: (...args: unknown[]) => unknown }>, -): PluginRegistry { - return { - hooks: hooks as never[], - typedHooks: hooks.map((h) => ({ - pluginId: "test-plugin", - hookName: h.hookName, - handler: h.handler, - priority: 0, - source: "test", - })), - tools: [], - httpHandlers: [], - httpRoutes: [], - channelRegistrations: [], - gatewayHandlers: {}, - cliRegistrars: [], - services: [], - providers: [], - commands: [], - } as unknown as PluginRegistry; -} +import { createMockPluginRegistry } from "./hooks.test-helpers.js"; describe("session hook runner methods", () => { it("runSessionStart invokes registered session_start hooks", async () => { const handler = vi.fn(); - const registry = createMockRegistry([{ hookName: "session_start", handler }]); + const registry = createMockPluginRegistry([{ hookName: "session_start", handler }]); const runner = createHookRunner(registry); await runner.runSessionStart( @@ -50,7 +26,7 @@ describe("session hook runner methods", () => { it("runSessionEnd invokes registered session_end hooks", async () => { const handler = vi.fn(); - const registry = createMockRegistry([{ hookName: "session_end", handler }]); + const registry = createMockPluginRegistry([{ hookName: "session_end", handler }]); const runner = createHookRunner(registry); await runner.runSessionEnd( @@ -65,7 +41,7 @@ describe("session hook runner methods", () => { }); it("hasHooks returns true for registered session hooks", () => { - const registry = createMockRegistry([{ hookName: "session_start", handler: vi.fn() }]); + const registry = createMockPluginRegistry([{ hookName: "session_start", handler: vi.fn() }]); const runner = createHookRunner(registry); expect(runner.hasHooks("session_start")).toBe(true);