178 lines
8.5 KiB
C#
178 lines
8.5 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
|
|
namespace Discord
|
|
{
|
|
public class ChannelPermissionsTests
|
|
{
|
|
// seems like all these tests are broken
|
|
/*[Fact]
|
|
public Task TestChannelPermission()
|
|
{
|
|
var perm = new ChannelPermissions();
|
|
|
|
// check initial values
|
|
Assert.Equal((ulong)0, perm.RawValue);
|
|
Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue);
|
|
|
|
// permissions list empty by default
|
|
Assert.Empty(perm.ToList());
|
|
|
|
// test modify with no parameters
|
|
var copy = perm.Modify();
|
|
Assert.Equal((ulong)0, copy.RawValue);
|
|
|
|
// test modify with no parameters after using all
|
|
copy = ChannelPermissions.Text;
|
|
var modified = copy.Modify(); // no params should not change the result
|
|
Assert.Equal(ChannelPermissions.Text.RawValue, modified.RawValue);
|
|
|
|
copy = ChannelPermissions.Voice;
|
|
modified = copy.Modify(); // no params should not change the result
|
|
Assert.Equal(ChannelPermissions.Voice.RawValue, modified.RawValue);
|
|
|
|
copy = ChannelPermissions.Group;
|
|
modified = copy.Modify(); // no params should not change the result
|
|
Assert.Equal(ChannelPermissions.Group.RawValue, modified.RawValue);
|
|
|
|
copy = ChannelPermissions.DM;
|
|
modified = copy.Modify(); // no params should not change the result
|
|
Assert.Equal(ChannelPermissions.DM.RawValue, modified.RawValue);
|
|
|
|
copy = new ChannelPermissions(useExternalEmojis: true);
|
|
modified = copy.Modify();
|
|
Assert.Equal(copy.RawValue, modified.RawValue);
|
|
|
|
// test the values that are returned by ChannelPermission.All
|
|
Assert.Equal((ulong)0, ChannelPermissions.None.RawValue);
|
|
|
|
// for text channels
|
|
ulong textChannel = (ulong)( ChannelPermission.CreateInstantInvite
|
|
| ChannelPermission.ManageChannels
|
|
| ChannelPermission.AddReactions
|
|
| ChannelPermission.ViewChannel
|
|
| ChannelPermission.SendMessages
|
|
| ChannelPermission.SendTTSMessages
|
|
| ChannelPermission.ManageMessages
|
|
| ChannelPermission.EmbedLinks
|
|
| ChannelPermission.AttachFiles
|
|
| ChannelPermission.ReadMessageHistory
|
|
| ChannelPermission.MentionEveryone
|
|
| ChannelPermission.UseExternalEmojis
|
|
| ChannelPermission.ManageRoles
|
|
| ChannelPermission.ManageWebhooks);
|
|
|
|
Assert.Equal(textChannel, ChannelPermissions.Text.RawValue);
|
|
|
|
// voice channels
|
|
ulong voiceChannel = (ulong)(
|
|
ChannelPermission.CreateInstantInvite
|
|
| ChannelPermission.ManageChannels
|
|
| ChannelPermission.ViewChannel
|
|
| ChannelPermission.Connect
|
|
| ChannelPermission.Speak
|
|
| ChannelPermission.MuteMembers
|
|
| ChannelPermission.DeafenMembers
|
|
| ChannelPermission.MoveMembers
|
|
| ChannelPermission.UseVAD
|
|
| ChannelPermission.ManageRoles
|
|
| ChannelPermission.PrioritySpeaker);
|
|
|
|
Assert.Equal(voiceChannel, ChannelPermissions.Voice.RawValue);
|
|
|
|
// DM Channels
|
|
ulong dmChannel = (ulong)(
|
|
ChannelPermission.ViewChannel
|
|
| ChannelPermission.SendMessages
|
|
| ChannelPermission.EmbedLinks
|
|
| ChannelPermission.AttachFiles
|
|
| ChannelPermission.ReadMessageHistory
|
|
| ChannelPermission.UseExternalEmojis
|
|
| ChannelPermission.Connect
|
|
| ChannelPermission.Speak
|
|
| ChannelPermission.UseVAD
|
|
);
|
|
//Assert.Equal(dmChannel, ChannelPermissions.DM.RawValue);
|
|
// TODO: this test is failing and that's a bad thing
|
|
|
|
// group channel
|
|
ulong groupChannel = (ulong)(
|
|
ChannelPermission.SendMessages
|
|
| ChannelPermission.EmbedLinks
|
|
| ChannelPermission.AttachFiles
|
|
| ChannelPermission.SendTTSMessages
|
|
| ChannelPermission.Connect
|
|
| ChannelPermission.Speak
|
|
| ChannelPermission.UseVAD
|
|
);
|
|
// TODO: this test is also broken
|
|
//Assert.Equal(groupChannel, ChannelPermissions.Group.RawValue);
|
|
return Task.CompletedTask;
|
|
}*/
|
|
[Fact]
|
|
public Task TestChannelPermissionModify()
|
|
{
|
|
// test that channel permissions could be modified correctly
|
|
var perm = new ChannelPermissions();
|
|
|
|
void Check(ChannelPermission permission,
|
|
Func<ChannelPermissions, bool> has,
|
|
Func<ChannelPermissions, bool, ChannelPermissions> modify)
|
|
{
|
|
// ensure permission initially false
|
|
// use both the function and Has to ensure that the GetPermission
|
|
// function is working
|
|
Assert.False(has(perm));
|
|
Assert.False(perm.Has(permission));
|
|
|
|
// enable it, and ensure that it gets set
|
|
perm = modify(perm, true);
|
|
Assert.True(has(perm));
|
|
Assert.True(perm.Has(permission));
|
|
|
|
// set it false again
|
|
perm = modify(perm, false);
|
|
Assert.False(has(perm));
|
|
Assert.False(perm.Has(permission));
|
|
|
|
// ensure that no perms are set now
|
|
Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue);
|
|
}
|
|
|
|
Check(ChannelPermission.CreateInstantInvite, x => x.CreateInstantInvite, (p, enable) => p.Modify(createInstantInvite: enable));
|
|
Check(ChannelPermission.ManageChannels, x => x.ManageChannel, (p, enable) => p.Modify(manageChannel: enable));
|
|
Check(ChannelPermission.AddReactions, x => x.AddReactions, (p, enable) => p.Modify(addReactions: enable));
|
|
Check(ChannelPermission.ViewChannel, x => x.ViewChannel, (p, enable) => p.Modify(viewChannel: enable));
|
|
Check(ChannelPermission.SendMessages, x => x.SendMessages, (p, enable) => p.Modify(sendMessages: enable));
|
|
Check(ChannelPermission.SendTTSMessages, x => x.SendTTSMessages, (p, enable) => p.Modify(sendTTSMessages: enable));
|
|
Check(ChannelPermission.ManageMessages, x => x.ManageMessages, (p, enable) => p.Modify(manageMessages: enable));
|
|
Check(ChannelPermission.EmbedLinks, x => x.EmbedLinks, (p, enable) => p.Modify(embedLinks: enable));
|
|
Check(ChannelPermission.AttachFiles, x => x.AttachFiles, (p, enable) => p.Modify(attachFiles: enable));
|
|
Check(ChannelPermission.ReadMessageHistory, x => x.ReadMessageHistory, (p, enable) => p.Modify(readMessageHistory: enable));
|
|
Check(ChannelPermission.MentionEveryone, x => x.MentionEveryone, (p, enable) => p.Modify(mentionEveryone: enable));
|
|
Check(ChannelPermission.UseExternalEmojis, x => x.UseExternalEmojis, (p, enable) => p.Modify(useExternalEmojis: enable));
|
|
Check(ChannelPermission.Connect, x => x.Connect, (p, enable) => p.Modify(connect: enable));
|
|
Check(ChannelPermission.Speak, x => x.Speak, (p, enable) => p.Modify(speak: enable));
|
|
Check(ChannelPermission.MuteMembers, x => x.MuteMembers, (p, enable) => p.Modify(muteMembers: enable));
|
|
Check(ChannelPermission.DeafenMembers, x => x.DeafenMembers, (p, enable) => p.Modify(deafenMembers: enable));
|
|
Check(ChannelPermission.MoveMembers, x => x.MoveMembers, (p, enable) => p.Modify(moveMembers: enable));
|
|
Check(ChannelPermission.UseVAD, x => x.UseVAD, (p, enable) => p.Modify(useVoiceActivation: enable));
|
|
Check(ChannelPermission.ManageRoles, x => x.ManageRoles, (p, enable) => p.Modify(manageRoles: enable));
|
|
Check(ChannelPermission.ManageWebhooks, x => x.ManageWebhooks, (p, enable) => p.Modify(manageWebhooks: enable));
|
|
Check(ChannelPermission.PrioritySpeaker, x => x.PrioritySpeaker, (p, enable) => p.Modify(prioritySpeaker: enable));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
[Fact]
|
|
public Task TestChannelTypeResolution()
|
|
{
|
|
ITextChannel someChannel = null;
|
|
// null channels will throw exception
|
|
Assert.Throws<ArgumentException>(() => ChannelPermissions.All(someChannel));
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|
|
}
|