From 0e68789ebf2f3edeb067ee4c67f98a77a761e435 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 22:57:55 +0000 Subject: [PATCH] test(discord): dedupe guild permission route mocks --- src/discord/send.permissions.authz.test.ts | 147 +++++++++++---------- 1 file changed, 74 insertions(+), 73 deletions(-) diff --git a/src/discord/send.permissions.authz.test.ts b/src/discord/send.permissions.authz.test.ts index e57f9f469..5ca8807a7 100644 --- a/src/discord/send.permissions.authz.test.ts +++ b/src/discord/send.permissions.authz.test.ts @@ -15,6 +15,34 @@ vi.mock("./client.js", () => ({ resolveDiscordRest: () => mockRest as unknown as RequestClient, })); +type RouteMockParams = { + guildId?: string; + userId?: string; + roles: Array<{ id: string; permissions: string | bigint }>; + memberRoles: string[]; +}; + +function mockGuildMemberRoutes(params: RouteMockParams): void { + const guildId = params.guildId ?? "guild-1"; + const userId = params.userId ?? "user-1"; + mockRest.get.mockImplementation(async (route: string) => { + if (route === Routes.guild(guildId)) { + return { + id: guildId, + roles: params.roles.map((role) => ({ + id: role.id, + permissions: + typeof role.permissions === "bigint" ? role.permissions.toString() : role.permissions, + })), + }; + } + if (route === Routes.guildMember(guildId, userId)) { + return { id: userId, roles: params.memberRoles }; + } + throw new Error(`Unexpected route: ${route}`); + }); +} + describe("discord guild permission authorization", () => { describe("fetchMemberGuildPermissionsDiscord", () => { it("returns null when user is not a guild member", async () => { @@ -25,23 +53,12 @@ describe("discord guild permission authorization", () => { }); it("includes @everyone and member roles in computed permissions", async () => { - mockRest.get.mockImplementation(async (route: string) => { - if (route === Routes.guild("guild-1")) { - return { - id: "guild-1", - roles: [ - { id: "guild-1", permissions: PermissionFlagsBits.ViewChannel.toString() }, - { id: "role-mod", permissions: PermissionFlagsBits.KickMembers.toString() }, - ], - }; - } - if (route === Routes.guildMember("guild-1", "user-1")) { - return { - id: "user-1", - roles: ["role-mod"], - }; - } - throw new Error(`Unexpected route: ${route}`); + mockGuildMemberRoutes({ + roles: [ + { id: "guild-1", permissions: PermissionFlagsBits.ViewChannel }, + { id: "role-mod", permissions: PermissionFlagsBits.KickMembers }, + ], + memberRoles: ["role-mod"], }); const result = await fetchMemberGuildPermissionsDiscord("guild-1", "user-1"); @@ -57,20 +74,12 @@ describe("discord guild permission authorization", () => { describe("hasAnyGuildPermissionDiscord", () => { it("returns true when user has required permission", async () => { - mockRest.get.mockImplementation(async (route: string) => { - if (route === Routes.guild("guild-1")) { - return { - id: "guild-1", - roles: [ - { id: "guild-1", permissions: "0" }, - { id: "role-mod", permissions: PermissionFlagsBits.KickMembers.toString() }, - ], - }; - } - if (route === Routes.guildMember("guild-1", "user-1")) { - return { id: "user-1", roles: ["role-mod"] }; - } - throw new Error(`Unexpected route: ${route}`); + mockGuildMemberRoutes({ + roles: [ + { id: "guild-1", permissions: "0" }, + { id: "role-mod", permissions: PermissionFlagsBits.KickMembers }, + ], + memberRoles: ["role-mod"], }); const result = await hasAnyGuildPermissionDiscord("guild-1", "user-1", [ @@ -80,23 +89,15 @@ describe("discord guild permission authorization", () => { }); it("returns true when user has ADMINISTRATOR", async () => { - mockRest.get.mockImplementation(async (route: string) => { - if (route === Routes.guild("guild-1")) { - return { - id: "guild-1", - roles: [ - { id: "guild-1", permissions: "0" }, - { - id: "role-admin", - permissions: PermissionFlagsBits.Administrator.toString(), - }, - ], - }; - } - if (route === Routes.guildMember("guild-1", "user-1")) { - return { id: "user-1", roles: ["role-admin"] }; - } - throw new Error(`Unexpected route: ${route}`); + mockGuildMemberRoutes({ + roles: [ + { id: "guild-1", permissions: "0" }, + { + id: "role-admin", + permissions: PermissionFlagsBits.Administrator, + }, + ], + memberRoles: ["role-admin"], }); const result = await hasAnyGuildPermissionDiscord("guild-1", "user-1", [ @@ -106,17 +107,9 @@ describe("discord guild permission authorization", () => { }); it("returns false when user lacks all required permissions", async () => { - mockRest.get.mockImplementation(async (route: string) => { - if (route === Routes.guild("guild-1")) { - return { - id: "guild-1", - roles: [{ id: "guild-1", permissions: PermissionFlagsBits.ViewChannel.toString() }], - }; - } - if (route === Routes.guildMember("guild-1", "user-1")) { - return { id: "user-1", roles: [] }; - } - throw new Error(`Unexpected route: ${route}`); + mockGuildMemberRoutes({ + roles: [{ id: "guild-1", permissions: PermissionFlagsBits.ViewChannel }], + memberRoles: [], }); const result = await hasAnyGuildPermissionDiscord("guild-1", "user-1", [ @@ -129,20 +122,12 @@ describe("discord guild permission authorization", () => { describe("hasAllGuildPermissionsDiscord", () => { it("returns false when user has only one of multiple required permissions", async () => { - mockRest.get.mockImplementation(async (route: string) => { - if (route === Routes.guild("guild-1")) { - return { - id: "guild-1", - roles: [ - { id: "guild-1", permissions: "0" }, - { id: "role-mod", permissions: PermissionFlagsBits.KickMembers.toString() }, - ], - }; - } - if (route === Routes.guildMember("guild-1", "user-1")) { - return { id: "user-1", roles: ["role-mod"] }; - } - throw new Error(`Unexpected route: ${route}`); + mockGuildMemberRoutes({ + roles: [ + { id: "guild-1", permissions: "0" }, + { id: "role-mod", permissions: PermissionFlagsBits.KickMembers }, + ], + memberRoles: ["role-mod"], }); const result = await hasAllGuildPermissionsDiscord("guild-1", "user-1", [ @@ -151,5 +136,21 @@ describe("discord guild permission authorization", () => { ]); expect(result).toBe(false); }); + + it("returns true for hasAll checks when user has ADMINISTRATOR", async () => { + mockGuildMemberRoutes({ + roles: [ + { id: "guild-1", permissions: "0" }, + { id: "role-admin", permissions: PermissionFlagsBits.Administrator }, + ], + memberRoles: ["role-admin"], + }); + + const result = await hasAllGuildPermissionsDiscord("guild-1", "user-1", [ + PermissionFlagsBits.KickMembers, + PermissionFlagsBits.BanMembers, + ]); + expect(result).toBe(true); + }); }); });