import type { App } from "@slack/bolt"; import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../../config/config.js"; import type { RuntimeEnv } from "../../runtime.js"; import { createSlackMonitorContext } from "./context.js"; function createTestContext() { return createSlackMonitorContext({ cfg: { channels: { slack: { enabled: true } }, session: { dmScope: "main" }, } as OpenClawConfig, accountId: "default", botToken: "xoxb-test", app: { client: {} } as App, runtime: {} as RuntimeEnv, botUserId: "U_BOT", teamId: "T_EXPECTED", apiAppId: "A_EXPECTED", historyLimit: 0, sessionScope: "per-sender", mainKey: "main", dmEnabled: true, dmPolicy: "open", allowFrom: [], allowNameMatching: false, groupDmEnabled: false, groupDmChannels: [], defaultRequireMention: true, groupPolicy: "allowlist", useAccessGroups: true, reactionMode: "off", reactionAllowlist: [], replyToMode: "off", threadHistoryScope: "thread", threadInheritParent: false, slashCommand: { enabled: true, name: "openclaw", ephemeral: true, sessionPrefix: "slack:slash", }, textLimit: 4000, typingReaction: "", ackReactionScope: "group-mentions", mediaMaxBytes: 20 * 1024 * 1024, removeAckAfterReply: false, }); } describe("createSlackMonitorContext shouldDropMismatchedSlackEvent", () => { it("drops mismatched top-level app/team identifiers", () => { const ctx = createTestContext(); expect( ctx.shouldDropMismatchedSlackEvent({ api_app_id: "A_WRONG", team_id: "T_EXPECTED", }), ).toBe(true); expect( ctx.shouldDropMismatchedSlackEvent({ api_app_id: "A_EXPECTED", team_id: "T_WRONG", }), ).toBe(true); }); it("drops mismatched nested team.id payloads used by interaction bodies", () => { const ctx = createTestContext(); expect( ctx.shouldDropMismatchedSlackEvent({ api_app_id: "A_EXPECTED", team: { id: "T_WRONG" }, }), ).toBe(true); expect( ctx.shouldDropMismatchedSlackEvent({ api_app_id: "A_EXPECTED", team: { id: "T_EXPECTED" }, }), ).toBe(false); }); });