test: guard slack routing mock calls · openclaw/openclaw@68ac67d
steipete
·
2026-05-12
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -13,6 +13,16 @@ function createApi(config: OpenClawConfig, registerHttpRoute = vi.fn()): OpenCla
|
13 | 13 | }); |
14 | 14 | } |
15 | 15 | |
| 16 | +function registeredRouteAt(registerHttpRoute: ReturnType<typeof vi.fn>, index: number) { |
| 17 | +const call = registerHttpRoute.mock.calls[index]; |
| 18 | +if (!call) { |
| 19 | +throw new Error(`expected registered HTTP route ${index}`); |
| 20 | +} |
| 21 | +return call[0] as { |
| 22 | +handler: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>; |
| 23 | +}; |
| 24 | +} |
| 25 | + |
16 | 26 | describe("registerSlackPluginHttpRoutes", () => { |
17 | 27 | it("registers account webhook paths without resolving unresolved token refs", () => { |
18 | 28 | const registerHttpRoute = vi.fn(); |
@@ -72,15 +82,11 @@ describe("registerSlackPluginHttpRoutes", () => {
|
72 | 82 | |
73 | 83 | try { |
74 | 84 | registerSlackPluginHttpRoutes(createApi({}, registerHttpRoute)); |
75 | | -const route = registerHttpRoute.mock.calls[0]?.[0] as |
76 | | -| { |
77 | | -handler: (req: IncomingMessage, res: ServerResponse) => Promise<boolean>; |
78 | | -} |
79 | | -| undefined; |
| 85 | +const route = registeredRouteAt(registerHttpRoute, 0); |
80 | 86 | const req = { url: "/slack/events" } as IncomingMessage; |
81 | 87 | const res = {} as ServerResponse; |
82 | 88 | |
83 | | -await expect(route?.handler(req, res)).resolves.toBe(true); |
| 89 | +await expect(route.handler(req, res)).resolves.toBe(true); |
84 | 90 | |
85 | 91 | expect(routeHandler).toHaveBeenCalledWith(req, res); |
86 | 92 | } finally { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -59,6 +59,14 @@ function buildChannelMessage(overrides?: Partial<SlackMessageEvent>): SlackMessa
|
59 | 59 | } as SlackMessageEvent; |
60 | 60 | } |
61 | 61 | |
| 62 | +function firstBindingRouteRequest() { |
| 63 | +const [call] = resolveConfiguredBindingRouteMock.mock.calls; |
| 64 | +if (!call) { |
| 65 | +throw new Error("expected configured binding route call"); |
| 66 | +} |
| 67 | +return call[0]; |
| 68 | +} |
| 69 | + |
62 | 70 | describe("thread-level session keys", () => { |
63 | 71 | beforeEach(() => { |
64 | 72 | resolveConfiguredBindingRouteMock.mockReset(); |
@@ -116,7 +124,7 @@ describe("thread-level session keys", () => {
|
116 | 124 | }); |
117 | 125 | |
118 | 126 | expect(resolveConfiguredBindingRouteMock).toHaveBeenCalledTimes(1); |
119 | | -const [bindingRouteRequest] = resolveConfiguredBindingRouteMock.mock.calls[0]; |
| 127 | +const bindingRouteRequest = firstBindingRouteRequest(); |
120 | 128 | expect(bindingRouteRequest).toEqual({ |
121 | 129 | cfg: ctx.cfg, |
122 | 130 | route: { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -77,7 +77,8 @@ describe("deliverReplies identity passthrough", () => {
|
77 | 77 | await deliverReplies(baseParams()); |
78 | 78 | |
79 | 79 | expect(sendMock).toHaveBeenCalledOnce(); |
80 | | -expect(sendMock.mock.calls[0][2]).not.toHaveProperty("identity"); |
| 80 | +const [, , options] = requireSendCall(); |
| 81 | +expect(options).not.toHaveProperty("identity"); |
81 | 82 | }); |
82 | 83 | |
83 | 84 | it("delivers block-only replies through to sendMessageSlack", async () => { |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。