MultiVersionTests.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Emby.Naming.Common;
  4. using Emby.Naming.Video;
  5. using MediaBrowser.Model.IO;
  6. using Xunit;
  7. namespace Jellyfin.Naming.Tests.Video
  8. {
  9. public class MultiVersionTests
  10. {
  11. private readonly NamingOptions _namingOptions = new NamingOptions();
  12. // FIXME
  13. [Fact]
  14. public void TestMultiEdition1()
  15. {
  16. var files = new[]
  17. {
  18. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - 1080p.mkv",
  19. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past-trailer.mp4",
  20. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - [hsbs].mkv",
  21. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past [hsbs].mkv"
  22. };
  23. var resolver = GetResolver();
  24. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  25. {
  26. IsDirectory = false,
  27. FullName = i
  28. }).ToList()).ToList();
  29. Assert.Single(result);
  30. Assert.Single(result[0].Extras);
  31. }
  32. // FIXME
  33. [Fact]
  34. public void TestMultiEdition2()
  35. {
  36. var files = new[]
  37. {
  38. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - apple.mkv",
  39. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past-trailer.mp4",
  40. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past - banana.mkv",
  41. @"/movies/X-Men Days of Future Past/X-Men Days of Future Past [banana].mp4"
  42. };
  43. var resolver = GetResolver();
  44. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  45. {
  46. IsDirectory = false,
  47. FullName = i
  48. }).ToList()).ToList();
  49. Assert.Single(result);
  50. Assert.Single(result[0].Extras);
  51. Assert.Equal(2, result[0].AlternateVersions.Count);
  52. }
  53. [Fact]
  54. public void TestMultiEdition3()
  55. {
  56. var files = new[]
  57. {
  58. @"/movies/The Phantom of the Opera (1925)/The Phantom of the Opera (1925) - 1925 version.mkv",
  59. @"/movies/The Phantom of the Opera (1925)/The Phantom of the Opera (1925) - 1929 version.mkv"
  60. };
  61. var resolver = GetResolver();
  62. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  63. {
  64. IsDirectory = false,
  65. FullName = i
  66. }).ToList()).ToList();
  67. Assert.Single(result);
  68. Assert.Single(result[0].AlternateVersions);
  69. }
  70. // FIXME
  71. [Fact]
  72. public void TestLetterFolders()
  73. {
  74. var files = new[]
  75. {
  76. @"/movies/M/Movie 1.mkv",
  77. @"/movies/M/Movie 2.mkv",
  78. @"/movies/M/Movie 3.mkv",
  79. @"/movies/M/Movie 4.mkv",
  80. @"/movies/M/Movie 5.mkv",
  81. @"/movies/M/Movie 6.mkv",
  82. @"/movies/M/Movie 7.mkv"
  83. };
  84. var resolver = GetResolver();
  85. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  86. {
  87. IsDirectory = false,
  88. FullName = i
  89. }).ToList()).ToList();
  90. Assert.Equal(7, result.Count);
  91. Assert.Empty(result[0].Extras);
  92. Assert.Empty(result[0].AlternateVersions);
  93. }
  94. // FIXME
  95. [Fact]
  96. public void TestMultiVersionLimit()
  97. {
  98. var files = new[]
  99. {
  100. @"/movies/Movie/Movie.mkv",
  101. @"/movies/Movie/Movie-2.mkv",
  102. @"/movies/Movie/Movie-3.mkv",
  103. @"/movies/Movie/Movie-4.mkv",
  104. @"/movies/Movie/Movie-5.mkv",
  105. @"/movies/Movie/Movie-6.mkv",
  106. @"/movies/Movie/Movie-7.mkv",
  107. @"/movies/Movie/Movie-8.mkv"
  108. };
  109. var resolver = GetResolver();
  110. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  111. {
  112. IsDirectory = false,
  113. FullName = i
  114. }).ToList()).ToList();
  115. Assert.Single(result);
  116. Assert.Empty(result[0].Extras);
  117. Assert.Equal(7, result[0].AlternateVersions.Count);
  118. }
  119. // FIXME
  120. [Fact]
  121. public void TestMultiVersionLimit2()
  122. {
  123. var files = new[]
  124. {
  125. @"/movies/Mo/Movie 1.mkv",
  126. @"/movies/Mo/Movie 2.mkv",
  127. @"/movies/Mo/Movie 3.mkv",
  128. @"/movies/Mo/Movie 4.mkv",
  129. @"/movies/Mo/Movie 5.mkv",
  130. @"/movies/Mo/Movie 6.mkv",
  131. @"/movies/Mo/Movie 7.mkv",
  132. @"/movies/Mo/Movie 8.mkv",
  133. @"/movies/Mo/Movie 9.mkv"
  134. };
  135. var resolver = GetResolver();
  136. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  137. {
  138. IsDirectory = false,
  139. FullName = i
  140. }).ToList()).ToList();
  141. Assert.Equal(9, result.Count);
  142. Assert.Empty(result[0].Extras);
  143. Assert.Empty(result[0].AlternateVersions);
  144. }
  145. // FIXME
  146. [Fact]
  147. public void TestMultiVersion3()
  148. {
  149. var files = new[]
  150. {
  151. @"/movies/Movie/Movie 1.mkv",
  152. @"/movies/Movie/Movie 2.mkv",
  153. @"/movies/Movie/Movie 3.mkv",
  154. @"/movies/Movie/Movie 4.mkv",
  155. @"/movies/Movie/Movie 5.mkv"
  156. };
  157. var resolver = GetResolver();
  158. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  159. {
  160. IsDirectory = false,
  161. FullName = i
  162. }).ToList()).ToList();
  163. Assert.Equal(5, result.Count);
  164. Assert.Empty(result[0].Extras);
  165. Assert.Empty(result[0].AlternateVersions);
  166. }
  167. // FIXME
  168. [Fact]
  169. public void TestMultiVersion4()
  170. {
  171. // Test for false positive
  172. var files = new[]
  173. {
  174. @"/movies/Iron Man/Iron Man.mkv",
  175. @"/movies/Iron Man/Iron Man (2008).mkv",
  176. @"/movies/Iron Man/Iron Man (2009).mkv",
  177. @"/movies/Iron Man/Iron Man (2010).mkv",
  178. @"/movies/Iron Man/Iron Man (2011).mkv"
  179. };
  180. var resolver = GetResolver();
  181. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  182. {
  183. IsDirectory = false,
  184. FullName = i
  185. }).ToList()).ToList();
  186. Assert.Equal(5, result.Count);
  187. Assert.Empty(result[0].Extras);
  188. Assert.Empty(result[0].AlternateVersions);
  189. }
  190. [Fact]
  191. public void TestMultiVersion5()
  192. {
  193. var files = new[]
  194. {
  195. @"/movies/Iron Man/Iron Man.mkv",
  196. @"/movies/Iron Man/Iron Man-720p.mkv",
  197. @"/movies/Iron Man/Iron Man-test.mkv",
  198. @"/movies/Iron Man/Iron Man-bluray.mkv",
  199. @"/movies/Iron Man/Iron Man-3d.mkv",
  200. @"/movies/Iron Man/Iron Man-3d-hsbs.mkv",
  201. @"/movies/Iron Man/Iron Man-3d.hsbs.mkv",
  202. @"/movies/Iron Man/Iron Man[test].mkv",
  203. };
  204. var resolver = GetResolver();
  205. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  206. {
  207. IsDirectory = false,
  208. FullName = i
  209. }).ToList()).ToList();
  210. Assert.Single(result);
  211. Assert.Empty(result[0].Extras);
  212. Assert.Equal(7, result[0].AlternateVersions.Count);
  213. Assert.False(result[0].AlternateVersions[2].Is3D);
  214. Assert.True(result[0].AlternateVersions[3].Is3D);
  215. Assert.True(result[0].AlternateVersions[4].Is3D);
  216. }
  217. // FIXME
  218. [Fact]
  219. public void TestMultiVersion6()
  220. {
  221. var files = new[]
  222. {
  223. @"/movies/Iron Man/Iron Man.mkv",
  224. @"/movies/Iron Man/Iron Man - 720p.mkv",
  225. @"/movies/Iron Man/Iron Man - test.mkv",
  226. @"/movies/Iron Man/Iron Man - bluray.mkv",
  227. @"/movies/Iron Man/Iron Man - 3d.mkv",
  228. @"/movies/Iron Man/Iron Man - 3d-hsbs.mkv",
  229. @"/movies/Iron Man/Iron Man - 3d.hsbs.mkv",
  230. @"/movies/Iron Man/Iron Man [test].mkv"
  231. };
  232. var resolver = GetResolver();
  233. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  234. {
  235. IsDirectory = false,
  236. FullName = i
  237. }).ToList()).ToList();
  238. Assert.Single(result);
  239. Assert.Empty(result[0].Extras);
  240. Assert.Equal(7, result[0].AlternateVersions.Count);
  241. Assert.False(result[0].AlternateVersions[3].Is3D);
  242. Assert.True(result[0].AlternateVersions[4].Is3D);
  243. Assert.True(result[0].AlternateVersions[5].Is3D);
  244. }
  245. [Fact]
  246. public void TestMultiVersion7()
  247. {
  248. var files = new[]
  249. {
  250. @"/movies/Iron Man/Iron Man - B (2006).mkv",
  251. @"/movies/Iron Man/Iron Man - C (2007).mkv"
  252. };
  253. var resolver = GetResolver();
  254. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  255. {
  256. IsDirectory = false,
  257. FullName = i
  258. }).ToList()).ToList();
  259. Assert.Equal(2, result.Count);
  260. }
  261. [Fact]
  262. public void TestMultiVersion8()
  263. {
  264. var files = new[]
  265. {
  266. @"/movies/Iron Man/Iron Man.mkv",
  267. @"/movies/Iron Man/Iron Man_720p.mkv",
  268. @"/movies/Iron Man/Iron Man_test.mkv",
  269. @"/movies/Iron Man/Iron Man_bluray.mkv",
  270. @"/movies/Iron Man/Iron Man_3d.mkv",
  271. @"/movies/Iron Man/Iron Man_3d-hsbs.mkv",
  272. @"/movies/Iron Man/Iron Man_3d.hsbs.mkv"
  273. };
  274. var resolver = GetResolver();
  275. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  276. {
  277. IsDirectory = false,
  278. FullName = i
  279. }).ToList()).ToList();
  280. Assert.Single(result);
  281. Assert.Empty(result[0].Extras);
  282. Assert.Equal(6, result[0].AlternateVersions.Count);
  283. Assert.False(result[0].AlternateVersions[2].Is3D);
  284. Assert.True(result[0].AlternateVersions[3].Is3D);
  285. Assert.True(result[0].AlternateVersions[4].Is3D);
  286. }
  287. [Fact]
  288. public void TestMultiVersion9()
  289. {
  290. // Test for false positive
  291. var files = new[]
  292. {
  293. @"/movies/Iron Man/Iron Man (2007).mkv",
  294. @"/movies/Iron Man/Iron Man (2008).mkv",
  295. @"/movies/Iron Man/Iron Man (2009).mkv",
  296. @"/movies/Iron Man/Iron Man (2010).mkv",
  297. @"/movies/Iron Man/Iron Man (2011).mkv"
  298. };
  299. var resolver = GetResolver();
  300. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  301. {
  302. IsDirectory = false,
  303. FullName = i
  304. }).ToList()).ToList();
  305. Assert.Equal(5, result.Count);
  306. Assert.Empty(result[0].Extras);
  307. Assert.Empty(result[0].AlternateVersions);
  308. }
  309. [Fact]
  310. public void TestMultiVersion10()
  311. {
  312. var files = new[]
  313. {
  314. @"/movies/Blade Runner (1982)/Blade Runner (1982) [Final Cut] [1080p HEVC AAC].mkv",
  315. @"/movies/Blade Runner (1982)/Blade Runner (1982) [EE by ADM] [480p HEVC AAC,AAC,AAC].mkv"
  316. };
  317. var resolver = GetResolver();
  318. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  319. {
  320. IsDirectory = false,
  321. FullName = i
  322. }).ToList()).ToList();
  323. Assert.Single(result);
  324. Assert.Empty(result[0].Extras);
  325. Assert.Single(result[0].AlternateVersions);
  326. }
  327. [Fact]
  328. public void TestMultiVersion11()
  329. {
  330. var files = new[]
  331. {
  332. @"/movies/X-Men Apocalypse (2016)/X-Men Apocalypse (2016) [1080p] Blu-ray.x264.DTS.mkv",
  333. @"/movies/X-Men Apocalypse (2016)/X-Men Apocalypse (2016) [2160p] Blu-ray.x265.AAC.mkv"
  334. };
  335. var resolver = GetResolver();
  336. var result = resolver.Resolve(files.Select(i => new FileSystemMetadata
  337. {
  338. IsDirectory = false,
  339. FullName = i
  340. }).ToList()).ToList();
  341. Assert.Single(result);
  342. Assert.Empty(result[0].Extras);
  343. Assert.Single(result[0].AlternateVersions);
  344. }
  345. [Fact]
  346. public void TestEmptyList()
  347. {
  348. var resolver = GetResolver();
  349. var result = resolver.Resolve(new List<FileSystemMetadata>()).ToList();
  350. Assert.Empty(result);
  351. }
  352. private VideoListResolver GetResolver()
  353. {
  354. return new VideoListResolver(_namingOptions);
  355. }
  356. }
  357. }