diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj
index bf2457187..46c9f42c1 100644
--- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj
+++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj
@@ -10,6 +10,9 @@
PreserveNewest
+
+
+
@@ -24,4 +27,7 @@
+
+
+
diff --git a/test/Discord.Net.Tests/Tests.Permissions.cs b/test/Discord.Net.Tests/Tests.Permissions.cs
new file mode 100644
index 000000000..ad1d1f769
--- /dev/null
+++ b/test/Discord.Net.Tests/Tests.Permissions.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace Discord
+{
+ public partial class Tests
+ {
+
+ ///
+ /// 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
+ Assert.True(value.Has(ChannelPermission.CreateInstantInvite));
+ Assert.True(value.Has(ChannelPermission.ManageChannels));
+ Assert.True(value.Has(ChannelPermission.AddReactions));
+ Assert.True(value.Has(ChannelPermission.ViewChannel));
+ Assert.True(value.Has(ChannelPermission.SendMessages));
+ Assert.True(value.Has(ChannelPermission.SendTTSMessages));
+ Assert.True(value.Has(ChannelPermission.ManageMessages));
+ Assert.True(value.Has(ChannelPermission.EmbedLinks));
+ Assert.True(value.Has(ChannelPermission.AttachFiles));
+ Assert.True(value.Has(ChannelPermission.ReadMessageHistory));
+ Assert.True(value.Has(ChannelPermission.MentionEveryone));
+ Assert.True(value.Has(ChannelPermission.UseExternalEmojis));
+ Assert.True(value.Has(ChannelPermission.ManageRoles));
+ Assert.True(value.Has(ChannelPermission.ManageWebhooks));
+
+ Assert.False(value.Has(ChannelPermission.Connect));
+ Assert.False(value.Has(ChannelPermission.Speak));
+ Assert.False(value.Has(ChannelPermission.MuteMembers));
+ Assert.False(value.Has(ChannelPermission.DeafenMembers));
+ Assert.False(value.Has(ChannelPermission.MoveMembers));
+ Assert.False(value.Has(ChannelPermission.UseVAD));
+
+ return Task.CompletedTask;
+ }
+
+ ///
+ /// Tests for the class.
+ ///
+ /// Tests that no channel permissions get the right value
+ /// from the Has method.
+ ///
+ ///
+ public Task TestPermissionsHasChannelPermissionNone()
+ {
+ // check that none will fail all
+ var value = ChannelPermissions.None;
+
+ Assert.False(value.Has(ChannelPermission.CreateInstantInvite));
+ Assert.False(value.Has(ChannelPermission.ManageChannels));
+ Assert.False(value.Has(ChannelPermission.AddReactions));
+ Assert.False(value.Has(ChannelPermission.ViewChannel));
+ Assert.False(value.Has(ChannelPermission.SendMessages));
+ Assert.False(value.Has(ChannelPermission.SendTTSMessages));
+ Assert.False(value.Has(ChannelPermission.ManageMessages));
+ Assert.False(value.Has(ChannelPermission.EmbedLinks));
+ Assert.False(value.Has(ChannelPermission.AttachFiles));
+ Assert.False(value.Has(ChannelPermission.ReadMessageHistory));
+ Assert.False(value.Has(ChannelPermission.MentionEveryone));
+ Assert.False(value.Has(ChannelPermission.UseExternalEmojis));
+ Assert.False(value.Has(ChannelPermission.ManageRoles));
+ Assert.False(value.Has(ChannelPermission.ManageWebhooks));
+ Assert.False(value.Has(ChannelPermission.Connect));
+ Assert.False(value.Has(ChannelPermission.Speak));
+ Assert.False(value.Has(ChannelPermission.MuteMembers));
+ Assert.False(value.Has(ChannelPermission.DeafenMembers));
+ Assert.False(value.Has(ChannelPermission.MoveMembers));
+ Assert.False(value.Has(ChannelPermission.UseVAD));
+
+ return Task.CompletedTask;
+ }
+
+ ///
+ /// Tests for the class.
+ ///
+ /// Tests that the dm channel permissions get the right value
+ /// from the Has method.
+ ///
+ ///
+ public Task TestPermissionsHasChannelPermissionDM()
+ {
+ // check that none will fail all
+ var value = ChannelPermissions.DM;
+
+ Assert.False(value.Has(ChannelPermission.CreateInstantInvite));
+ Assert.False(value.Has(ChannelPermission.ManageChannels));
+ Assert.False(value.Has(ChannelPermission.AddReactions));
+ Assert.True(value.Has(ChannelPermission.ViewChannel));
+ Assert.True(value.Has(ChannelPermission.SendMessages));
+ Assert.False(value.Has(ChannelPermission.SendTTSMessages));
+ Assert.False(value.Has(ChannelPermission.ManageMessages));
+ Assert.True(value.Has(ChannelPermission.EmbedLinks));
+ Assert.True(value.Has(ChannelPermission.AttachFiles));
+ Assert.True(value.Has(ChannelPermission.ReadMessageHistory));
+ Assert.False(value.Has(ChannelPermission.MentionEveryone));
+ Assert.True(value.Has(ChannelPermission.UseExternalEmojis));
+ Assert.False(value.Has(ChannelPermission.ManageRoles));
+ Assert.False(value.Has(ChannelPermission.ManageWebhooks));
+ Assert.True(value.Has(ChannelPermission.Connect));
+ Assert.True(value.Has(ChannelPermission.Speak));
+ Assert.False(value.Has(ChannelPermission.MuteMembers));
+ Assert.False(value.Has(ChannelPermission.DeafenMembers));
+ Assert.False(value.Has(ChannelPermission.MoveMembers));
+ Assert.True(value.Has(ChannelPermission.UseVAD));
+
+ return Task.CompletedTask;
+ }
+
+ ///
+ /// Tests for the class.
+ ///
+ /// Tests that the group channel permissions get the right value
+ /// from the Has method.
+ ///
+ ///
+ public Task TestPermissionsHasChannelPermissionGroup()
+ {
+ var value = ChannelPermissions.Group;
+
+ Assert.False(value.Has(ChannelPermission.CreateInstantInvite));
+ Assert.False(value.Has(ChannelPermission.ManageChannels));
+ Assert.False(value.Has(ChannelPermission.AddReactions));
+ Assert.False(value.Has(ChannelPermission.ViewChannel));
+ Assert.True(value.Has(ChannelPermission.SendMessages));
+ Assert.True(value.Has(ChannelPermission.SendTTSMessages));
+ Assert.False(value.Has(ChannelPermission.ManageMessages));
+ Assert.True(value.Has(ChannelPermission.EmbedLinks));
+ Assert.True(value.Has(ChannelPermission.AttachFiles));
+ Assert.False(value.Has(ChannelPermission.ReadMessageHistory));
+ Assert.False(value.Has(ChannelPermission.MentionEveryone));
+ Assert.False(value.Has(ChannelPermission.UseExternalEmojis));
+ Assert.False(value.Has(ChannelPermission.ManageRoles));
+ Assert.False(value.Has(ChannelPermission.ManageWebhooks));
+ Assert.True(value.Has(ChannelPermission.Connect));
+ Assert.True(value.Has(ChannelPermission.Speak));
+ Assert.False(value.Has(ChannelPermission.MuteMembers));
+ Assert.False(value.Has(ChannelPermission.DeafenMembers));
+ Assert.False(value.Has(ChannelPermission.MoveMembers));
+ Assert.True(value.Has(ChannelPermission.UseVAD));
+
+ 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;
+
+ Assert.True(value.Has(ChannelPermission.CreateInstantInvite));
+ Assert.True(value.Has(ChannelPermission.ManageChannels));
+ Assert.False(value.Has(ChannelPermission.AddReactions));
+ Assert.False(value.Has(ChannelPermission.ViewChannel));
+ Assert.False(value.Has(ChannelPermission.SendMessages));
+ Assert.False(value.Has(ChannelPermission.SendTTSMessages));
+ Assert.False(value.Has(ChannelPermission.ManageMessages));
+ Assert.False(value.Has(ChannelPermission.EmbedLinks));
+ Assert.False(value.Has(ChannelPermission.AttachFiles));
+ Assert.False(value.Has(ChannelPermission.ReadMessageHistory));
+ Assert.False(value.Has(ChannelPermission.MentionEveryone));
+ Assert.False(value.Has(ChannelPermission.UseExternalEmojis));
+ Assert.True(value.Has(ChannelPermission.ManageRoles));
+ Assert.False(value.Has(ChannelPermission.ManageWebhooks));
+ Assert.True(value.Has(ChannelPermission.Connect));
+ Assert.True(value.Has(ChannelPermission.Speak));
+ Assert.True(value.Has(ChannelPermission.MuteMembers));
+ Assert.True(value.Has(ChannelPermission.DeafenMembers));
+ Assert.True(value.Has(ChannelPermission.MoveMembers));
+ Assert.True(value.Has(ChannelPermission.UseVAD));
+
+ return Task.CompletedTask;
+ }
+ }
+}