From 808ec68e4110d7ae1e2faad0492e60b1855cfd07 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 14 Feb 2026 22:09:12 +0000 Subject: [PATCH] refactor(test): reuse slack slash harness --- src/slack/monitor/slash.policy.test.ts | 138 +++++++++---------------- 1 file changed, 49 insertions(+), 89 deletions(-) diff --git a/src/slack/monitor/slash.policy.test.ts b/src/slack/monitor/slash.policy.test.ts index 24ba9358b..8c861f9ac 100644 --- a/src/slack/monitor/slash.policy.test.ts +++ b/src/slack/monitor/slash.policy.test.ts @@ -82,6 +82,41 @@ function createHarness(overrides?: { return { commands, ctx, account, postEphemeral, channelId, channelName }; } +async function runSlashHandler(params: { + commands: Map Promise>; + command: Partial<{ + user_id: string; + user_name: string; + channel_id: string; + channel_name: string; + text: string; + trigger_id: string; + }> & + Pick<{ channel_id: string; channel_name: string }, "channel_id" | "channel_name">; +}): Promise<{ respond: ReturnType; ack: ReturnType }> { + const handler = [...params.commands.values()][0]; + if (!handler) { + throw new Error("Missing slash handler"); + } + + const respond = vi.fn().mockResolvedValue(undefined); + const ack = vi.fn().mockResolvedValue(undefined); + + await handler({ + command: { + user_id: "U1", + user_name: "Ada", + text: "hello", + trigger_id: "t1", + ...params.command, + }, + ack, + respond, + }); + + return { respond, ack }; +} + beforeEach(() => { dispatchMock.mockReset().mockResolvedValue({ counts: { final: 1, tool: 0, block: 0 } }); readAllowFromStoreMock.mockReset().mockResolvedValue([]); @@ -103,23 +138,12 @@ describe("slack slash commands channel policy", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + const { respond } = await runSlashHandler({ + commands, command: { - user_id: "U1", - user_name: "Ada", channel_id: channelId, channel_name: channelName, - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).toHaveBeenCalledTimes(1); @@ -137,23 +161,12 @@ describe("slack slash commands channel policy", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + const { respond } = await runSlashHandler({ + commands, command: { - user_id: "U1", - user_name: "Ada", channel_id: channelId, channel_name: channelName, - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).not.toHaveBeenCalled(); @@ -172,23 +185,12 @@ describe("slack slash commands channel policy", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + const { respond } = await runSlashHandler({ + commands, command: { - user_id: "U1", - user_name: "Ada", channel_id: channelId, channel_name: channelName, - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).not.toHaveBeenCalled(); @@ -209,23 +211,12 @@ describe("slack slash commands access groups", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + const { respond } = await runSlashHandler({ + commands, command: { - user_id: "U1", - user_name: "Ada", channel_id: channelId, channel_name: channelName, - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).not.toHaveBeenCalled(); @@ -244,23 +235,12 @@ describe("slack slash commands access groups", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + const { respond } = await runSlashHandler({ + commands, command: { - user_id: "U1", - user_name: "Ada", channel_id: "D123", channel_name: "notdirectmessage", - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).toHaveBeenCalledTimes(1); @@ -282,23 +262,14 @@ describe("slack slash commands access groups", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + await runSlashHandler({ + commands, command: { user_id: "U_ATTACKER", user_name: "Mallory", channel_id: "D999", channel_name: "directmessage", - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).toHaveBeenCalledTimes(1); @@ -317,23 +288,12 @@ describe("slack slash commands access groups", () => { }); registerSlackMonitorSlashCommands({ ctx: ctx as never, account: account as never }); - const handler = [...commands.values()][0]; - if (!handler) { - throw new Error("Missing slash handler"); - } - - const respond = vi.fn().mockResolvedValue(undefined); - await handler({ + const { respond } = await runSlashHandler({ + commands, command: { - user_id: "U1", - user_name: "Ada", channel_id: channelId, channel_name: channelName, - text: "hello", - trigger_id: "t1", }, - ack: vi.fn().mockResolvedValue(undefined), - respond, }); expect(dispatchMock).not.toHaveBeenCalled();