You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Tests.ChannelPermissions.cs 8.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using System;
  2. using System.Threading.Tasks;
  3. using Xunit;
  4. namespace Discord
  5. {
  6. public class ChannelPermissionsTests
  7. {
  8. // seems like all these tests are broken
  9. /*[Fact]
  10. public Task TestChannelPermission()
  11. {
  12. var perm = new ChannelPermissions();
  13. // check initial values
  14. Assert.Equal((ulong)0, perm.RawValue);
  15. Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue);
  16. // permissions list empty by default
  17. Assert.Empty(perm.ToList());
  18. // test modify with no parameters
  19. var copy = perm.Modify();
  20. Assert.Equal((ulong)0, copy.RawValue);
  21. // test modify with no parameters after using all
  22. copy = ChannelPermissions.Text;
  23. var modified = copy.Modify(); // no params should not change the result
  24. Assert.Equal(ChannelPermissions.Text.RawValue, modified.RawValue);
  25. copy = ChannelPermissions.Voice;
  26. modified = copy.Modify(); // no params should not change the result
  27. Assert.Equal(ChannelPermissions.Voice.RawValue, modified.RawValue);
  28. copy = ChannelPermissions.Group;
  29. modified = copy.Modify(); // no params should not change the result
  30. Assert.Equal(ChannelPermissions.Group.RawValue, modified.RawValue);
  31. copy = ChannelPermissions.DM;
  32. modified = copy.Modify(); // no params should not change the result
  33. Assert.Equal(ChannelPermissions.DM.RawValue, modified.RawValue);
  34. copy = new ChannelPermissions(useExternalEmojis: true);
  35. modified = copy.Modify();
  36. Assert.Equal(copy.RawValue, modified.RawValue);
  37. // test the values that are returned by ChannelPermission.All
  38. Assert.Equal((ulong)0, ChannelPermissions.None.RawValue);
  39. // for text channels
  40. ulong textChannel = (ulong)( ChannelPermission.CreateInstantInvite
  41. | ChannelPermission.ManageChannels
  42. | ChannelPermission.AddReactions
  43. | ChannelPermission.ViewChannel
  44. | ChannelPermission.SendMessages
  45. | ChannelPermission.SendTTSMessages
  46. | ChannelPermission.ManageMessages
  47. | ChannelPermission.EmbedLinks
  48. | ChannelPermission.AttachFiles
  49. | ChannelPermission.ReadMessageHistory
  50. | ChannelPermission.MentionEveryone
  51. | ChannelPermission.UseExternalEmojis
  52. | ChannelPermission.ManageRoles
  53. | ChannelPermission.ManageWebhooks);
  54. Assert.Equal(textChannel, ChannelPermissions.Text.RawValue);
  55. // voice channels
  56. ulong voiceChannel = (ulong)(
  57. ChannelPermission.CreateInstantInvite
  58. | ChannelPermission.ManageChannels
  59. | ChannelPermission.ViewChannel
  60. | ChannelPermission.Connect
  61. | ChannelPermission.Speak
  62. | ChannelPermission.MuteMembers
  63. | ChannelPermission.DeafenMembers
  64. | ChannelPermission.MoveMembers
  65. | ChannelPermission.UseVAD
  66. | ChannelPermission.ManageRoles
  67. | ChannelPermission.PrioritySpeaker);
  68. Assert.Equal(voiceChannel, ChannelPermissions.Voice.RawValue);
  69. // DM Channels
  70. ulong dmChannel = (ulong)(
  71. ChannelPermission.ViewChannel
  72. | ChannelPermission.SendMessages
  73. | ChannelPermission.EmbedLinks
  74. | ChannelPermission.AttachFiles
  75. | ChannelPermission.ReadMessageHistory
  76. | ChannelPermission.UseExternalEmojis
  77. | ChannelPermission.Connect
  78. | ChannelPermission.Speak
  79. | ChannelPermission.UseVAD
  80. );
  81. //Assert.Equal(dmChannel, ChannelPermissions.DM.RawValue);
  82. // TODO: this test is failing and that's a bad thing
  83. // group channel
  84. ulong groupChannel = (ulong)(
  85. ChannelPermission.SendMessages
  86. | ChannelPermission.EmbedLinks
  87. | ChannelPermission.AttachFiles
  88. | ChannelPermission.SendTTSMessages
  89. | ChannelPermission.Connect
  90. | ChannelPermission.Speak
  91. | ChannelPermission.UseVAD
  92. );
  93. // TODO: this test is also broken
  94. //Assert.Equal(groupChannel, ChannelPermissions.Group.RawValue);
  95. return Task.CompletedTask;
  96. }*/
  97. [Fact]
  98. public Task TestChannelPermissionModify()
  99. {
  100. // test that channel permissions could be modified correctly
  101. var perm = new ChannelPermissions();
  102. void Check(ChannelPermission permission,
  103. Func<ChannelPermissions, bool> has,
  104. Func<ChannelPermissions, bool, ChannelPermissions> modify)
  105. {
  106. // ensure permission initially false
  107. // use both the function and Has to ensure that the GetPermission
  108. // function is working
  109. Assert.False(has(perm));
  110. Assert.False(perm.Has(permission));
  111. // enable it, and ensure that it gets set
  112. perm = modify(perm, true);
  113. Assert.True(has(perm));
  114. Assert.True(perm.Has(permission));
  115. // set it false again
  116. perm = modify(perm, false);
  117. Assert.False(has(perm));
  118. Assert.False(perm.Has(permission));
  119. // ensure that no perms are set now
  120. Assert.Equal(ChannelPermissions.None.RawValue, perm.RawValue);
  121. }
  122. Check(ChannelPermission.CreateInstantInvite, x => x.CreateInstantInvite, (p, enable) => p.Modify(createInstantInvite: enable));
  123. Check(ChannelPermission.ManageChannels, x => x.ManageChannel, (p, enable) => p.Modify(manageChannel: enable));
  124. Check(ChannelPermission.AddReactions, x => x.AddReactions, (p, enable) => p.Modify(addReactions: enable));
  125. Check(ChannelPermission.ViewChannel, x => x.ViewChannel, (p, enable) => p.Modify(viewChannel: enable));
  126. Check(ChannelPermission.SendMessages, x => x.SendMessages, (p, enable) => p.Modify(sendMessages: enable));
  127. Check(ChannelPermission.SendTTSMessages, x => x.SendTTSMessages, (p, enable) => p.Modify(sendTTSMessages: enable));
  128. Check(ChannelPermission.ManageMessages, x => x.ManageMessages, (p, enable) => p.Modify(manageMessages: enable));
  129. Check(ChannelPermission.EmbedLinks, x => x.EmbedLinks, (p, enable) => p.Modify(embedLinks: enable));
  130. Check(ChannelPermission.AttachFiles, x => x.AttachFiles, (p, enable) => p.Modify(attachFiles: enable));
  131. Check(ChannelPermission.ReadMessageHistory, x => x.ReadMessageHistory, (p, enable) => p.Modify(readMessageHistory: enable));
  132. Check(ChannelPermission.MentionEveryone, x => x.MentionEveryone, (p, enable) => p.Modify(mentionEveryone: enable));
  133. Check(ChannelPermission.UseExternalEmojis, x => x.UseExternalEmojis, (p, enable) => p.Modify(useExternalEmojis: enable));
  134. Check(ChannelPermission.Connect, x => x.Connect, (p, enable) => p.Modify(connect: enable));
  135. Check(ChannelPermission.Speak, x => x.Speak, (p, enable) => p.Modify(speak: enable));
  136. Check(ChannelPermission.MuteMembers, x => x.MuteMembers, (p, enable) => p.Modify(muteMembers: enable));
  137. Check(ChannelPermission.DeafenMembers, x => x.DeafenMembers, (p, enable) => p.Modify(deafenMembers: enable));
  138. Check(ChannelPermission.MoveMembers, x => x.MoveMembers, (p, enable) => p.Modify(moveMembers: enable));
  139. Check(ChannelPermission.UseVAD, x => x.UseVAD, (p, enable) => p.Modify(useVoiceActivation: enable));
  140. Check(ChannelPermission.ManageRoles, x => x.ManageRoles, (p, enable) => p.Modify(manageRoles: enable));
  141. Check(ChannelPermission.ManageWebhooks, x => x.ManageWebhooks, (p, enable) => p.Modify(manageWebhooks: enable));
  142. Check(ChannelPermission.PrioritySpeaker, x => x.PrioritySpeaker, (p, enable) => p.Modify(prioritySpeaker: enable));
  143. return Task.CompletedTask;
  144. }
  145. [Fact]
  146. public Task TestChannelTypeResolution()
  147. {
  148. ITextChannel someChannel = null;
  149. // null channels will throw exception
  150. Assert.Throws<ArgumentException>(() => ChannelPermissions.All(someChannel));
  151. return Task.CompletedTask;
  152. }
  153. }
  154. }