| @@ -1,10 +1,324 @@ | |||
| using System; | |||
| using System.Collections.Generic; | |||
| using System.Text; | |||
| using System.Threading.Tasks; | |||
| using Xunit; | |||
| namespace Discord | |||
| { | |||
| public partial class Tests | |||
| { | |||
| [Fact] | |||
| public async 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 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.ReadMessages | |||
| | 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.Connect | |||
| | ChannelPermission.Speak | |||
| | ChannelPermission.MuteMembers | |||
| | ChannelPermission.DeafenMembers | |||
| | ChannelPermission.MoveMembers | |||
| | ChannelPermission.UseVAD | |||
| | ChannelPermission.ManageRoles); | |||
| Assert.Equal(voiceChannel, ChannelPermissions.Voice.RawValue); | |||
| // DM Channels | |||
| ulong dmChannel = (ulong)( | |||
| ChannelPermission.ReadMessages | |||
| | ChannelPermission.SendMessages | |||
| | ChannelPermission.EmbedLinks | |||
| | ChannelPermission.AttachFiles | |||
| | ChannelPermission.ReadMessageHistory | |||
| | ChannelPermission.UseExternalEmojis | |||
| | ChannelPermission.Connect | |||
| | ChannelPermission.Speak | |||
| | ChannelPermission.UseVAD | |||
| ); | |||
| Assert.Equal(dmChannel, ChannelPermissions.DM.RawValue); | |||
| // group channel | |||
| ulong groupChannel = (ulong)( | |||
| ChannelPermission.SendMessages | |||
| | ChannelPermission.EmbedLinks | |||
| | ChannelPermission.AttachFiles | |||
| | ChannelPermission.SendTTSMessages | |||
| | ChannelPermission.Connect | |||
| | ChannelPermission.Speak | |||
| | ChannelPermission.UseVAD | |||
| ); | |||
| Assert.Equal(groupChannel, ChannelPermissions.Group.RawValue); | |||
| } | |||
| public async Task TestChannelPermissionModify() | |||
| { | |||
| // test channel permission modify | |||
| var perm = new ChannelPermissions(); | |||
| // ensure that the permission is initially false | |||
| Assert.False(perm.CreateInstantInvite); | |||
| // ensure that when modified it works | |||
| perm = perm.Modify(createInstantInvite: true); | |||
| Assert.True(perm.CreateInstantInvite); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.CreateInstantInvite); | |||
| // set false again, move on to next permission | |||
| perm = perm.Modify(createInstantInvite: false); | |||
| Assert.False(perm.CreateInstantInvite); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.ManageChannel); | |||
| perm = perm.Modify(manageChannel: true); | |||
| Assert.True(perm.ManageChannel); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageChannels); | |||
| perm = perm.Modify(manageChannel: false); | |||
| Assert.False(perm.ManageChannel); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.AddReactions); | |||
| perm = perm.Modify(addReactions: true); | |||
| Assert.True(perm.AddReactions); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.AddReactions); | |||
| perm = perm.Modify(addReactions: false); | |||
| Assert.False(perm.AddReactions); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.ReadMessages); | |||
| perm = perm.Modify(readMessages: true); | |||
| Assert.True(perm.ReadMessages); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.ReadMessages); | |||
| perm = perm.Modify(readMessages: false); | |||
| Assert.False(perm.ReadMessages); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.SendMessages); | |||
| perm = perm.Modify(sendMessages: true); | |||
| Assert.True(perm.SendMessages); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.SendMessages); | |||
| perm = perm.Modify(sendMessages: false); | |||
| Assert.False(perm.SendMessages); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.SendTTSMessages); | |||
| perm = perm.Modify(sendTTSMessages: true); | |||
| Assert.True(perm.SendTTSMessages); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.SendTTSMessages); | |||
| perm = perm.Modify(sendTTSMessages: false); | |||
| Assert.False(perm.SendTTSMessages); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.ManageMessages); | |||
| perm = perm.Modify(manageMessages: true); | |||
| Assert.True(perm.ManageMessages); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageMessages); | |||
| perm = perm.Modify(manageMessages: false); | |||
| Assert.False(perm.ManageMessages); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.EmbedLinks); | |||
| perm = perm.Modify(embedLinks: true); | |||
| Assert.True(perm.EmbedLinks); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.EmbedLinks); | |||
| perm = perm.Modify(embedLinks: false); | |||
| Assert.False(perm.EmbedLinks); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.AttachFiles); | |||
| perm = perm.Modify(attachFiles: true); | |||
| Assert.True(perm.AttachFiles); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.AttachFiles); | |||
| perm = perm.Modify(attachFiles: false); | |||
| Assert.False(perm.AttachFiles); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.ReadMessageHistory); | |||
| perm = perm.Modify(readMessageHistory: true); | |||
| Assert.True(perm.ReadMessageHistory); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.ReadMessageHistory); | |||
| perm = perm.Modify(readMessageHistory: false); | |||
| Assert.False(perm.ReadMessageHistory); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.MentionEveryone); | |||
| perm = perm.Modify(mentionEveryone: true); | |||
| Assert.True(perm.MentionEveryone); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.MentionEveryone); | |||
| perm = perm.Modify(mentionEveryone: false); | |||
| Assert.False(perm.MentionEveryone); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.UseExternalEmojis); | |||
| perm = perm.Modify(useExternalEmojis: true); | |||
| Assert.True(perm.UseExternalEmojis); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.UseExternalEmojis); | |||
| perm = perm.Modify(useExternalEmojis: false); | |||
| Assert.False(perm.UseExternalEmojis); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.Connect); | |||
| perm = perm.Modify(connect: true); | |||
| Assert.True(perm.Connect); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.Connect); | |||
| perm = perm.Modify(connect: false); | |||
| Assert.False(perm.Connect); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.Speak); | |||
| perm = perm.Modify(speak: true); | |||
| Assert.True(perm.Speak); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.Speak); | |||
| perm = perm.Modify(speak: false); | |||
| Assert.False(perm.Speak); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.MuteMembers); | |||
| perm = perm.Modify(muteMembers: true); | |||
| Assert.True(perm.MuteMembers); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.MuteMembers); | |||
| perm = perm.Modify(muteMembers: false); | |||
| Assert.False(perm.MuteMembers); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.DeafenMembers); | |||
| perm = perm.Modify(deafenMembers: true); | |||
| Assert.True(perm.DeafenMembers); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.DeafenMembers); | |||
| perm = perm.Modify(deafenMembers: false); | |||
| Assert.False(perm.DeafenMembers); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.MoveMembers); | |||
| perm = perm.Modify(moveMembers: true); | |||
| Assert.True(perm.MoveMembers); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.MoveMembers); | |||
| perm = perm.Modify(moveMembers: false); | |||
| Assert.False(perm.MoveMembers); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.UseVAD); | |||
| perm = perm.Modify(useVoiceActivation: true); | |||
| Assert.True(perm.UseVAD); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.UseVAD); | |||
| perm = perm.Modify(useVoiceActivation: false); | |||
| Assert.False(perm.UseVAD); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.ManageRoles); | |||
| perm = perm.Modify(manageRoles: true); | |||
| Assert.True(perm.ManageRoles); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageRoles); | |||
| perm = perm.Modify(manageRoles: false); | |||
| Assert.False(perm.ManageRoles); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| // individual permission test | |||
| Assert.False(perm.ManageWebhooks); | |||
| perm = perm.Modify(manageWebhooks: true); | |||
| Assert.True(perm.ManageWebhooks); | |||
| Assert.Equal(perm.RawValue, (ulong)GuildPermission.ManageWebhooks); | |||
| perm = perm.Modify(manageWebhooks: false); | |||
| Assert.False(perm.ManageWebhooks); | |||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||
| } | |||
| [Fact] | |||
| public async Task TestChannelTypeResolution() | |||
| { | |||
| ITextChannel someChannel = null; | |||
| // null channels will throw exception | |||
| Assert.Throws<ArgumentException>(() => ChannelPermissions.All(someChannel)); | |||
| } | |||
| } | |||
| } | |||