From 17b9f7a8e0645fb466b46430d3f92dcd9b2a2dd2 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 12 May 2026 02:52:20 +0100 Subject: [PATCH] test: guard discord reaction monitor mock calls --- extensions/discord/src/monitor.test.ts | 39 ++++++++++++++++++-------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/extensions/discord/src/monitor.test.ts b/extensions/discord/src/monitor.test.ts index e55fcea11d4..7c0d14487ab 100644 --- a/extensions/discord/src/monitor.test.ts +++ b/extensions/discord/src/monitor.test.ts @@ -944,6 +944,27 @@ vi.spyOn(routingModule, "resolveAgentRoute").mockImplementation(resolveAgentRout const { DiscordMessageListener, DiscordReactionListener, registerDiscordListener } = await import("./monitor/listeners.js"); +type MockWithCalls = { mock: { calls: unknown[][] } }; + +function firstMockCall(mock: MockWithCalls, label: string): unknown[] { + const call = mock.mock.calls.at(0); + if (!call) { + throw new Error(`expected ${label} call`); + } + return call; +} + +function firstMockArg(mock: MockWithCalls, label: string) { + return firstMockCall(mock, label)[0]; +} + +function requireRecord(value: unknown, label: string): Record { + if (typeof value !== "object" || value === null) { + throw new Error(`expected ${label} to be an object`); + } + return value as Record; +} + function makeReactionEvent(overrides?: { guildId?: string; channelId?: string; @@ -1079,12 +1100,14 @@ describe("discord DM reaction handling", () => { await listener.handle(data, client); expect(enqueueSystemEventSpy, testCase.name).toHaveBeenCalledOnce(); - const [text, opts] = enqueueSystemEventSpy.mock.calls[0]; + const [text, opts] = firstMockCall(enqueueSystemEventSpy, "enqueueSystemEvent"); expect(text, testCase.name).toContain("Discord reaction added"); expect(text, testCase.name).toContain("👍"); expect(text, testCase.name).toContain("dm"); expect(text, testCase.name).not.toContain("undefined"); - expect(opts.sessionKey, testCase.name).toBe("discord:acc-1:dm:user-1"); + expect(requireRecord(opts, "system event options").sessionKey, testCase.name).toBe( + "discord:acc-1:dm:user-1", + ); } }); @@ -1222,7 +1245,7 @@ describe("discord DM reaction handling", () => { expect(getReactionClientFetchChannelMock(client)).toHaveBeenCalled(); expect(enqueueSystemEventSpy).toHaveBeenCalledOnce(); - const [text] = enqueueSystemEventSpy.mock.calls[0]; + const text = firstMockArg(enqueueSystemEventSpy, "enqueueSystemEvent"); expect(text).toContain("Discord reaction added"); }); @@ -1237,12 +1260,9 @@ describe("discord DM reaction handling", () => { await listener.handle(data, client); expect(resolveAgentRouteMock).toHaveBeenCalledOnce(); - const routeArgs = (resolveAgentRouteMock.mock.calls[0]?.[0] ?? {}) as { + const routeArgs = firstMockArg(resolveAgentRouteMock, "resolveAgentRoute") as { peer?: unknown; }; - if (!routeArgs) { - throw new Error("expected route arguments"); - } expect(routeArgs.peer).toEqual({ kind: "direct", id: "user-42" }); }); @@ -1257,12 +1277,9 @@ describe("discord DM reaction handling", () => { await listener.handle(data, client); expect(resolveAgentRouteMock).toHaveBeenCalledOnce(); - const routeArgs = (resolveAgentRouteMock.mock.calls[0]?.[0] ?? {}) as { + const routeArgs = firstMockArg(resolveAgentRouteMock, "resolveAgentRoute") as { peer?: unknown; }; - if (!routeArgs) { - throw new Error("expected route arguments"); - } expect(routeArgs.peer).toEqual({ kind: "group", id: "channel-1" }); }); });