import { describe, expect, it } from "vitest"; import type { MoltbotConfig } from "../config/config.js"; import { buildSlackThreadingToolContext } from "./threading-tool-context.js"; const emptyCfg = {} as MoltbotConfig; describe("buildSlackThreadingToolContext", () => { it("uses top-level replyToMode by default", () => { const cfg = { channels: { slack: { replyToMode: "first" }, }, } as MoltbotConfig; const result = buildSlackThreadingToolContext({ cfg, accountId: null, context: { ChatType: "channel" }, }); expect(result.replyToMode).toBe("first"); }); it("uses chat-type replyToMode overrides for direct messages when configured", () => { const cfg = { channels: { slack: { replyToMode: "off", replyToModeByChatType: { direct: "all" }, }, }, } as MoltbotConfig; const result = buildSlackThreadingToolContext({ cfg, accountId: null, context: { ChatType: "direct" }, }); expect(result.replyToMode).toBe("all"); }); it("uses top-level replyToMode for channels when no channel override is set", () => { const cfg = { channels: { slack: { replyToMode: "off", replyToModeByChatType: { direct: "all" }, }, }, } as MoltbotConfig; const result = buildSlackThreadingToolContext({ cfg, accountId: null, context: { ChatType: "channel" }, }); expect(result.replyToMode).toBe("off"); }); it("falls back to top-level when no chat-type override is set", () => { const cfg = { channels: { slack: { replyToMode: "first", }, }, } as MoltbotConfig; const result = buildSlackThreadingToolContext({ cfg, accountId: null, context: { ChatType: "direct" }, }); expect(result.replyToMode).toBe("first"); }); it("uses legacy dm.replyToMode for direct messages when no chat-type override exists", () => { const cfg = { channels: { slack: { replyToMode: "off", dm: { replyToMode: "all" }, }, }, } as MoltbotConfig; const result = buildSlackThreadingToolContext({ cfg, accountId: null, context: { ChatType: "direct" }, }); expect(result.replyToMode).toBe("all"); }); it("uses all mode when ThreadLabel is present", () => { const cfg = { channels: { slack: { replyToMode: "off" }, }, } as MoltbotConfig; const result = buildSlackThreadingToolContext({ cfg, accountId: null, context: { ChatType: "channel", ThreadLabel: "some-thread" }, }); expect(result.replyToMode).toBe("all"); }); it("defaults to off when no replyToMode is configured", () => { const result = buildSlackThreadingToolContext({ cfg: emptyCfg, accountId: null, context: { ChatType: "direct" }, }); expect(result.replyToMode).toBe("off"); }); });