From 63e670464fd9416137d308ac805c0cac7d0aba74 Mon Sep 17 00:00:00 2001 From: Chris Johnston Date: Thu, 1 Mar 2018 17:06:48 -0800 Subject: [PATCH] Add more tests for Permissions class (#967) * Add tests for more Permissions code coverage * Add guild tests * Add more in-depth covering of permissions methods * Add tests for OverwritePermissions * Remove unknown ItemGroup tag from csproj * Add missing Fact attributes, separate class so that it is not dependant on main test fixture * Separate out GuildPermissions and ChannelPermissions tests from main partial Tests class because they do not need to have access to the main test fixture --- .../Discord.Net.Tests.csproj | 3 + .../Tests.ChannelPermissions.cs | 4 +- .../Tests.GuildPermissions.cs | 4 +- test/Discord.Net.Tests/Tests.Permissions.cs | 706 ++++++++++++++++++ 4 files changed, 713 insertions(+), 4 deletions(-) create mode 100644 test/Discord.Net.Tests/Tests.Permissions.cs diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj index bf2457187..204dca5c4 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj @@ -10,6 +10,9 @@ PreserveNewest + + + diff --git a/test/Discord.Net.Tests/Tests.ChannelPermissions.cs b/test/Discord.Net.Tests/Tests.ChannelPermissions.cs index ac8ede4e4..b37a1195e 100644 --- a/test/Discord.Net.Tests/Tests.ChannelPermissions.cs +++ b/test/Discord.Net.Tests/Tests.ChannelPermissions.cs @@ -1,10 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Xunit; namespace Discord { - public partial class Tests + public class ChannelPermissionsTests { [Fact] public Task TestChannelPermission() diff --git a/test/Discord.Net.Tests/Tests.GuildPermissions.cs b/test/Discord.Net.Tests/Tests.GuildPermissions.cs index bb113d221..a562f4afb 100644 --- a/test/Discord.Net.Tests/Tests.GuildPermissions.cs +++ b/test/Discord.Net.Tests/Tests.GuildPermissions.cs @@ -1,10 +1,10 @@ -using System; +using System; using System.Threading.Tasks; using Xunit; namespace Discord { - public partial class Tests + public class GuidPermissionsTests { [Fact] public Task TestGuildPermission() diff --git a/test/Discord.Net.Tests/Tests.Permissions.cs b/test/Discord.Net.Tests/Tests.Permissions.cs new file mode 100644 index 000000000..e22659d15 --- /dev/null +++ b/test/Discord.Net.Tests/Tests.Permissions.cs @@ -0,0 +1,706 @@ +using System; +using System.Threading.Tasks; +using Xunit; + +namespace Discord +{ + public class PermissionsTests + { + private void TestHelper(ChannelPermissions value, ChannelPermission permission, bool expected = false) + => TestHelper(value.RawValue, (ulong)permission, expected); + + private void TestHelper(GuildPermissions value, GuildPermission permission, bool expected = false) + => TestHelper(value.RawValue, (ulong)permission, expected); + + /// + /// Tests the flag of the given permissions value to the expected output + /// and then tries to toggle the flag on and off + /// + /// + /// + /// + private void TestHelper(ulong rawValue, ulong flagValue, bool expected) + { + Assert.Equal(expected, Permissions.GetValue(rawValue, flagValue)); + + // check that toggling the bit works + Permissions.UnsetFlag(ref rawValue, flagValue); + Assert.Equal(false, Permissions.GetValue(rawValue, flagValue)); + Permissions.SetFlag(ref rawValue, flagValue); + Assert.Equal(true, Permissions.GetValue(rawValue, flagValue)); + + // do the same, but with the SetValue method + Permissions.SetValue(ref rawValue, true, flagValue); + Assert.Equal(true, Permissions.GetValue(rawValue, flagValue)); + Permissions.SetValue(ref rawValue, false, flagValue); + Assert.Equal(false, Permissions.GetValue(rawValue, flagValue)); + } + + /// + /// Tests that flag of the given permissions value to be the expected output + /// and then tries cycling through the states of the allow and deny values + /// for that flag + /// + /// + /// + /// + private void TestHelper(OverwritePermissions value, ChannelPermission flag, PermValue expected) + { + // check that the value matches + Assert.Equal(expected, Permissions.GetValue(value.AllowValue, value.DenyValue, flag)); + + // check toggling bits for both allow and deny + // have to make copies to get around read only property + ulong allow = value.AllowValue; + ulong deny = value.DenyValue; + + // both unset should be inherit + Permissions.UnsetFlag(ref allow, (ulong)flag); + Permissions.UnsetFlag(ref deny, (ulong)flag); + Assert.Equal(PermValue.Inherit, Permissions.GetValue(allow, deny, flag)); + + // allow set should be allow + Permissions.SetFlag(ref allow, (ulong)flag); + Permissions.UnsetFlag(ref deny, (ulong)flag); + Assert.Equal(PermValue.Allow, Permissions.GetValue(allow, deny, flag)); + + // deny should be deny + Permissions.UnsetFlag(ref allow, (ulong)flag); + Permissions.SetFlag(ref deny, (ulong)flag); + Assert.Equal(PermValue.Deny, Permissions.GetValue(allow, deny, flag)); + + // allow takes precedence + Permissions.SetFlag(ref allow, (ulong)flag); + Permissions.SetFlag(ref deny, (ulong)flag); + Assert.Equal(PermValue.Allow, Permissions.GetValue(allow, deny, flag)); + } + + /// + /// Tests for the class. + /// + /// Tests that text channel permissions get the right value + /// from the Has method. + /// + /// + [Fact] + public Task TestPermissionsHasChannelPermissionText() + { + var value = ChannelPermissions.Text; + // check that the result of GetValue matches for all properties of text channel + TestHelper(value, ChannelPermission.CreateInstantInvite, true); + TestHelper(value, ChannelPermission.ManageChannels, true); + TestHelper(value, ChannelPermission.AddReactions, true); + TestHelper(value, ChannelPermission.ViewChannel, true); + TestHelper(value, ChannelPermission.SendMessages, true); + TestHelper(value, ChannelPermission.SendTTSMessages, true); + TestHelper(value, ChannelPermission.ManageMessages, true); + TestHelper(value, ChannelPermission.EmbedLinks, true); + TestHelper(value, ChannelPermission.AttachFiles, true); + TestHelper(value, ChannelPermission.ReadMessageHistory, true); + TestHelper(value, ChannelPermission.MentionEveryone, true); + TestHelper(value, ChannelPermission.UseExternalEmojis, true); + TestHelper(value, ChannelPermission.ManageRoles, true); + TestHelper(value, ChannelPermission.ManageWebhooks, true); + + TestHelper(value, ChannelPermission.Connect, false); + TestHelper(value, ChannelPermission.Speak, false); + TestHelper(value, ChannelPermission.MuteMembers, false); + TestHelper(value, ChannelPermission.DeafenMembers, false); + TestHelper(value, ChannelPermission.MoveMembers, false); + TestHelper(value, ChannelPermission.UseVAD, false); + + return Task.CompletedTask; + } + + /// + /// Tests for the class. + /// + /// Tests that no channel permissions get the right value + /// from the Has method. + /// + /// + [Fact] + public Task TestPermissionsHasChannelPermissionNone() + { + // check that none will fail all + var value = ChannelPermissions.None; + + TestHelper(value, ChannelPermission.CreateInstantInvite, false); + TestHelper(value, ChannelPermission.ManageChannels, false); + TestHelper(value, ChannelPermission.AddReactions, false); + TestHelper(value, ChannelPermission.ViewChannel, false); + TestHelper(value, ChannelPermission.SendMessages, false); + TestHelper(value, ChannelPermission.SendTTSMessages, false); + TestHelper(value, ChannelPermission.ManageMessages, false); + TestHelper(value, ChannelPermission.EmbedLinks, false); + TestHelper(value, ChannelPermission.AttachFiles, false); + TestHelper(value, ChannelPermission.ReadMessageHistory, false); + TestHelper(value, ChannelPermission.MentionEveryone, false); + TestHelper(value, ChannelPermission.UseExternalEmojis, false); + TestHelper(value, ChannelPermission.ManageRoles, false); + TestHelper(value, ChannelPermission.ManageWebhooks, false); + TestHelper(value, ChannelPermission.Connect, false); + TestHelper(value, ChannelPermission.Speak, false); + TestHelper(value, ChannelPermission.MuteMembers, false); + TestHelper(value, ChannelPermission.DeafenMembers, false); + TestHelper(value, ChannelPermission.MoveMembers, false); + TestHelper(value, ChannelPermission.UseVAD, false); + + return Task.CompletedTask; + } + + /// + /// Tests for the class. + /// + /// Tests that the dm channel permissions get the right value + /// from the Has method. + /// + /// + [Fact] + public Task TestPermissionsHasChannelPermissionDM() + { + // check that none will fail all + var value = ChannelPermissions.DM; + + TestHelper(value, ChannelPermission.CreateInstantInvite, false); + TestHelper(value, ChannelPermission.ManageChannels, false); + TestHelper(value, ChannelPermission.AddReactions, false); + TestHelper(value, ChannelPermission.ViewChannel, true); + TestHelper(value, ChannelPermission.SendMessages, true); + TestHelper(value, ChannelPermission.SendTTSMessages, false); + TestHelper(value, ChannelPermission.ManageMessages, false); + TestHelper(value, ChannelPermission.EmbedLinks, true); + TestHelper(value, ChannelPermission.AttachFiles, true); + TestHelper(value, ChannelPermission.ReadMessageHistory, true); + TestHelper(value, ChannelPermission.MentionEveryone, false); + TestHelper(value, ChannelPermission.UseExternalEmojis, true); + TestHelper(value, ChannelPermission.ManageRoles, false); + TestHelper(value, ChannelPermission.ManageWebhooks, false); + TestHelper(value, ChannelPermission.Connect, true); + TestHelper(value, ChannelPermission.Speak, true); + TestHelper(value, ChannelPermission.MuteMembers, false); + TestHelper(value, ChannelPermission.DeafenMembers, false); + TestHelper(value, ChannelPermission.MoveMembers, false); + TestHelper(value, ChannelPermission.UseVAD, true); + + return Task.CompletedTask; + } + + /// + /// Tests for the class. + /// + /// Tests that the group channel permissions get the right value + /// from the Has method. + /// + /// + [Fact] + public Task TestPermissionsHasChannelPermissionGroup() + { + var value = ChannelPermissions.Group; + + TestHelper(value, ChannelPermission.CreateInstantInvite, false); + TestHelper(value, ChannelPermission.ManageChannels, false); + TestHelper(value, ChannelPermission.AddReactions, false); + TestHelper(value, ChannelPermission.ViewChannel, false); + TestHelper(value, ChannelPermission.SendMessages, true); + TestHelper(value, ChannelPermission.SendTTSMessages, true); + TestHelper(value, ChannelPermission.ManageMessages, false); + TestHelper(value, ChannelPermission.EmbedLinks, true); + TestHelper(value, ChannelPermission.AttachFiles, true); + TestHelper(value, ChannelPermission.ReadMessageHistory, false); + TestHelper(value, ChannelPermission.MentionEveryone, false); + TestHelper(value, ChannelPermission.UseExternalEmojis, false); + TestHelper(value, ChannelPermission.ManageRoles, false); + TestHelper(value, ChannelPermission.ManageWebhooks, false); + TestHelper(value, ChannelPermission.Connect, true); + TestHelper(value, ChannelPermission.Speak, true); + TestHelper(value, ChannelPermission.MuteMembers, false); + TestHelper(value, ChannelPermission.DeafenMembers, false); + TestHelper(value, ChannelPermission.MoveMembers, false); + TestHelper(value, ChannelPermission.UseVAD, true); + + return Task.CompletedTask; + } + + + /// + /// Tests for the class. + /// + /// Tests that the voice channel permissions get the right value + /// from the Has method. + /// + /// + [Fact] + public Task TestPermissionsHasChannelPermissionVoice() + { + // make a flag with all possible values for Voice channel permissions + var value = ChannelPermissions.Voice; + + TestHelper(value, ChannelPermission.CreateInstantInvite, true); + TestHelper(value, ChannelPermission.ManageChannels, true); + TestHelper(value, ChannelPermission.AddReactions, false); + TestHelper(value, ChannelPermission.ViewChannel, false); + TestHelper(value, ChannelPermission.SendMessages, false); + TestHelper(value, ChannelPermission.SendTTSMessages, false); + TestHelper(value, ChannelPermission.ManageMessages, false); + TestHelper(value, ChannelPermission.EmbedLinks, false); + TestHelper(value, ChannelPermission.AttachFiles, false); + TestHelper(value, ChannelPermission.ReadMessageHistory, false); + TestHelper(value, ChannelPermission.MentionEveryone, false); + TestHelper(value, ChannelPermission.UseExternalEmojis, false); + TestHelper(value, ChannelPermission.ManageRoles, true); + TestHelper(value, ChannelPermission.ManageWebhooks, false); + TestHelper(value, ChannelPermission.Connect, true); + TestHelper(value, ChannelPermission.Speak, true); + TestHelper(value, ChannelPermission.MuteMembers, true); + TestHelper(value, ChannelPermission.DeafenMembers, true); + TestHelper(value, ChannelPermission.MoveMembers, true); + TestHelper(value, ChannelPermission.UseVAD, true); + + return Task.CompletedTask; + } + + /// + /// Tests for the class. + /// + /// Test that that the Has method of + /// returns the correct value when no permissions are set. + /// + /// + [Fact] + public Task TestPermissionsHasGuildPermissionNone() + { + var value = GuildPermissions.None; + + TestHelper(value, GuildPermission.CreateInstantInvite, false); + TestHelper(value, GuildPermission.KickMembers, false); + TestHelper(value, GuildPermission.BanMembers, false); + TestHelper(value, GuildPermission.Administrator, false); + TestHelper(value, GuildPermission.ManageChannels, false); + TestHelper(value, GuildPermission.ManageGuild, false); + TestHelper(value, GuildPermission.AddReactions, false); + TestHelper(value, GuildPermission.ViewAuditLog, false); + TestHelper(value, GuildPermission.ReadMessages, false); + TestHelper(value, GuildPermission.SendMessages, false); + TestHelper(value, GuildPermission.SendTTSMessages, false); + TestHelper(value, GuildPermission.ManageMessages, false); + TestHelper(value, GuildPermission.EmbedLinks, false); + TestHelper(value, GuildPermission.AttachFiles, false); + TestHelper(value, GuildPermission.ReadMessageHistory, false); + TestHelper(value, GuildPermission.MentionEveryone, false); + TestHelper(value, GuildPermission.UseExternalEmojis, false); + TestHelper(value, GuildPermission.Connect, false); + TestHelper(value, GuildPermission.Speak, false); + TestHelper(value, GuildPermission.MuteMembers, false); + TestHelper(value, GuildPermission.MoveMembers, false); + TestHelper(value, GuildPermission.UseVAD, false); + TestHelper(value, GuildPermission.ChangeNickname, false); + TestHelper(value, GuildPermission.ManageNicknames, false); + TestHelper(value, GuildPermission.ManageRoles, false); + TestHelper(value, GuildPermission.ManageWebhooks, false); + TestHelper(value, GuildPermission.ManageEmojis, false); + + return Task.CompletedTask; + } + + /// + /// Tests for the class. + /// + /// Test that that the Has method of + /// returns the correct value when all permissions are set. + /// + /// + [Fact] + public Task TestPermissionsHasGuildPermissionAll() + { + var value = GuildPermissions.All; + + TestHelper(value, GuildPermission.CreateInstantInvite, true); + TestHelper(value, GuildPermission.KickMembers, true); + TestHelper(value, GuildPermission.BanMembers, true); + TestHelper(value, GuildPermission.Administrator, true); + TestHelper(value, GuildPermission.ManageChannels, true); + TestHelper(value, GuildPermission.ManageGuild, true); + TestHelper(value, GuildPermission.AddReactions, true); + TestHelper(value, GuildPermission.ViewAuditLog, true); + TestHelper(value, GuildPermission.ReadMessages, true); + TestHelper(value, GuildPermission.SendMessages, true); + TestHelper(value, GuildPermission.SendTTSMessages, true); + TestHelper(value, GuildPermission.ManageMessages, true); + TestHelper(value, GuildPermission.EmbedLinks, true); + TestHelper(value, GuildPermission.AttachFiles, true); + TestHelper(value, GuildPermission.ReadMessageHistory, true); + TestHelper(value, GuildPermission.MentionEveryone, true); + TestHelper(value, GuildPermission.UseExternalEmojis, true); + TestHelper(value, GuildPermission.Connect, true); + TestHelper(value, GuildPermission.Speak, true); + TestHelper(value, GuildPermission.MuteMembers, true); + TestHelper(value, GuildPermission.MoveMembers, true); + TestHelper(value, GuildPermission.UseVAD, true); + TestHelper(value, GuildPermission.ChangeNickname, true); + TestHelper(value, GuildPermission.ManageNicknames, true); + TestHelper(value, GuildPermission.ManageRoles, true); + TestHelper(value, GuildPermission.ManageWebhooks, true); + TestHelper(value, GuildPermission.ManageEmojis, true); + + + return Task.CompletedTask; + } + + /// + /// Tests for the class. + /// + /// Test that that the Has method of + /// returns the correct value when webhook permissions are set. + /// + /// + [Fact] + public Task TestPermissionsHasGuildPermissionWebhook() + { + var value = GuildPermissions.Webhook; + + TestHelper(value, GuildPermission.CreateInstantInvite, false); + TestHelper(value, GuildPermission.KickMembers, false); + TestHelper(value, GuildPermission.BanMembers, false); + TestHelper(value, GuildPermission.Administrator, false); + TestHelper(value, GuildPermission.ManageChannels, false); + TestHelper(value, GuildPermission.ManageGuild, false); + TestHelper(value, GuildPermission.AddReactions, false); + TestHelper(value, GuildPermission.ViewAuditLog, false); + TestHelper(value, GuildPermission.ReadMessages, false); + TestHelper(value, GuildPermission.SendMessages, true); + TestHelper(value, GuildPermission.SendTTSMessages, true); + TestHelper(value, GuildPermission.ManageMessages, false); + TestHelper(value, GuildPermission.EmbedLinks, true); + TestHelper(value, GuildPermission.AttachFiles, true); + TestHelper(value, GuildPermission.ReadMessageHistory, false); + TestHelper(value, GuildPermission.MentionEveryone, false); + TestHelper(value, GuildPermission.UseExternalEmojis, false); + TestHelper(value, GuildPermission.Connect, false); + TestHelper(value, GuildPermission.Speak, false); + TestHelper(value, GuildPermission.MuteMembers, false); + TestHelper(value, GuildPermission.MoveMembers, false); + TestHelper(value, GuildPermission.UseVAD, false); + TestHelper(value, GuildPermission.ChangeNickname, false); + TestHelper(value, GuildPermission.ManageNicknames, false); + TestHelper(value, GuildPermission.ManageRoles, false); + TestHelper(value, GuildPermission.ManageWebhooks, false); + TestHelper(value, GuildPermission.ManageEmojis, false); + + return Task.CompletedTask; + } + + /// + /// Test + /// for when all text permissions are allowed and denied + /// + /// + [Fact] + public Task TestOverwritePermissionsText() + { + // allow all for text channel + var value = new OverwritePermissions(ChannelPermissions.Text.RawValue, ChannelPermissions.None.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Allow); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Allow); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Allow); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Allow); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Allow); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Allow); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Allow); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Allow); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Allow); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Allow); + TestHelper(value, ChannelPermission.Connect, PermValue.Inherit); + TestHelper(value, ChannelPermission.Speak, PermValue.Inherit); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit); + + value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Text.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Deny); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Deny); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Deny); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Deny); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Deny); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Deny); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Deny); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Deny); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Deny); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Deny); + TestHelper(value, ChannelPermission.Connect, PermValue.Inherit); + TestHelper(value, ChannelPermission.Speak, PermValue.Inherit); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit); + + return Task.CompletedTask; + } + + /// + /// Test + /// for when none of the permissions are set. + /// + /// + [Fact] + public Task TestOverwritePermissionsNone() + { + // allow all for text channel + var value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.None.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Inherit); + TestHelper(value, ChannelPermission.Speak, PermValue.Inherit); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit); + + value = new OverwritePermissions(); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Inherit); + TestHelper(value, ChannelPermission.Speak, PermValue.Inherit); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit); + + value = OverwritePermissions.InheritAll; + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Inherit); + TestHelper(value, ChannelPermission.Speak, PermValue.Inherit); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit); + + return Task.CompletedTask; + } + + /// + /// Test + /// for when all dm permissions are allowed and denied + /// + /// + [Fact] + public Task TestOverwritePermissionsDM() + { + // allow all for text channel + var value = new OverwritePermissions(ChannelPermissions.DM.RawValue, ChannelPermissions.None.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Allow); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Allow); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Allow); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Allow); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Allow); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Allow); + TestHelper(value, ChannelPermission.Speak, PermValue.Allow); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Allow); + + value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.DM.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Deny); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Deny); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Deny); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Deny); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Deny); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Deny); + TestHelper(value, ChannelPermission.Speak, PermValue.Deny); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Deny); + + return Task.CompletedTask; + } + + /// + /// Test + /// for when all group permissions are allowed and denied + /// + /// + [Fact] + public Task TestOverwritePermissionsGroup() + { + // allow all for group channels + var value = new OverwritePermissions(ChannelPermissions.Group.RawValue, ChannelPermissions.None.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Allow); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Allow); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Allow); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Allow); + TestHelper(value, ChannelPermission.Speak, PermValue.Allow); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Allow); + + value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Group.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Deny); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Deny); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Deny); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Deny); + TestHelper(value, ChannelPermission.Speak, PermValue.Deny); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Deny); + + return Task.CompletedTask; + } + + /// + /// Test + /// for when all group permissions are allowed and denied + /// + /// + [Fact] + public Task TestOverwritePermissionsVoice() + { + // allow all for group channels + var value = new OverwritePermissions(ChannelPermissions.Voice.RawValue, ChannelPermissions.None.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Allow); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Allow); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Allow); + TestHelper(value, ChannelPermission.Speak, PermValue.Allow); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Allow); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Allow); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Allow); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Allow); + + value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Voice.RawValue); + + TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageChannels, PermValue.Deny); + TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit); + TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit); + TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit); + TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit); + TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit); + TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit); + TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit); + TestHelper(value, ChannelPermission.ManageRoles, PermValue.Deny); + TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit); + TestHelper(value, ChannelPermission.Connect, PermValue.Deny); + TestHelper(value, ChannelPermission.Speak, PermValue.Deny); + TestHelper(value, ChannelPermission.MuteMembers, PermValue.Deny); + TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Deny); + TestHelper(value, ChannelPermission.MoveMembers, PermValue.Deny); + TestHelper(value, ChannelPermission.UseVAD, PermValue.Deny); + + return Task.CompletedTask; + } + } +}