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.Channels.cs 7.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. using Discord.Rest;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Xunit;
  5. namespace Discord
  6. {
  7. public partial class Tests
  8. {
  9. internal static async Task Migration_CreateTextChannels(DiscordRestClient client, RestGuild guild)
  10. {
  11. var text1 = await guild.GetDefaultChannelAsync();
  12. var text2 = await guild.CreateTextChannelAsync("text2");
  13. var text3 = await guild.CreateTextChannelAsync("text3");
  14. var text4 = await guild.CreateTextChannelAsync("text4");
  15. var text5 = await guild.CreateTextChannelAsync("text5");
  16. // create a channel category
  17. var cat1 = await guild.CreateCategoryChannelAsync("cat1");
  18. if (text1 == null)
  19. {
  20. // the guild did not have a default channel, so make a new one
  21. text1 = await guild.CreateTextChannelAsync("default");
  22. }
  23. //Modify #general
  24. await text1.ModifyAsync(x =>
  25. {
  26. x.Name = "text1";
  27. x.Position = 1;
  28. x.Topic = "Topic1";
  29. x.CategoryId = cat1.Id;
  30. });
  31. await text2.ModifyAsync(x =>
  32. {
  33. x.Position = 2;
  34. x.CategoryId = cat1.Id;
  35. });
  36. await text3.ModifyAsync(x =>
  37. {
  38. x.Topic = "Topic2";
  39. });
  40. await text4.ModifyAsync(x =>
  41. {
  42. x.Position = 3;
  43. x.Topic = "Topic2";
  44. });
  45. await text5.ModifyAsync(x =>
  46. {
  47. });
  48. CheckTextChannels(guild, text1, text2, text3, text4, text5);
  49. }
  50. [Fact]
  51. public async Task TestTextChannels()
  52. {
  53. CheckTextChannels(_guild, (await _guild.GetTextChannelsAsync()).ToArray());
  54. }
  55. private static void CheckTextChannels(RestGuild guild, params RestTextChannel[] textChannels)
  56. {
  57. Assert.Equal(5, textChannels.Length);
  58. Assert.All(textChannels, x =>
  59. {
  60. Assert.NotNull(x);
  61. Assert.NotEqual(0UL, x.Id);
  62. Assert.True(x.Position >= 0);
  63. });
  64. var text1 = textChannels.FirstOrDefault(x => x.Name == "text1");
  65. var text2 = textChannels.FirstOrDefault(x => x.Name == "text2");
  66. var text3 = textChannels.FirstOrDefault(x => x.Name == "text3");
  67. var text4 = textChannels.FirstOrDefault(x => x.Name == "text4");
  68. var text5 = textChannels.FirstOrDefault(x => x.Name == "text5");
  69. Assert.NotNull(text1);
  70. //Assert.True(text1.Id == guild.DefaultChannelId);
  71. Assert.Equal(1, text1.Position);
  72. Assert.Equal("Topic1", text1.Topic);
  73. Assert.NotNull(text2);
  74. Assert.Equal(2, text2.Position);
  75. Assert.Null(text2.Topic);
  76. Assert.NotNull(text3);
  77. Assert.Equal("Topic2", text3.Topic);
  78. Assert.NotNull(text4);
  79. Assert.Equal(3, text4.Position);
  80. Assert.Equal("Topic2", text4.Topic);
  81. Assert.NotNull(text5);
  82. Assert.Null(text5.Topic);
  83. }
  84. internal static async Task Migration_CreateVoiceChannels(DiscordRestClient client, RestGuild guild)
  85. {
  86. var voice1 = await guild.CreateVoiceChannelAsync("voice1");
  87. var voice2 = await guild.CreateVoiceChannelAsync("voice2");
  88. var voice3 = await guild.CreateVoiceChannelAsync("voice3");
  89. var cat2 = await guild.CreateCategoryChannelAsync("cat2");
  90. await voice1.ModifyAsync(x =>
  91. {
  92. x.Bitrate = 96000;
  93. x.Position = 1;
  94. x.CategoryId = cat2.Id;
  95. });
  96. await voice2.ModifyAsync(x =>
  97. {
  98. x.UserLimit = null;
  99. });
  100. await voice3.ModifyAsync(x =>
  101. {
  102. x.Bitrate = 8000;
  103. x.Position = 1;
  104. x.UserLimit = 16;
  105. x.CategoryId = cat2.Id;
  106. });
  107. CheckVoiceChannels(voice1, voice2, voice3);
  108. }
  109. [Fact]
  110. public async Task TestVoiceChannels()
  111. {
  112. CheckVoiceChannels((await _guild.GetVoiceChannelsAsync()).ToArray());
  113. }
  114. private static void CheckVoiceChannels(params RestVoiceChannel[] voiceChannels)
  115. {
  116. Assert.Equal(3, voiceChannels.Length);
  117. Assert.All(voiceChannels, x =>
  118. {
  119. Assert.NotNull(x);
  120. Assert.NotEqual(0UL, x.Id);
  121. Assert.NotEqual(0, x.UserLimit);
  122. Assert.True(x.Bitrate > 0);
  123. Assert.True(x.Position >= 0);
  124. });
  125. var voice1 = voiceChannels.FirstOrDefault(x => x.Name == "voice1");
  126. var voice2 = voiceChannels.FirstOrDefault(x => x.Name == "voice2");
  127. var voice3 = voiceChannels.FirstOrDefault(x => x.Name == "voice3");
  128. Assert.NotNull(voice1);
  129. Assert.Equal(96000, voice1.Bitrate);
  130. Assert.Equal(1, voice1.Position);
  131. Assert.NotNull(voice2);
  132. Assert.Null(voice2.UserLimit);
  133. Assert.NotNull(voice3);
  134. Assert.Equal(8000, voice3.Bitrate);
  135. Assert.Equal(1, voice3.Position);
  136. Assert.Equal(16, voice3.UserLimit);
  137. }
  138. [Fact]
  139. public async Task TestChannelCategories()
  140. {
  141. // (await _guild.GetVoiceChannelsAsync()).ToArray()
  142. var channels = await _guild.GetCategoryChannelsAsync();
  143. await CheckChannelCategories(channels.ToArray(), (await _guild.GetChannelsAsync()).ToArray());
  144. }
  145. private async Task CheckChannelCategories(RestCategoryChannel[] categories, RestGuildChannel[] allChannels)
  146. {
  147. // 2 categories
  148. Assert.Equal(2, categories.Length);
  149. var cat1 = categories.FirstOrDefault(x => x.Name == "cat1");
  150. var cat2 = categories.FirstOrDefault(x => x.Name == "cat2");
  151. Assert.NotNull(cat1);
  152. Assert.NotNull(cat2);
  153. // get text1, text2, ensure they have category id == cat1
  154. var text1 = allChannels.FirstOrDefault(x => x.Name == "text1") as RestTextChannel;
  155. var text2 = allChannels.FirstOrDefault(x => x.Name == "text2") as RestTextChannel;
  156. Assert.NotNull(text1);
  157. Assert.NotNull(text2);
  158. // check that CategoryID and .GetCategoryAsync work correctly
  159. // for both of the text channels
  160. Assert.Equal(text1.CategoryId, cat1.Id);
  161. var text1Cat = await text1.GetCategoryAsync();
  162. Assert.Equal(text1Cat.Id, cat1.Id);
  163. Assert.Equal(text1Cat.Name, cat1.Name);
  164. Assert.Equal(text2.CategoryId, cat1.Id);
  165. var text2Cat = await text2.GetCategoryAsync();
  166. Assert.Equal(text2Cat.Id, cat1.Id);
  167. Assert.Equal(text2Cat.Name, cat1.Name);
  168. // do the same for the voice channels
  169. var voice1 = allChannels.FirstOrDefault(x => x.Name == "voice1") as RestVoiceChannel;
  170. var voice3 = allChannels.FirstOrDefault(x => x.Name == "voice3") as RestVoiceChannel;
  171. Assert.NotNull(voice1);
  172. Assert.NotNull(voice3);
  173. Assert.Equal(voice1.CategoryId, cat2.Id);
  174. var voice1Cat = await voice1.GetCategoryAsync();
  175. Assert.Equal(voice1Cat.Id, cat2.Id);
  176. Assert.Equal(voice1Cat.Name, cat2.Name);
  177. Assert.Equal(voice3.CategoryId, cat2.Id);
  178. var voice3Cat = await voice3.GetCategoryAsync();
  179. Assert.Equal(voice3Cat.Id, cat2.Id);
  180. Assert.Equal(voice3Cat.Name, cat2.Name);
  181. }
  182. }
  183. }