From f5cbf9358aaef2ce491debf64d801f0fdebb5dce Mon Sep 17 00:00:00 2001 From: Shakker Date: Sun, 10 May 2026 17:07:26 +0100 Subject: [PATCH] test: tighten synology chat webhook assertions --- .../synology-chat/src/webhook-handler.test.ts | 92 ++++++++++--------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/extensions/synology-chat/src/webhook-handler.test.ts b/extensions/synology-chat/src/webhook-handler.test.ts index 07330148fe9..2fcdebc1164 100644 --- a/extensions/synology-chat/src/webhook-handler.test.ts +++ b/extensions/synology-chat/src/webhook-handler.test.ts @@ -26,6 +26,26 @@ function countMatching(items: readonly T[], predicate: (item: T) => boolean): return count; } +function deliveredMessage(deliver: ReturnType) { + expect(deliver).toHaveBeenCalledTimes(1); + const message = deliver.mock.calls[0]?.[0] as + | { + accountId?: unknown; + body?: unknown; + chatType?: unknown; + chatUserId?: unknown; + commandAuthorized?: unknown; + from?: unknown; + provider?: unknown; + senderName?: unknown; + } + | undefined; + if (!message) { + throw new Error("expected delivered Synology Chat message"); + } + return message; +} + function makeAccount( overrides: Partial = {}, ): ResolvedSynologyChatAccount { @@ -420,14 +440,14 @@ describe("createWebhookHandler", () => { await handler(req, res); expect(res._status).toBe(204); - expect(deliver).toHaveBeenCalledWith( - expect.objectContaining({ - body: "Hello from json", - from: "123", - senderName: "json-user", - commandAuthorized: true, - }), - ); + const message = deliveredMessage(deliver); + expect(message.body).toBe("Hello from json"); + expect(message.from).toBe("123"); + expect(message.senderName).toBe("json-user"); + expect(message.provider).toBe("synology-chat"); + expect(message.chatType).toBe("direct"); + expect(message.commandAuthorized).toBe(true); + expect(message.chatUserId).toBe("123"); }); it("accepts token from query when body token is absent", async () => { @@ -527,33 +547,28 @@ describe("createWebhookHandler", () => { expect(res._status).toBe(204); // deliver should have been called with the stripped text - expect(deliver).toHaveBeenCalledWith(expect.objectContaining({ body: "Hello there" })); + expect(deliveredMessage(deliver).body).toBe("Hello there"); }); it("responds 204 immediately and delivers async", async () => { const { deliver, res } = await runValidReply({ accountIdSuffix: "async-test" }); expect(res._body).toBe(""); - expect(deliver).toHaveBeenCalledWith( - expect.objectContaining({ - body: "Hello bot", - from: "123", - senderName: "testuser", - provider: "synology-chat", - chatType: "direct", - commandAuthorized: true, - }), - ); + const message = deliveredMessage(deliver); + expect(message.body).toBe("Hello bot"); + expect(message.from).toBe("123"); + expect(message.senderName).toBe("testuser"); + expect(message.provider).toBe("synology-chat"); + expect(message.chatType).toBe("direct"); + expect(message.commandAuthorized).toBe(true); + expect(message.chatUserId).toBe("123"); }); it("keeps replies bound to payload.user_id by default", async () => { const { deliver } = await runValidReply({ accountIdSuffix: "stable-id-test" }); expect(resolveLegacyWebhookNameToChatUserId).not.toHaveBeenCalled(); - expect(deliver).toHaveBeenCalledWith( - expect.objectContaining({ - from: "123", - chatUserId: "123", - }), - ); + const message = deliveredMessage(deliver); + expect(message.from).toBe("123"); + expect(message.chatUserId).toBe("123"); expectBotReplySentTo("123"); }); @@ -562,12 +577,9 @@ describe("createWebhookHandler", () => { resolvedChatUserId: 456, accountIdSuffix: "dangerous-name-match-test", }); - expect(deliver).toHaveBeenCalledWith( - expect.objectContaining({ - from: "123", - chatUserId: "456", - }), - ); + const message = deliveredMessage(deliver); + expect(message.from).toBe("123"); + expect(message.chatUserId).toBe("456"); expectBotReplySentTo("456"); }); @@ -578,12 +590,9 @@ describe("createWebhookHandler", () => { expect(log.warn).toHaveBeenCalledWith( 'Could not resolve Chat API user_id for "testuser" — falling back to webhook user_id 123. Reply delivery may fail.', ); - expect(deliver).toHaveBeenCalledWith( - expect.objectContaining({ - from: "123", - chatUserId: "123", - }), - ); + const message = deliveredMessage(deliver); + expect(message.from).toBe("123"); + expect(message.chatUserId).toBe("123"); expectBotReplySentTo("123"); }); @@ -606,11 +615,8 @@ describe("createWebhookHandler", () => { const res = makeRes(); await handler(req, res); - expect(deliver).toHaveBeenCalledWith( - expect.objectContaining({ - body: expect.stringContaining("[FILTERED]"), - commandAuthorized: true, - }), - ); + const message = deliveredMessage(deliver); + expect(String(message.body)).toContain("[FILTERED]"); + expect(message.commandAuthorized).toBe(true); }); });