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.Permissions.cs 18 kB

8 years ago
8 years ago
8 years ago
8 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. using System;
  2. using System.Threading.Tasks;
  3. using Xunit;
  4. namespace Discord
  5. {
  6. public partial class Tests
  7. {
  8. private void TestHelper(ChannelPermissions value, ChannelPermission permission, bool expected = false)
  9. => TestHelper(value.RawValue, (ulong)permission, expected);
  10. private void TestHelper(GuildPermissions value, GuildPermission permission, bool expected = false)
  11. => TestHelper(value.RawValue, (ulong)permission, expected);
  12. private void TestHelper(ulong rawValue, ulong flagValue, bool expected)
  13. {
  14. Assert.Equal(expected, Permissions.GetValue(rawValue, flagValue));
  15. // check that toggling the bit works
  16. Permissions.UnsetFlag(ref rawValue, flagValue);
  17. Assert.Equal(false, Permissions.GetValue(rawValue, flagValue));
  18. Permissions.SetFlag(ref rawValue, flagValue);
  19. Assert.Equal(true, Permissions.GetValue(rawValue, flagValue));
  20. // do the same, but with the SetValue method
  21. Permissions.SetValue(ref rawValue, true, flagValue);
  22. Assert.Equal(true, Permissions.GetValue(rawValue, flagValue));
  23. Permissions.SetValue(ref rawValue, false, flagValue);
  24. Assert.Equal(false, Permissions.GetValue(rawValue, flagValue));
  25. }
  26. /// <summary>
  27. /// Tests for the <see cref="Discord.Permissions"/> class.
  28. ///
  29. /// Tests that text channel permissions get the right value
  30. /// from the Has method.
  31. /// </summary>
  32. /// <returns></returns>
  33. [Fact]
  34. public Task TestPermissionsHasChannelPermissionText()
  35. {
  36. var value = ChannelPermissions.Text;
  37. // check that the result of GetValue matches for all properties of text channel
  38. TestHelper(value, ChannelPermission.CreateInstantInvite, true);
  39. TestHelper(value, ChannelPermission.ManageChannels, true);
  40. TestHelper(value, ChannelPermission.AddReactions, true);
  41. TestHelper(value, ChannelPermission.ViewChannel, true);
  42. TestHelper(value, ChannelPermission.SendMessages, true);
  43. TestHelper(value, ChannelPermission.SendTTSMessages, true);
  44. TestHelper(value, ChannelPermission.ManageMessages, true);
  45. TestHelper(value, ChannelPermission.EmbedLinks, true);
  46. TestHelper(value, ChannelPermission.AttachFiles, true);
  47. TestHelper(value, ChannelPermission.ReadMessageHistory, true);
  48. TestHelper(value, ChannelPermission.MentionEveryone, true);
  49. TestHelper(value, ChannelPermission.UseExternalEmojis, true);
  50. TestHelper(value, ChannelPermission.ManageRoles, true);
  51. TestHelper(value, ChannelPermission.ManageWebhooks, true);
  52. TestHelper(value, ChannelPermission.Connect, false);
  53. TestHelper(value, ChannelPermission.Speak, false);
  54. TestHelper(value, ChannelPermission.MuteMembers, false);
  55. TestHelper(value, ChannelPermission.DeafenMembers, false);
  56. TestHelper(value, ChannelPermission.MoveMembers, false);
  57. TestHelper(value, ChannelPermission.UseVAD, false);
  58. return Task.CompletedTask;
  59. }
  60. /// <summary>
  61. /// Tests for the <see cref="Discord.Permissions"/> class.
  62. ///
  63. /// Tests that no channel permissions get the right value
  64. /// from the Has method.
  65. /// </summary>
  66. /// <returns></returns>
  67. public Task TestPermissionsHasChannelPermissionNone()
  68. {
  69. // check that none will fail all
  70. var value = ChannelPermissions.None;
  71. TestHelper(value, ChannelPermission.CreateInstantInvite, false);
  72. TestHelper(value, ChannelPermission.ManageChannels, false);
  73. TestHelper(value, ChannelPermission.AddReactions, false);
  74. TestHelper(value, ChannelPermission.ViewChannel, false);
  75. TestHelper(value, ChannelPermission.SendMessages, false);
  76. TestHelper(value, ChannelPermission.SendTTSMessages, false);
  77. TestHelper(value, ChannelPermission.ManageMessages, false);
  78. TestHelper(value, ChannelPermission.EmbedLinks, false);
  79. TestHelper(value, ChannelPermission.AttachFiles, false);
  80. TestHelper(value, ChannelPermission.ReadMessageHistory, false);
  81. TestHelper(value, ChannelPermission.MentionEveryone, false);
  82. TestHelper(value, ChannelPermission.UseExternalEmojis, false);
  83. TestHelper(value, ChannelPermission.ManageRoles, false);
  84. TestHelper(value, ChannelPermission.ManageWebhooks, false);
  85. TestHelper(value, ChannelPermission.Connect, false);
  86. TestHelper(value, ChannelPermission.Speak, false);
  87. TestHelper(value, ChannelPermission.MuteMembers, false);
  88. TestHelper(value, ChannelPermission.DeafenMembers, false);
  89. TestHelper(value, ChannelPermission.MoveMembers, false);
  90. TestHelper(value, ChannelPermission.UseVAD, false);
  91. return Task.CompletedTask;
  92. }
  93. /// <summary>
  94. /// Tests for the <see cref="Discord.Permissions"/> class.
  95. ///
  96. /// Tests that the dm channel permissions get the right value
  97. /// from the Has method.
  98. /// </summary>
  99. /// <returns></returns>
  100. public Task TestPermissionsHasChannelPermissionDM()
  101. {
  102. // check that none will fail all
  103. var value = ChannelPermissions.DM;
  104. TestHelper(value, ChannelPermission.CreateInstantInvite, false);
  105. TestHelper(value, ChannelPermission.ManageChannels, false);
  106. TestHelper(value, ChannelPermission.AddReactions, false);
  107. TestHelper(value, ChannelPermission.ViewChannel, true);
  108. TestHelper(value, ChannelPermission.SendMessages, true);
  109. TestHelper(value, ChannelPermission.SendTTSMessages, false);
  110. TestHelper(value, ChannelPermission.ManageMessages, false);
  111. TestHelper(value, ChannelPermission.EmbedLinks, true);
  112. TestHelper(value, ChannelPermission.AttachFiles, true);
  113. TestHelper(value, ChannelPermission.ReadMessageHistory, true);
  114. TestHelper(value, ChannelPermission.MentionEveryone, false);
  115. TestHelper(value, ChannelPermission.UseExternalEmojis, true);
  116. TestHelper(value, ChannelPermission.ManageRoles, false);
  117. TestHelper(value, ChannelPermission.ManageWebhooks, false);
  118. TestHelper(value, ChannelPermission.Connect, true);
  119. TestHelper(value, ChannelPermission.Speak, true);
  120. TestHelper(value, ChannelPermission.MuteMembers, false);
  121. TestHelper(value, ChannelPermission.DeafenMembers, false);
  122. TestHelper(value, ChannelPermission.MoveMembers, false);
  123. TestHelper(value, ChannelPermission.UseVAD, true);
  124. return Task.CompletedTask;
  125. }
  126. /// <summary>
  127. /// Tests for the <see cref="Discord.Permissions"/> class.
  128. ///
  129. /// Tests that the group channel permissions get the right value
  130. /// from the Has method.
  131. /// </summary>
  132. /// <returns></returns>
  133. public Task TestPermissionsHasChannelPermissionGroup()
  134. {
  135. var value = ChannelPermissions.Group;
  136. TestHelper(value, ChannelPermission.CreateInstantInvite, false);
  137. TestHelper(value, ChannelPermission.ManageChannels, false);
  138. TestHelper(value, ChannelPermission.AddReactions, false);
  139. TestHelper(value, ChannelPermission.ViewChannel, false);
  140. TestHelper(value, ChannelPermission.SendMessages, true);
  141. TestHelper(value, ChannelPermission.SendTTSMessages, true);
  142. TestHelper(value, ChannelPermission.ManageMessages, false);
  143. TestHelper(value, ChannelPermission.EmbedLinks, true);
  144. TestHelper(value, ChannelPermission.AttachFiles, true);
  145. TestHelper(value, ChannelPermission.ReadMessageHistory, false);
  146. TestHelper(value, ChannelPermission.MentionEveryone, false);
  147. TestHelper(value, ChannelPermission.UseExternalEmojis, false);
  148. TestHelper(value, ChannelPermission.ManageRoles, false);
  149. TestHelper(value, ChannelPermission.ManageWebhooks, false);
  150. TestHelper(value, ChannelPermission.Connect, true);
  151. TestHelper(value, ChannelPermission.Speak, true);
  152. TestHelper(value, ChannelPermission.MuteMembers, false);
  153. TestHelper(value, ChannelPermission.DeafenMembers, false);
  154. TestHelper(value, ChannelPermission.MoveMembers, false);
  155. TestHelper(value, ChannelPermission.UseVAD, true);
  156. return Task.CompletedTask;
  157. }
  158. /// <summary>
  159. /// Tests for the <see cref="Discord.Permissions"/> class.
  160. ///
  161. /// Tests that the voice channel permissions get the right value
  162. /// from the Has method.
  163. /// </summary>
  164. /// <returns></returns>
  165. [Fact]
  166. public Task TestPermissionsHasChannelPermissionVoice()
  167. {
  168. // make a flag with all possible values for Voice channel permissions
  169. var value = ChannelPermissions.Voice;
  170. TestHelper(value, ChannelPermission.CreateInstantInvite, true);
  171. TestHelper(value, ChannelPermission.ManageChannels, true);
  172. TestHelper(value, ChannelPermission.AddReactions, false);
  173. TestHelper(value, ChannelPermission.ViewChannel, false);
  174. TestHelper(value, ChannelPermission.SendMessages, false);
  175. TestHelper(value, ChannelPermission.SendTTSMessages, false);
  176. TestHelper(value, ChannelPermission.ManageMessages, false);
  177. TestHelper(value, ChannelPermission.EmbedLinks, false);
  178. TestHelper(value, ChannelPermission.AttachFiles, false);
  179. TestHelper(value, ChannelPermission.ReadMessageHistory, false);
  180. TestHelper(value, ChannelPermission.MentionEveryone, false);
  181. TestHelper(value, ChannelPermission.UseExternalEmojis, false);
  182. TestHelper(value, ChannelPermission.ManageRoles, true);
  183. TestHelper(value, ChannelPermission.ManageWebhooks, false);
  184. TestHelper(value, ChannelPermission.Connect, true);
  185. TestHelper(value, ChannelPermission.Speak, true);
  186. TestHelper(value, ChannelPermission.MuteMembers, true);
  187. TestHelper(value, ChannelPermission.DeafenMembers, true);
  188. TestHelper(value, ChannelPermission.MoveMembers, true);
  189. TestHelper(value, ChannelPermission.UseVAD, true);
  190. return Task.CompletedTask;
  191. }
  192. /// <summary>
  193. /// Tests for the <see cref="Discord.Permissions"/> class.
  194. ///
  195. /// Test that that the Has method of <see cref="Discord.GuildPermissions"/>
  196. /// returns the correct value when no permissions are set.
  197. /// </summary>
  198. /// <returns></returns>
  199. [Fact]
  200. public Task TestPermissionsHasGuildPermissionNone()
  201. {
  202. var value = GuildPermissions.None;
  203. TestHelper(value, GuildPermission.CreateInstantInvite, false);
  204. TestHelper(value, GuildPermission.KickMembers, false);
  205. TestHelper(value, GuildPermission.BanMembers, false);
  206. TestHelper(value, GuildPermission.Administrator, false);
  207. TestHelper(value, GuildPermission.ManageChannels, false);
  208. TestHelper(value, GuildPermission.ManageGuild, false);
  209. TestHelper(value, GuildPermission.AddReactions, false);
  210. TestHelper(value, GuildPermission.ViewAuditLog, false);
  211. TestHelper(value, GuildPermission.ReadMessages, false);
  212. TestHelper(value, GuildPermission.SendMessages, false);
  213. TestHelper(value, GuildPermission.SendTTSMessages, false);
  214. TestHelper(value, GuildPermission.ManageMessages, false);
  215. TestHelper(value, GuildPermission.EmbedLinks, false);
  216. TestHelper(value, GuildPermission.AttachFiles, false);
  217. TestHelper(value, GuildPermission.ReadMessageHistory, false);
  218. TestHelper(value, GuildPermission.MentionEveryone, false);
  219. TestHelper(value, GuildPermission.UseExternalEmojis, false);
  220. TestHelper(value, GuildPermission.Connect, false);
  221. TestHelper(value, GuildPermission.Speak, false);
  222. TestHelper(value, GuildPermission.MuteMembers, false);
  223. TestHelper(value, GuildPermission.MoveMembers, false);
  224. TestHelper(value, GuildPermission.UseVAD, false);
  225. TestHelper(value, GuildPermission.ChangeNickname, false);
  226. TestHelper(value, GuildPermission.ManageNicknames, false);
  227. TestHelper(value, GuildPermission.ManageRoles, false);
  228. TestHelper(value, GuildPermission.ManageWebhooks, false);
  229. TestHelper(value, GuildPermission.ManageEmojis, false);
  230. return Task.CompletedTask;
  231. }
  232. /// <summary>
  233. /// Tests for the <see cref="Discord.Permissions"/> class.
  234. ///
  235. /// Test that that the Has method of <see cref="Discord.GuildPermissions"/>
  236. /// returns the correct value when all permissions are set.
  237. /// </summary>
  238. /// <returns></returns>
  239. [Fact]
  240. public Task TestPermissionsHasGuildPermissionAll()
  241. {
  242. var value = GuildPermissions.All;
  243. TestHelper(value, GuildPermission.CreateInstantInvite, true);
  244. TestHelper(value, GuildPermission.KickMembers, true);
  245. TestHelper(value, GuildPermission.BanMembers, true);
  246. TestHelper(value, GuildPermission.Administrator, true);
  247. TestHelper(value, GuildPermission.ManageChannels, true);
  248. TestHelper(value, GuildPermission.ManageGuild, true);
  249. TestHelper(value, GuildPermission.AddReactions, true);
  250. TestHelper(value, GuildPermission.ViewAuditLog, true);
  251. TestHelper(value, GuildPermission.ReadMessages, true);
  252. TestHelper(value, GuildPermission.SendMessages, true);
  253. TestHelper(value, GuildPermission.SendTTSMessages, true);
  254. TestHelper(value, GuildPermission.ManageMessages, true);
  255. TestHelper(value, GuildPermission.EmbedLinks, true);
  256. TestHelper(value, GuildPermission.AttachFiles, true);
  257. TestHelper(value, GuildPermission.ReadMessageHistory, true);
  258. TestHelper(value, GuildPermission.MentionEveryone, true);
  259. TestHelper(value, GuildPermission.UseExternalEmojis, true);
  260. TestHelper(value, GuildPermission.Connect, true);
  261. TestHelper(value, GuildPermission.Speak, true);
  262. TestHelper(value, GuildPermission.MuteMembers, true);
  263. TestHelper(value, GuildPermission.MoveMembers, true);
  264. TestHelper(value, GuildPermission.UseVAD, true);
  265. TestHelper(value, GuildPermission.ChangeNickname, true);
  266. TestHelper(value, GuildPermission.ManageNicknames, true);
  267. TestHelper(value, GuildPermission.ManageRoles, true);
  268. TestHelper(value, GuildPermission.ManageWebhooks, true);
  269. TestHelper(value, GuildPermission.ManageEmojis, true);
  270. return Task.CompletedTask;
  271. }
  272. /// <summary>
  273. /// Tests for the <see cref="Discord.Permissions"/> class.
  274. ///
  275. /// Test that that the Has method of <see cref="Discord.GuildPermissions"/>
  276. /// returns the correct value when webhook permissions are set.
  277. /// </summary>
  278. /// <returns></returns>
  279. [Fact]
  280. public Task TestPermissionsHasGuildPermissionWebhook()
  281. {
  282. var value = GuildPermissions.Webhook;
  283. TestHelper(value, GuildPermission.CreateInstantInvite, false);
  284. TestHelper(value, GuildPermission.KickMembers, false);
  285. TestHelper(value, GuildPermission.BanMembers, false);
  286. TestHelper(value, GuildPermission.Administrator, false);
  287. TestHelper(value, GuildPermission.ManageChannels, false);
  288. TestHelper(value, GuildPermission.ManageGuild, false);
  289. TestHelper(value, GuildPermission.AddReactions, false);
  290. TestHelper(value, GuildPermission.ViewAuditLog, false);
  291. TestHelper(value, GuildPermission.ReadMessages, false);
  292. TestHelper(value, GuildPermission.SendMessages, true);
  293. TestHelper(value, GuildPermission.SendTTSMessages, true);
  294. TestHelper(value, GuildPermission.ManageMessages, false);
  295. TestHelper(value, GuildPermission.EmbedLinks, true);
  296. TestHelper(value, GuildPermission.AttachFiles, true);
  297. TestHelper(value, GuildPermission.ReadMessageHistory, false);
  298. TestHelper(value, GuildPermission.MentionEveryone, false);
  299. TestHelper(value, GuildPermission.UseExternalEmojis, false);
  300. TestHelper(value, GuildPermission.Connect, false);
  301. TestHelper(value, GuildPermission.Speak, false);
  302. TestHelper(value, GuildPermission.MuteMembers, false);
  303. TestHelper(value, GuildPermission.MoveMembers, false);
  304. TestHelper(value, GuildPermission.UseVAD, false);
  305. TestHelper(value, GuildPermission.ChangeNickname, false);
  306. TestHelper(value, GuildPermission.ManageNicknames, false);
  307. TestHelper(value, GuildPermission.ManageRoles, false);
  308. TestHelper(value, GuildPermission.ManageWebhooks, false);
  309. TestHelper(value, GuildPermission.ManageEmojis, false);
  310. return Task.CompletedTask;
  311. }
  312. }
  313. }