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

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