import { describe, expect, it } from "vitest"; import { resolveDiscordDmCommandAccess } from "./dm-command-auth.js"; describe("resolveDiscordDmCommandAccess", () => { const sender = { id: "123", name: "alice", tag: "alice#0001", }; async function resolveOpenDmAccess(configuredAllowFrom: string[]) { return await resolveDiscordDmCommandAccess({ accountId: "default", dmPolicy: "open", configuredAllowFrom, sender, allowNameMatching: false, useAccessGroups: true, readStoreAllowFrom: async () => [], }); } it("allows open DMs and keeps command auth enabled without allowlist entries", async () => { const result = await resolveOpenDmAccess([]); expect(result.decision).toBe("allow"); expect(result.commandAuthorized).toBe(true); }); it("marks command auth true when sender is allowlisted", async () => { const result = await resolveOpenDmAccess(["discord:123"]); expect(result.decision).toBe("allow"); expect(result.commandAuthorized).toBe(true); }); it("keeps command auth enabled for open DMs when configured allowlist does not match", async () => { const result = await resolveDiscordDmCommandAccess({ accountId: "default", dmPolicy: "open", configuredAllowFrom: ["discord:999"], sender, allowNameMatching: false, useAccessGroups: true, readStoreAllowFrom: async () => [], }); expect(result.decision).toBe("allow"); expect(result.allowMatch.allowed).toBe(false); expect(result.commandAuthorized).toBe(true); }); it("returns pairing decision and unauthorized command auth for unknown senders", async () => { const result = await resolveDiscordDmCommandAccess({ accountId: "default", dmPolicy: "pairing", configuredAllowFrom: ["discord:456"], sender, allowNameMatching: false, useAccessGroups: true, readStoreAllowFrom: async () => [], }); expect(result.decision).toBe("pairing"); expect(result.commandAuthorized).toBe(false); }); it("authorizes sender from pairing-store allowlist entries", async () => { const result = await resolveDiscordDmCommandAccess({ accountId: "default", dmPolicy: "pairing", configuredAllowFrom: [], sender, allowNameMatching: false, useAccessGroups: true, readStoreAllowFrom: async () => ["discord:123"], }); expect(result.decision).toBe("allow"); expect(result.commandAuthorized).toBe(true); }); it("keeps open DM command auth true when access groups are disabled", async () => { const result = await resolveDiscordDmCommandAccess({ accountId: "default", dmPolicy: "open", configuredAllowFrom: [], sender, allowNameMatching: false, useAccessGroups: false, readStoreAllowFrom: async () => [], }); expect(result.decision).toBe("allow"); expect(result.commandAuthorized).toBe(true); }); });