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