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 has, Func 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(() => ChannelPermissions.All(someChannel)); return Task.CompletedTask; } } }