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 44 kB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. using System.Threading.Tasks;
  2. using Xunit;
  3. namespace Discord
  4. {
  5. public class PermissionsTests
  6. {
  7. private void TestHelper(ChannelPermissions value, ChannelPermission permission, bool expected = false)
  8. => TestHelper(value.RawValue, (ulong)permission, expected);
  9. private void TestHelper(GuildPermissions value, GuildPermission permission, bool expected = false)
  10. => TestHelper(value.RawValue, (ulong)permission, expected);
  11. /// <summary>
  12. /// Tests the flag of the given permissions value to the expected output
  13. /// and then tries to toggle the flag on and off
  14. /// </summary>
  15. /// <param name="rawValue"></param>
  16. /// <param name="flagValue"></param>
  17. /// <param name="expected"></param>
  18. private void TestHelper(ulong rawValue, ulong flagValue, bool expected)
  19. {
  20. Assert.Equal(expected, Permissions.GetValue(rawValue, flagValue));
  21. // check that toggling the bit works
  22. Permissions.UnsetFlag(ref rawValue, flagValue);
  23. Assert.False(Permissions.GetValue(rawValue, flagValue));
  24. Permissions.SetFlag(ref rawValue, flagValue);
  25. Assert.True(Permissions.GetValue(rawValue, flagValue));
  26. // do the same, but with the SetValue method
  27. Permissions.SetValue(ref rawValue, true, flagValue);
  28. Assert.True(Permissions.GetValue(rawValue, flagValue));
  29. Permissions.SetValue(ref rawValue, false, flagValue);
  30. Assert.False(Permissions.GetValue(rawValue, flagValue));
  31. }
  32. /// <summary>
  33. /// Tests that flag of the given permissions value to be the expected output
  34. /// and then tries cycling through the states of the allow and deny values
  35. /// for that flag
  36. /// </summary>
  37. /// <param name="value"></param>
  38. /// <param name="flag"></param>
  39. /// <param name="expected"></param>
  40. private void TestHelper(OverwritePermissions value, ChannelPermission flag, PermValue expected)
  41. {
  42. // check that the value matches
  43. Assert.Equal(expected, Permissions.GetValue(value.AllowValue, value.DenyValue, flag));
  44. // check toggling bits for both allow and deny
  45. // have to make copies to get around read only property
  46. var allow = value.AllowValue;
  47. var deny = value.DenyValue;
  48. // both unset should be inherit
  49. Permissions.UnsetFlag(ref allow, (ulong)flag);
  50. Permissions.UnsetFlag(ref deny, (ulong)flag);
  51. Assert.Equal(PermValue.Inherit, Permissions.GetValue(allow, deny, flag));
  52. // allow set should be allow
  53. Permissions.SetFlag(ref allow, (ulong)flag);
  54. Permissions.UnsetFlag(ref deny, (ulong)flag);
  55. Assert.Equal(PermValue.Allow, Permissions.GetValue(allow, deny, flag));
  56. // deny should be deny
  57. Permissions.UnsetFlag(ref allow, (ulong)flag);
  58. Permissions.SetFlag(ref deny, (ulong)flag);
  59. Assert.Equal(PermValue.Deny, Permissions.GetValue(allow, deny, flag));
  60. // allow takes precedence
  61. Permissions.SetFlag(ref allow, (ulong)flag);
  62. Permissions.SetFlag(ref deny, (ulong)flag);
  63. Assert.Equal(PermValue.Allow, Permissions.GetValue(allow, deny, flag));
  64. }
  65. /// <summary>
  66. /// Tests for the
  67. /// <see
  68. /// cref="OverwritePermissions.Modify(PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?, PermValue?)" />
  69. /// method to ensure that the default no-param call does not modify the resulting value
  70. /// of the OverwritePermissions.
  71. /// </summary>
  72. /// <returns></returns>
  73. [Fact]
  74. public Task TestOverwritePermissionModifyNoParam()
  75. {
  76. // test for all Text allowed, none denied
  77. var original = new OverwritePermissions(ChannelPermissions.Text.RawValue, ChannelPermissions.None.RawValue);
  78. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  79. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  80. // none allowed, text denied
  81. original = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Text.RawValue);
  82. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  83. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  84. // category allowed, none denied
  85. original = new OverwritePermissions(ChannelPermissions.Category.RawValue, ChannelPermissions.None.RawValue);
  86. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  87. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  88. // none allowed, category denied
  89. original = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Category.RawValue);
  90. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  91. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  92. // DM allowed, none denied
  93. original = new OverwritePermissions(ChannelPermissions.DM.RawValue, ChannelPermissions.None.RawValue);
  94. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  95. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  96. // none allowed, DM denied
  97. original = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.DM.RawValue);
  98. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  99. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  100. // voice allowed, none denied
  101. original = new OverwritePermissions(ChannelPermissions.Voice.RawValue, ChannelPermissions.None.RawValue);
  102. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  103. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  104. // none allowed, voice denied
  105. original = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Voice.RawValue);
  106. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  107. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  108. // group allowed, none denied
  109. original = new OverwritePermissions(ChannelPermissions.Group.RawValue, ChannelPermissions.None.RawValue);
  110. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  111. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  112. // none allowed, group denied
  113. original = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Group.RawValue);
  114. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  115. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  116. // none allowed, none denied
  117. original = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.None.RawValue);
  118. Assert.Equal(original.AllowValue, original.Modify().AllowValue);
  119. Assert.Equal(original.DenyValue, original.Modify().DenyValue);
  120. return Task.CompletedTask;
  121. }
  122. /// <summary>
  123. /// Test <see cref="Discord.OverwritePermissions" />
  124. /// for when all dm permissions are allowed and denied
  125. /// </summary>
  126. /// <returns></returns>
  127. [Fact]
  128. public Task TestOverwritePermissionsDM()
  129. {
  130. // allow all for text channel
  131. var value = new OverwritePermissions(ChannelPermissions.DM.RawValue, ChannelPermissions.None.RawValue);
  132. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  133. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  134. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  135. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Allow);
  136. TestHelper(value, ChannelPermission.SendMessages, PermValue.Allow);
  137. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  138. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  139. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Allow);
  140. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Allow);
  141. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Allow);
  142. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  143. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Allow);
  144. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  145. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  146. TestHelper(value, ChannelPermission.Connect, PermValue.Allow);
  147. TestHelper(value, ChannelPermission.Speak, PermValue.Allow);
  148. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  149. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  150. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  151. TestHelper(value, ChannelPermission.UseVAD, PermValue.Allow);
  152. value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.DM.RawValue);
  153. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  154. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  155. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  156. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Deny);
  157. TestHelper(value, ChannelPermission.SendMessages, PermValue.Deny);
  158. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  159. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  160. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Deny);
  161. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Deny);
  162. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Deny);
  163. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  164. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Deny);
  165. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  166. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  167. TestHelper(value, ChannelPermission.Connect, PermValue.Deny);
  168. TestHelper(value, ChannelPermission.Speak, PermValue.Deny);
  169. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  170. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  171. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  172. TestHelper(value, ChannelPermission.UseVAD, PermValue.Deny);
  173. return Task.CompletedTask;
  174. }
  175. /// <summary>
  176. /// Test <see cref="Discord.OverwritePermissions" />
  177. /// for when all group permissions are allowed and denied
  178. /// </summary>
  179. /// <returns></returns>
  180. [Fact]
  181. public Task TestOverwritePermissionsGroup()
  182. {
  183. // allow all for group channels
  184. var value = new OverwritePermissions(ChannelPermissions.Group.RawValue, ChannelPermissions.None.RawValue);
  185. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  186. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  187. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  188. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit);
  189. TestHelper(value, ChannelPermission.SendMessages, PermValue.Allow);
  190. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Allow);
  191. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  192. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Allow);
  193. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Allow);
  194. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  195. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  196. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  197. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  198. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  199. TestHelper(value, ChannelPermission.Connect, PermValue.Allow);
  200. TestHelper(value, ChannelPermission.Speak, PermValue.Allow);
  201. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  202. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  203. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  204. TestHelper(value, ChannelPermission.UseVAD, PermValue.Allow);
  205. value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Group.RawValue);
  206. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  207. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  208. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  209. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit);
  210. TestHelper(value, ChannelPermission.SendMessages, PermValue.Deny);
  211. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Deny);
  212. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  213. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Deny);
  214. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Deny);
  215. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  216. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  217. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  218. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  219. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  220. TestHelper(value, ChannelPermission.Connect, PermValue.Deny);
  221. TestHelper(value, ChannelPermission.Speak, PermValue.Deny);
  222. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  223. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  224. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  225. TestHelper(value, ChannelPermission.UseVAD, PermValue.Deny);
  226. return Task.CompletedTask;
  227. }
  228. /// <summary>
  229. /// Test <see cref="Discord.OverwritePermissions" />
  230. /// for when none of the permissions are set.
  231. /// </summary>
  232. /// <returns></returns>
  233. [Fact]
  234. public Task TestOverwritePermissionsNone()
  235. {
  236. // allow all for text channel
  237. var value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.None.RawValue);
  238. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  239. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  240. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  241. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit);
  242. TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit);
  243. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  244. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  245. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit);
  246. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit);
  247. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  248. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  249. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  250. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  251. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  252. TestHelper(value, ChannelPermission.Connect, PermValue.Inherit);
  253. TestHelper(value, ChannelPermission.Speak, PermValue.Inherit);
  254. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  255. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  256. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  257. TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit);
  258. value = new OverwritePermissions();
  259. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  260. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  261. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  262. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit);
  263. TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit);
  264. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  265. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  266. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit);
  267. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit);
  268. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  269. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  270. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  271. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  272. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  273. TestHelper(value, ChannelPermission.Connect, PermValue.Inherit);
  274. TestHelper(value, ChannelPermission.Speak, PermValue.Inherit);
  275. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  276. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  277. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  278. TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit);
  279. value = OverwritePermissions.InheritAll;
  280. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Inherit);
  281. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Inherit);
  282. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  283. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Inherit);
  284. TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit);
  285. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  286. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  287. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit);
  288. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit);
  289. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  290. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  291. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  292. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Inherit);
  293. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  294. TestHelper(value, ChannelPermission.Connect, PermValue.Inherit);
  295. TestHelper(value, ChannelPermission.Speak, PermValue.Inherit);
  296. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  297. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  298. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  299. TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit);
  300. return Task.CompletedTask;
  301. }
  302. /// <summary>
  303. /// Test <see cref="Discord.OverwritePermissions" />
  304. /// for when all text permissions are allowed and denied
  305. /// </summary>
  306. /// <returns></returns>
  307. [Fact]
  308. public Task TestOverwritePermissionsText()
  309. {
  310. // allow all for text channel
  311. var value = new OverwritePermissions(ChannelPermissions.Text.RawValue, ChannelPermissions.None.RawValue);
  312. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Allow);
  313. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Allow);
  314. TestHelper(value, ChannelPermission.AddReactions, PermValue.Allow);
  315. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Allow);
  316. TestHelper(value, ChannelPermission.SendMessages, PermValue.Allow);
  317. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Allow);
  318. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Allow);
  319. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Allow);
  320. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Allow);
  321. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Allow);
  322. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Allow);
  323. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Allow);
  324. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Allow);
  325. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Allow);
  326. TestHelper(value, ChannelPermission.Connect, PermValue.Inherit);
  327. TestHelper(value, ChannelPermission.Speak, PermValue.Inherit);
  328. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  329. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  330. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  331. TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit);
  332. value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Text.RawValue);
  333. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Deny);
  334. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Deny);
  335. TestHelper(value, ChannelPermission.AddReactions, PermValue.Deny);
  336. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Deny);
  337. TestHelper(value, ChannelPermission.SendMessages, PermValue.Deny);
  338. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Deny);
  339. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Deny);
  340. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Deny);
  341. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Deny);
  342. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Deny);
  343. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Deny);
  344. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Deny);
  345. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Deny);
  346. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Deny);
  347. TestHelper(value, ChannelPermission.Connect, PermValue.Inherit);
  348. TestHelper(value, ChannelPermission.Speak, PermValue.Inherit);
  349. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Inherit);
  350. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Inherit);
  351. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Inherit);
  352. TestHelper(value, ChannelPermission.UseVAD, PermValue.Inherit);
  353. return Task.CompletedTask;
  354. }
  355. /// <summary>
  356. /// Test <see cref="Discord.OverwritePermissions" />
  357. /// for when all group permissions are allowed and denied
  358. /// </summary>
  359. /// <returns></returns>
  360. [Fact]
  361. public Task TestOverwritePermissionsVoice()
  362. {
  363. // allow all for group channels
  364. var value = new OverwritePermissions(ChannelPermissions.Voice.RawValue, ChannelPermissions.None.RawValue);
  365. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Allow);
  366. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Allow);
  367. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  368. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Allow);
  369. TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit);
  370. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  371. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  372. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit);
  373. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit);
  374. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  375. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  376. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  377. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Allow);
  378. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  379. TestHelper(value, ChannelPermission.Connect, PermValue.Allow);
  380. TestHelper(value, ChannelPermission.Speak, PermValue.Allow);
  381. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Allow);
  382. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Allow);
  383. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Allow);
  384. TestHelper(value, ChannelPermission.UseVAD, PermValue.Allow);
  385. value = new OverwritePermissions(ChannelPermissions.None.RawValue, ChannelPermissions.Voice.RawValue);
  386. TestHelper(value, ChannelPermission.CreateInstantInvite, PermValue.Deny);
  387. TestHelper(value, ChannelPermission.ManageChannels, PermValue.Deny);
  388. TestHelper(value, ChannelPermission.AddReactions, PermValue.Inherit);
  389. TestHelper(value, ChannelPermission.ViewChannel, PermValue.Deny);
  390. TestHelper(value, ChannelPermission.SendMessages, PermValue.Inherit);
  391. TestHelper(value, ChannelPermission.SendTTSMessages, PermValue.Inherit);
  392. TestHelper(value, ChannelPermission.ManageMessages, PermValue.Inherit);
  393. TestHelper(value, ChannelPermission.EmbedLinks, PermValue.Inherit);
  394. TestHelper(value, ChannelPermission.AttachFiles, PermValue.Inherit);
  395. TestHelper(value, ChannelPermission.ReadMessageHistory, PermValue.Inherit);
  396. TestHelper(value, ChannelPermission.MentionEveryone, PermValue.Inherit);
  397. TestHelper(value, ChannelPermission.UseExternalEmojis, PermValue.Inherit);
  398. TestHelper(value, ChannelPermission.ManageRoles, PermValue.Deny);
  399. TestHelper(value, ChannelPermission.ManageWebhooks, PermValue.Inherit);
  400. TestHelper(value, ChannelPermission.Connect, PermValue.Deny);
  401. TestHelper(value, ChannelPermission.Speak, PermValue.Deny);
  402. TestHelper(value, ChannelPermission.MuteMembers, PermValue.Deny);
  403. TestHelper(value, ChannelPermission.DeafenMembers, PermValue.Deny);
  404. TestHelper(value, ChannelPermission.MoveMembers, PermValue.Deny);
  405. TestHelper(value, ChannelPermission.UseVAD, PermValue.Deny);
  406. return Task.CompletedTask;
  407. }
  408. /// <summary>
  409. /// Tests for the <see cref="Discord.Permissions" /> class.
  410. /// Tests that the dm channel permissions get the right value
  411. /// from the Has method.
  412. /// </summary>
  413. /// <returns></returns>
  414. [Fact]
  415. public Task TestPermissionsHasChannelPermissionDM()
  416. {
  417. // check that none will fail all
  418. var value = ChannelPermissions.DM;
  419. TestHelper(value, ChannelPermission.CreateInstantInvite);
  420. TestHelper(value, ChannelPermission.ManageChannels);
  421. TestHelper(value, ChannelPermission.AddReactions);
  422. TestHelper(value, ChannelPermission.ViewChannel, true);
  423. TestHelper(value, ChannelPermission.SendMessages, true);
  424. TestHelper(value, ChannelPermission.SendTTSMessages);
  425. TestHelper(value, ChannelPermission.ManageMessages);
  426. TestHelper(value, ChannelPermission.EmbedLinks, true);
  427. TestHelper(value, ChannelPermission.AttachFiles, true);
  428. TestHelper(value, ChannelPermission.ReadMessageHistory, true);
  429. TestHelper(value, ChannelPermission.MentionEveryone);
  430. TestHelper(value, ChannelPermission.UseExternalEmojis, true);
  431. TestHelper(value, ChannelPermission.ManageRoles);
  432. TestHelper(value, ChannelPermission.ManageWebhooks);
  433. TestHelper(value, ChannelPermission.Connect, true);
  434. TestHelper(value, ChannelPermission.Speak, true);
  435. TestHelper(value, ChannelPermission.MuteMembers);
  436. TestHelper(value, ChannelPermission.DeafenMembers);
  437. TestHelper(value, ChannelPermission.MoveMembers);
  438. TestHelper(value, ChannelPermission.UseVAD, true);
  439. return Task.CompletedTask;
  440. }
  441. /// <summary>
  442. /// Tests for the <see cref="Discord.Permissions" /> class.
  443. /// Tests that the group channel permissions get the right value
  444. /// from the Has method.
  445. /// </summary>
  446. /// <returns></returns>
  447. [Fact]
  448. public Task TestPermissionsHasChannelPermissionGroup()
  449. {
  450. var value = ChannelPermissions.Group;
  451. TestHelper(value, ChannelPermission.CreateInstantInvite);
  452. TestHelper(value, ChannelPermission.ManageChannels);
  453. TestHelper(value, ChannelPermission.AddReactions);
  454. TestHelper(value, ChannelPermission.ViewChannel);
  455. TestHelper(value, ChannelPermission.SendMessages, true);
  456. TestHelper(value, ChannelPermission.SendTTSMessages, true);
  457. TestHelper(value, ChannelPermission.ManageMessages);
  458. TestHelper(value, ChannelPermission.EmbedLinks, true);
  459. TestHelper(value, ChannelPermission.AttachFiles, true);
  460. TestHelper(value, ChannelPermission.ReadMessageHistory);
  461. TestHelper(value, ChannelPermission.MentionEveryone);
  462. TestHelper(value, ChannelPermission.UseExternalEmojis);
  463. TestHelper(value, ChannelPermission.ManageRoles);
  464. TestHelper(value, ChannelPermission.ManageWebhooks);
  465. TestHelper(value, ChannelPermission.Connect, true);
  466. TestHelper(value, ChannelPermission.Speak, true);
  467. TestHelper(value, ChannelPermission.MuteMembers);
  468. TestHelper(value, ChannelPermission.DeafenMembers);
  469. TestHelper(value, ChannelPermission.MoveMembers);
  470. TestHelper(value, ChannelPermission.UseVAD, true);
  471. return Task.CompletedTask;
  472. }
  473. /// <summary>
  474. /// Tests for the <see cref="Discord.Permissions" /> class.
  475. /// Tests that no channel permissions get the right value
  476. /// from the Has method.
  477. /// </summary>
  478. /// <returns></returns>
  479. [Fact]
  480. public Task TestPermissionsHasChannelPermissionNone()
  481. {
  482. // check that none will fail all
  483. var value = ChannelPermissions.None;
  484. TestHelper(value, ChannelPermission.CreateInstantInvite);
  485. TestHelper(value, ChannelPermission.ManageChannels);
  486. TestHelper(value, ChannelPermission.AddReactions);
  487. TestHelper(value, ChannelPermission.ViewChannel);
  488. TestHelper(value, ChannelPermission.SendMessages);
  489. TestHelper(value, ChannelPermission.SendTTSMessages);
  490. TestHelper(value, ChannelPermission.ManageMessages);
  491. TestHelper(value, ChannelPermission.EmbedLinks);
  492. TestHelper(value, ChannelPermission.AttachFiles);
  493. TestHelper(value, ChannelPermission.ReadMessageHistory);
  494. TestHelper(value, ChannelPermission.MentionEveryone);
  495. TestHelper(value, ChannelPermission.UseExternalEmojis);
  496. TestHelper(value, ChannelPermission.ManageRoles);
  497. TestHelper(value, ChannelPermission.ManageWebhooks);
  498. TestHelper(value, ChannelPermission.Connect);
  499. TestHelper(value, ChannelPermission.Speak);
  500. TestHelper(value, ChannelPermission.MuteMembers);
  501. TestHelper(value, ChannelPermission.DeafenMembers);
  502. TestHelper(value, ChannelPermission.MoveMembers);
  503. TestHelper(value, ChannelPermission.UseVAD);
  504. return Task.CompletedTask;
  505. }
  506. /// <summary>
  507. /// Tests for the <see cref="Discord.Permissions" /> class.
  508. /// Tests that text channel permissions get the right value
  509. /// from the Has method.
  510. /// </summary>
  511. /// <returns></returns>
  512. [Fact]
  513. public Task TestPermissionsHasChannelPermissionText()
  514. {
  515. var value = ChannelPermissions.Text;
  516. // check that the result of GetValue matches for all properties of text channel
  517. TestHelper(value, ChannelPermission.CreateInstantInvite, true);
  518. TestHelper(value, ChannelPermission.ManageChannels, true);
  519. TestHelper(value, ChannelPermission.AddReactions, true);
  520. TestHelper(value, ChannelPermission.ViewChannel, true);
  521. TestHelper(value, ChannelPermission.SendMessages, true);
  522. TestHelper(value, ChannelPermission.SendTTSMessages, true);
  523. TestHelper(value, ChannelPermission.ManageMessages, true);
  524. TestHelper(value, ChannelPermission.EmbedLinks, true);
  525. TestHelper(value, ChannelPermission.AttachFiles, true);
  526. TestHelper(value, ChannelPermission.ReadMessageHistory, true);
  527. TestHelper(value, ChannelPermission.MentionEveryone, true);
  528. TestHelper(value, ChannelPermission.UseExternalEmojis, true);
  529. TestHelper(value, ChannelPermission.ManageRoles, true);
  530. TestHelper(value, ChannelPermission.ManageWebhooks, true);
  531. TestHelper(value, ChannelPermission.Connect);
  532. TestHelper(value, ChannelPermission.Speak);
  533. TestHelper(value, ChannelPermission.MuteMembers);
  534. TestHelper(value, ChannelPermission.DeafenMembers);
  535. TestHelper(value, ChannelPermission.MoveMembers);
  536. TestHelper(value, ChannelPermission.UseVAD);
  537. return Task.CompletedTask;
  538. }
  539. /// <summary>
  540. /// Tests for the <see cref="Discord.Permissions" /> class.
  541. /// Tests that the voice channel permissions get the right value
  542. /// from the Has method.
  543. /// </summary>
  544. /// <returns></returns>
  545. [Fact]
  546. public Task TestPermissionsHasChannelPermissionVoice()
  547. {
  548. // make a flag with all possible values for Voice channel permissions
  549. var value = ChannelPermissions.Voice;
  550. TestHelper(value, ChannelPermission.CreateInstantInvite, true);
  551. TestHelper(value, ChannelPermission.ManageChannels, true);
  552. TestHelper(value, ChannelPermission.AddReactions);
  553. TestHelper(value, ChannelPermission.ViewChannel, true);
  554. TestHelper(value, ChannelPermission.SendMessages);
  555. TestHelper(value, ChannelPermission.SendTTSMessages);
  556. TestHelper(value, ChannelPermission.ManageMessages);
  557. TestHelper(value, ChannelPermission.EmbedLinks);
  558. TestHelper(value, ChannelPermission.AttachFiles);
  559. TestHelper(value, ChannelPermission.ReadMessageHistory);
  560. TestHelper(value, ChannelPermission.MentionEveryone);
  561. TestHelper(value, ChannelPermission.UseExternalEmojis);
  562. TestHelper(value, ChannelPermission.ManageRoles, true);
  563. TestHelper(value, ChannelPermission.ManageWebhooks);
  564. TestHelper(value, ChannelPermission.Connect, true);
  565. TestHelper(value, ChannelPermission.Speak, true);
  566. TestHelper(value, ChannelPermission.MuteMembers, true);
  567. TestHelper(value, ChannelPermission.DeafenMembers, true);
  568. TestHelper(value, ChannelPermission.MoveMembers, true);
  569. TestHelper(value, ChannelPermission.UseVAD, true);
  570. return Task.CompletedTask;
  571. }
  572. /// <summary>
  573. /// Tests for the <see cref="Discord.Permissions" /> class.
  574. /// Test that that the Has method of <see cref="Discord.GuildPermissions" />
  575. /// returns the correct value when all permissions are set.
  576. /// </summary>
  577. /// <returns></returns>
  578. [Fact]
  579. public Task TestPermissionsHasGuildPermissionAll()
  580. {
  581. var value = GuildPermissions.All;
  582. TestHelper(value, GuildPermission.CreateInstantInvite, true);
  583. TestHelper(value, GuildPermission.KickMembers, true);
  584. TestHelper(value, GuildPermission.BanMembers, true);
  585. TestHelper(value, GuildPermission.Administrator, true);
  586. TestHelper(value, GuildPermission.ManageChannels, true);
  587. TestHelper(value, GuildPermission.ManageGuild, true);
  588. TestHelper(value, GuildPermission.AddReactions, true);
  589. TestHelper(value, GuildPermission.ViewAuditLog, true);
  590. TestHelper(value, GuildPermission.ViewChannel, true);
  591. TestHelper(value, GuildPermission.SendMessages, true);
  592. TestHelper(value, GuildPermission.SendTTSMessages, true);
  593. TestHelper(value, GuildPermission.ManageMessages, true);
  594. TestHelper(value, GuildPermission.EmbedLinks, true);
  595. TestHelper(value, GuildPermission.AttachFiles, true);
  596. TestHelper(value, GuildPermission.ReadMessageHistory, true);
  597. TestHelper(value, GuildPermission.MentionEveryone, true);
  598. TestHelper(value, GuildPermission.UseExternalEmojis, true);
  599. TestHelper(value, GuildPermission.Connect, true);
  600. TestHelper(value, GuildPermission.Speak, true);
  601. TestHelper(value, GuildPermission.MuteMembers, true);
  602. TestHelper(value, GuildPermission.MoveMembers, true);
  603. TestHelper(value, GuildPermission.UseVAD, true);
  604. TestHelper(value, GuildPermission.ChangeNickname, true);
  605. TestHelper(value, GuildPermission.ManageNicknames, true);
  606. TestHelper(value, GuildPermission.ManageRoles, true);
  607. TestHelper(value, GuildPermission.ManageWebhooks, true);
  608. TestHelper(value, GuildPermission.ManageEmojis, true);
  609. return Task.CompletedTask;
  610. }
  611. /// <summary>
  612. /// Tests for the <see cref="Discord.Permissions" /> class.
  613. /// Test that that the Has method of <see cref="Discord.GuildPermissions" />
  614. /// returns the correct value when no permissions are set.
  615. /// </summary>
  616. /// <returns></returns>
  617. [Fact]
  618. public Task TestPermissionsHasGuildPermissionNone()
  619. {
  620. var value = GuildPermissions.None;
  621. TestHelper(value, GuildPermission.CreateInstantInvite);
  622. TestHelper(value, GuildPermission.KickMembers);
  623. TestHelper(value, GuildPermission.BanMembers);
  624. TestHelper(value, GuildPermission.Administrator);
  625. TestHelper(value, GuildPermission.ManageChannels);
  626. TestHelper(value, GuildPermission.ManageGuild);
  627. TestHelper(value, GuildPermission.AddReactions);
  628. TestHelper(value, GuildPermission.ViewAuditLog);
  629. TestHelper(value, GuildPermission.ViewChannel);
  630. TestHelper(value, GuildPermission.SendMessages);
  631. TestHelper(value, GuildPermission.SendTTSMessages);
  632. TestHelper(value, GuildPermission.ManageMessages);
  633. TestHelper(value, GuildPermission.EmbedLinks);
  634. TestHelper(value, GuildPermission.AttachFiles);
  635. TestHelper(value, GuildPermission.ReadMessageHistory);
  636. TestHelper(value, GuildPermission.MentionEveryone);
  637. TestHelper(value, GuildPermission.UseExternalEmojis);
  638. TestHelper(value, GuildPermission.Connect);
  639. TestHelper(value, GuildPermission.Speak);
  640. TestHelper(value, GuildPermission.MuteMembers);
  641. TestHelper(value, GuildPermission.MoveMembers);
  642. TestHelper(value, GuildPermission.UseVAD);
  643. TestHelper(value, GuildPermission.ChangeNickname);
  644. TestHelper(value, GuildPermission.ManageNicknames);
  645. TestHelper(value, GuildPermission.ManageRoles);
  646. TestHelper(value, GuildPermission.ManageWebhooks);
  647. TestHelper(value, GuildPermission.ManageEmojis);
  648. return Task.CompletedTask;
  649. }
  650. /// <summary>
  651. /// Tests for the <see cref="Discord.Permissions" /> class.
  652. /// Test that that the Has method of <see cref="Discord.GuildPermissions" />
  653. /// returns the correct value when webhook permissions are set.
  654. /// </summary>
  655. /// <returns></returns>
  656. [Fact]
  657. public Task TestPermissionsHasGuildPermissionWebhook()
  658. {
  659. var value = GuildPermissions.Webhook;
  660. TestHelper(value, GuildPermission.CreateInstantInvite);
  661. TestHelper(value, GuildPermission.KickMembers);
  662. TestHelper(value, GuildPermission.BanMembers);
  663. TestHelper(value, GuildPermission.Administrator);
  664. TestHelper(value, GuildPermission.ManageChannels);
  665. TestHelper(value, GuildPermission.ManageGuild);
  666. TestHelper(value, GuildPermission.AddReactions);
  667. TestHelper(value, GuildPermission.ViewAuditLog);
  668. TestHelper(value, GuildPermission.ViewChannel);
  669. TestHelper(value, GuildPermission.SendMessages, true);
  670. TestHelper(value, GuildPermission.SendTTSMessages, true);
  671. TestHelper(value, GuildPermission.ManageMessages);
  672. TestHelper(value, GuildPermission.EmbedLinks, true);
  673. TestHelper(value, GuildPermission.AttachFiles, true);
  674. TestHelper(value, GuildPermission.ReadMessageHistory);
  675. TestHelper(value, GuildPermission.MentionEveryone);
  676. TestHelper(value, GuildPermission.UseExternalEmojis);
  677. TestHelper(value, GuildPermission.Connect);
  678. TestHelper(value, GuildPermission.Speak);
  679. TestHelper(value, GuildPermission.MuteMembers);
  680. TestHelper(value, GuildPermission.MoveMembers);
  681. TestHelper(value, GuildPermission.UseVAD);
  682. TestHelper(value, GuildPermission.ChangeNickname);
  683. TestHelper(value, GuildPermission.ManageNicknames);
  684. TestHelper(value, GuildPermission.ManageRoles);
  685. TestHelper(value, GuildPermission.ManageWebhooks);
  686. TestHelper(value, GuildPermission.ManageEmojis);
  687. return Task.CompletedTask;
  688. }
  689. }
  690. }