import { describe, expect, it } from "vitest"; import { resolveDiscordGroupRequireMention, resolveDiscordGroupToolPolicy, } from "./group-policy.js"; describe("discord group policy", () => { it("prefers channel policy, then guild policy, with sender-specific overrides", () => { const discordCfg = { channels: { discord: { token: "discord-test", guilds: { guild1: { requireMention: false, tools: { allow: ["message.guild"] }, toolsBySender: { "id:user:guild-admin": { allow: ["sessions.list"] }, }, channels: { "123": { requireMention: true, tools: { allow: ["message.channel"] }, toolsBySender: { "id:user:channel-admin": { deny: ["exec"] }, }, }, }, }, }, }, }, // oxlint-disable-next-line typescript/no-explicit-any } as any; expect( resolveDiscordGroupRequireMention({ cfg: discordCfg, groupSpace: "guild1", groupId: "123" }), ).toBe(true); expect( resolveDiscordGroupRequireMention({ cfg: discordCfg, groupSpace: "guild1", groupId: "missing", }), ).toBe(false); expect( resolveDiscordGroupToolPolicy({ cfg: discordCfg, groupSpace: "guild1", groupId: "123", senderId: "user:channel-admin", }), ).toEqual({ deny: ["exec"] }); expect( resolveDiscordGroupToolPolicy({ cfg: discordCfg, groupSpace: "guild1", groupId: "123", senderId: "user:someone", }), ).toEqual({ allow: ["message.channel"] }); expect( resolveDiscordGroupToolPolicy({ cfg: discordCfg, groupSpace: "guild1", groupId: "missing", senderId: "user:guild-admin", }), ).toEqual({ allow: ["sessions.list"] }); expect( resolveDiscordGroupToolPolicy({ cfg: discordCfg, groupSpace: "guild1", groupId: "missing", senderId: "user:someone", }), ).toEqual({ allow: ["message.guild"] }); }); });