| @@ -110,231 +110,55 @@ namespace Discord | |||||
| [Fact] | [Fact] | ||||
| public Task TestChannelPermissionModify() | public Task TestChannelPermissionModify() | ||||
| { | { | ||||
| // test channel permission modify | |||||
| // test that channel permissions could be modified correctly | |||||
| var perm = new ChannelPermissions(); | 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((ulong)ChannelPermission.CreateInstantInvite, perm.RawValue); | |||||
| // 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((ulong)ChannelPermission.ManageChannels, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.AddReactions, perm.RawValue); | |||||
| perm = perm.Modify(addReactions: false); | |||||
| Assert.False(perm.AddReactions); | |||||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||||
| // individual permission test | |||||
| Assert.False(perm.ViewChannel); | |||||
| perm = perm.Modify(viewChannel: true); | |||||
| Assert.True(perm.ViewChannel); | |||||
| Assert.Equal((ulong)ChannelPermission.ViewChannel, perm.RawValue); | |||||
| perm = perm.Modify(viewChannel: false); | |||||
| Assert.False(perm.ViewChannel); | |||||
| 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((ulong)ChannelPermission.SendMessages, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.SendTTSMessages, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.ManageMessages, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.EmbedLinks, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.AttachFiles, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.ReadMessageHistory, perm.RawValue); | |||||
| perm = perm.Modify(readMessageHistory: false); | |||||
| Assert.False(perm.ReadMessageHistory); | |||||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||||
| 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)); | |||||
| // individual permission test | |||||
| Assert.False(perm.MentionEveryone); | |||||
| perm = perm.Modify(mentionEveryone: true); | |||||
| Assert.True(perm.MentionEveryone); | |||||
| Assert.Equal((ulong)ChannelPermission.MentionEveryone, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.UseExternalEmojis, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.Connect, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.Speak, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.MuteMembers, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.DeafenMembers, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.MoveMembers, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.UseVAD, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.ManageRoles, perm.RawValue); | |||||
| 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((ulong)ChannelPermission.ManageWebhooks, perm.RawValue); | |||||
| perm = perm.Modify(manageWebhooks: false); | |||||
| Assert.False(perm.ManageWebhooks); | |||||
| Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue); | |||||
| return Task.CompletedTask; | return Task.CompletedTask; | ||||
| } | } | ||||