daa59335cc
- DiscordPermissionChecker: removed dead-code userRoles overload; now only uses resolvedPermissions bitflag (Administrator = 0x8). - DiscordNewSessionCommand: computes resolved permissions from guild user roles via Context.Guild.Users[Id].RoleIds + guild.Roles. - DiscordNewSessionHandler: updated signature to accept ulong resolvedPermissions instead of unused userRoles. - Added ILogger to command for diagnostics on unexpected errors. - Added test: regular user with ManageServer (but not Admin) is rejected. Refs issue #28 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
73 lines
2.1 KiB
C#
73 lines
2.1 KiB
C#
using GmRelay.DiscordBot.Infrastructure.Discord;
|
|
|
|
namespace GmRelay.Bot.Tests.Discord;
|
|
|
|
public sealed class DiscordPermissionCheckerTests
|
|
{
|
|
[Fact]
|
|
public void CanManageSchedule_WhenUserIsGuildOwner_ReturnsTrue()
|
|
{
|
|
var checker = new DiscordPermissionChecker();
|
|
var result = checker.CanManageSchedule(
|
|
guildOwnerId: 123456789ul,
|
|
userId: 123456789ul,
|
|
dbManagerUserIds: Array.Empty<ulong>(),
|
|
resolvedPermissions: 0);
|
|
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanManageSchedule_WhenUserHasAdministratorPermission_ReturnsTrue()
|
|
{
|
|
var checker = new DiscordPermissionChecker();
|
|
var result = checker.CanManageSchedule(
|
|
guildOwnerId: 123456789ul,
|
|
userId: 987654321ul,
|
|
dbManagerUserIds: Array.Empty<ulong>(),
|
|
resolvedPermissions: 0x8); // Administrator
|
|
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanManageSchedule_WhenUserIsDbManager_ReturnsTrue()
|
|
{
|
|
var checker = new DiscordPermissionChecker();
|
|
var managerId = 555ul;
|
|
var result = checker.CanManageSchedule(
|
|
guildOwnerId: 123456789ul,
|
|
userId: managerId,
|
|
dbManagerUserIds: new[] { managerId },
|
|
resolvedPermissions: 0);
|
|
|
|
Assert.True(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanManageSchedule_WhenRegularUser_ReturnsFalse()
|
|
{
|
|
var checker = new DiscordPermissionChecker();
|
|
var result = checker.CanManageSchedule(
|
|
guildOwnerId: 123456789ul,
|
|
userId: 111ul,
|
|
dbManagerUserIds: new[] { 222ul },
|
|
resolvedPermissions: 0);
|
|
|
|
Assert.False(result);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanManageSchedule_WhenUserHasOtherPermissionButNotAdmin_ReturnsFalse()
|
|
{
|
|
var checker = new DiscordPermissionChecker();
|
|
var result = checker.CanManageSchedule(
|
|
guildOwnerId: 123456789ul,
|
|
userId: 111ul,
|
|
dbManagerUserIds: Array.Empty<ulong>(),
|
|
resolvedPermissions: 0x4); // ManageServer, not Administrator
|
|
|
|
Assert.False(result);
|
|
}
|
|
}
|