AiredEpisodeOrderComparerTests.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using Emby.Server.Implementations.Sorting;
  5. using MediaBrowser.Controller.Entities;
  6. using MediaBrowser.Controller.Entities.Movies;
  7. using MediaBrowser.Controller.Entities.TV;
  8. using Xunit;
  9. namespace Jellyfin.Server.Implementations.Tests.Sorting
  10. {
  11. public class AiredEpisodeOrderComparerTests
  12. {
  13. [Theory]
  14. [ClassData(typeof(EpisodeBadData))]
  15. public void Compare_GivenNull_ThrowsArgumentNullException(BaseItem x, BaseItem y)
  16. {
  17. var cmp = new AiredEpisodeOrderComparer();
  18. Assert.Throws<ArgumentNullException>(() => cmp.Compare(x, y));
  19. }
  20. [Theory]
  21. [ClassData(typeof(EpisodeTestData))]
  22. public void AiredEpisodeOrderCompareTest(BaseItem x, BaseItem y, int expected)
  23. {
  24. var cmp = new AiredEpisodeOrderComparer();
  25. Assert.Equal(expected, cmp.Compare(x, y));
  26. if (expected == 1)
  27. {
  28. Assert.Equal(-expected, cmp.Compare(y, x));
  29. }
  30. }
  31. private class EpisodeBadData : IEnumerable<object?[]>
  32. {
  33. public IEnumerator<object?[]> GetEnumerator()
  34. {
  35. yield return new object?[] { null, new Episode() };
  36. yield return new object?[] { new Episode(), null };
  37. }
  38. IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
  39. }
  40. private class EpisodeTestData : IEnumerable<object?[]>
  41. {
  42. public IEnumerator<object?[]> GetEnumerator()
  43. {
  44. yield return new object?[]
  45. {
  46. new Movie(),
  47. new Movie(),
  48. 0
  49. };
  50. yield return new object?[]
  51. {
  52. new Movie(),
  53. new Episode(),
  54. 1
  55. };
  56. // Good cases
  57. yield return new object?[]
  58. {
  59. new Episode(),
  60. new Episode(),
  61. 0
  62. };
  63. yield return new object?[]
  64. {
  65. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  66. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  67. 0
  68. };
  69. yield return new object?[]
  70. {
  71. new Episode { ParentIndexNumber = 1, IndexNumber = 2 },
  72. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  73. 1
  74. };
  75. yield return new object?[]
  76. {
  77. new Episode { ParentIndexNumber = 2, IndexNumber = 1 },
  78. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  79. 1
  80. };
  81. // Good Specials
  82. yield return new object?[]
  83. {
  84. new Episode { ParentIndexNumber = 0, IndexNumber = 1 },
  85. new Episode { ParentIndexNumber = 0, IndexNumber = 1 },
  86. 0
  87. };
  88. yield return new object?[]
  89. {
  90. new Episode { ParentIndexNumber = 0, IndexNumber = 2 },
  91. new Episode { ParentIndexNumber = 0, IndexNumber = 1 },
  92. 1
  93. };
  94. // Specials to Episodes
  95. yield return new object?[]
  96. {
  97. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  98. new Episode { ParentIndexNumber = 0, IndexNumber = 1 },
  99. 1
  100. };
  101. yield return new object?[]
  102. {
  103. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  104. new Episode { ParentIndexNumber = 0, IndexNumber = 2 },
  105. 1
  106. };
  107. yield return new object?[]
  108. {
  109. new Episode { ParentIndexNumber = 1, IndexNumber = 2 },
  110. new Episode { ParentIndexNumber = 0, IndexNumber = 1 },
  111. 1
  112. };
  113. yield return new object?[]
  114. {
  115. new Episode { ParentIndexNumber = 1, IndexNumber = 2 },
  116. new Episode { ParentIndexNumber = 0, IndexNumber = 1 },
  117. 1
  118. };
  119. yield return new object?[]
  120. {
  121. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  122. new Episode { ParentIndexNumber = 0, IndexNumber = 2 },
  123. 1
  124. };
  125. yield return new object?[]
  126. {
  127. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsAfterSeasonNumber = 1 },
  128. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  129. 1
  130. };
  131. yield return new object?[]
  132. {
  133. new Episode { ParentIndexNumber = 3, IndexNumber = 1 },
  134. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsAfterSeasonNumber = 1 },
  135. 1
  136. };
  137. yield return new object?[]
  138. {
  139. new Episode { ParentIndexNumber = 3, IndexNumber = 1 },
  140. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsAfterSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },
  141. 1
  142. };
  143. yield return new object?[]
  144. {
  145. new Episode { ParentIndexNumber = 1, IndexNumber = 1 },
  146. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1 },
  147. 1
  148. };
  149. yield return new object?[]
  150. {
  151. new Episode { ParentIndexNumber = 1, IndexNumber = 2 },
  152. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },
  153. 1
  154. };
  155. yield return new object?[]
  156. {
  157. new Episode { ParentIndexNumber = 1 },
  158. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },
  159. 0
  160. };
  161. yield return new object?[]
  162. {
  163. new Episode { ParentIndexNumber = 1, IndexNumber = 3 },
  164. new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },
  165. 1
  166. };
  167. }
  168. IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
  169. }
  170. }
  171. }