|
| 1 | +import type { IncomingMessage, ServerResponse } from "node:http"; |
1 | 2 | import { describe, expect, it, vi } from "vitest"; |
2 | 3 | import { createTestPluginApi } from "../../../../test/helpers/plugins/plugin-api.js"; |
3 | 4 | import type { OpenClawConfig, OpenClawPluginApi } from "../runtime-api.js"; |
4 | 5 | import { registerSlackPluginHttpRoutes } from "./plugin-routes.js"; |
| 6 | +import { registerSlackHttpHandler } from "./registry.js"; |
5 | 7 | |
6 | 8 | function createApi(config: OpenClawConfig, registerHttpRoute = vi.fn()): OpenClawPluginApi { |
7 | 9 | return createTestPluginApi({ |
@@ -59,4 +61,30 @@ describe("registerSlackPluginHttpRoutes", () => {
|
59 | 61 | .toSorted(); |
60 | 62 | expect(paths).toEqual(["/slack/events"]); |
61 | 63 | }); |
| 64 | + |
| 65 | +it("dispatches through the shared Slack HTTP handler registry", async () => { |
| 66 | +const routeHandler = vi.fn(); |
| 67 | +const unregister = registerSlackHttpHandler({ |
| 68 | +path: "/slack/events", |
| 69 | +handler: routeHandler, |
| 70 | +}); |
| 71 | +const registerHttpRoute = vi.fn(); |
| 72 | + |
| 73 | +try { |
| 74 | +registerSlackPluginHttpRoutes(createApi({}, registerHttpRoute)); |
| 75 | +const route = registerHttpRoute.mock.calls[0]?.[0] as |
| 76 | +| { |
| 77 | +handler: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>; |
| 78 | +} |
| 79 | +| undefined; |
| 80 | +const req = { url: "/slack/events" } as IncomingMessage; |
| 81 | +const res = {} as ServerResponse; |
| 82 | + |
| 83 | +await expect(route?.handler(req, res)).resolves.toBe(true); |
| 84 | + |
| 85 | +expect(routeHandler).toHaveBeenCalledWith(req, res); |
| 86 | +} finally { |
| 87 | +unregister(); |
| 88 | +} |
| 89 | +}); |
62 | 90 | }); |