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.5 kB

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