import { describe, expect, it } from "vitest"; import type { MSTeamsConfig } from "../config/types.js"; import { resolveMSTeamsReplyPolicy, resolveMSTeamsRouteConfig, } from "./policy.js"; describe("msteams policy", () => { describe("resolveMSTeamsRouteConfig", () => { it("returns team and channel config when present", () => { const cfg: MSTeamsConfig = { teams: { team123: { requireMention: false, channels: { chan456: { requireMention: true }, }, }, }, }; const res = resolveMSTeamsRouteConfig({ cfg, teamId: "team123", conversationId: "chan456", }); expect(res.teamConfig?.requireMention).toBe(false); expect(res.channelConfig?.requireMention).toBe(true); }); it("returns undefined configs when teamId is missing", () => { const cfg: MSTeamsConfig = { teams: { team123: { requireMention: false } }, }; const res = resolveMSTeamsRouteConfig({ cfg, teamId: undefined, conversationId: "chan", }); expect(res.teamConfig).toBeUndefined(); expect(res.channelConfig).toBeUndefined(); }); }); describe("resolveMSTeamsReplyPolicy", () => { it("forces thread replies for direct messages", () => { const policy = resolveMSTeamsReplyPolicy({ isDirectMessage: true, globalConfig: { replyStyle: "top-level", requireMention: false }, }); expect(policy).toEqual({ requireMention: false, replyStyle: "thread" }); }); it("defaults to requireMention=true and replyStyle=thread", () => { const policy = resolveMSTeamsReplyPolicy({ isDirectMessage: false, globalConfig: {}, }); expect(policy).toEqual({ requireMention: true, replyStyle: "thread" }); }); it("defaults replyStyle to top-level when requireMention=false", () => { const policy = resolveMSTeamsReplyPolicy({ isDirectMessage: false, globalConfig: { requireMention: false }, }); expect(policy).toEqual({ requireMention: false, replyStyle: "top-level", }); }); it("prefers channel overrides over team and global defaults", () => { const policy = resolveMSTeamsReplyPolicy({ isDirectMessage: false, globalConfig: { requireMention: true }, teamConfig: { requireMention: true }, channelConfig: { requireMention: false }, }); // requireMention from channel -> false, and replyStyle defaults from requireMention -> top-level expect(policy).toEqual({ requireMention: false, replyStyle: "top-level", }); }); it("uses explicit replyStyle even when requireMention defaults would differ", () => { const policy = resolveMSTeamsReplyPolicy({ isDirectMessage: false, globalConfig: { requireMention: false, replyStyle: "thread" }, }); expect(policy).toEqual({ requireMention: false, replyStyle: "thread" }); }); }); });