CoreResolutionIgnoreRuleTest.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System;
  2. using System.IO;
  3. using Emby.Naming.Common;
  4. using Emby.Naming.Video;
  5. using Emby.Server.Implementations.Library;
  6. using MediaBrowser.Controller;
  7. using MediaBrowser.Controller.Entities;
  8. using MediaBrowser.Model.Entities;
  9. using MediaBrowser.Model.IO;
  10. using Moq;
  11. using Xunit;
  12. namespace Jellyfin.Server.Implementations.Tests.Library;
  13. public class CoreResolutionIgnoreRuleTest
  14. {
  15. private readonly CoreResolutionIgnoreRule _rule;
  16. private readonly NamingOptions _namingOptions;
  17. private readonly Mock<IServerApplicationPaths> _appPathsMock;
  18. public CoreResolutionIgnoreRuleTest()
  19. {
  20. _namingOptions = new NamingOptions();
  21. _namingOptions.AllExtrasTypesFolderNames.TryAdd("extras", ExtraType.Trailer);
  22. _appPathsMock = new Mock<IServerApplicationPaths>();
  23. _appPathsMock.SetupGet(x => x.RootFolderPath).Returns("/server/root");
  24. _rule = new CoreResolutionIgnoreRule(_namingOptions, _appPathsMock.Object);
  25. }
  26. private FileSystemMetadata MakeFileSystemMetadata(string fullName, bool isDirectory = false)
  27. => new FileSystemMetadata { FullName = fullName, Name = Path.GetFileName(fullName), IsDirectory = isDirectory };
  28. private BaseItem MakeParent(string name = "Parent", bool isTopParent = false, Type? type = null)
  29. {
  30. return type switch
  31. {
  32. Type t when t == typeof(Folder) => CreateMock<Folder>(name, isTopParent).Object,
  33. Type t when t == typeof(AggregateFolder) => CreateMock<AggregateFolder>(name, isTopParent).Object,
  34. Type t when t == typeof(UserRootFolder) => CreateMock<UserRootFolder>(name, isTopParent).Object,
  35. _ => CreateMock<BaseItem>(name, isTopParent).Object
  36. };
  37. }
  38. private static Mock<T> CreateMock<T>(string name, bool isTopParent)
  39. where T : BaseItem
  40. {
  41. var mock = new Mock<T>();
  42. mock.SetupGet(p => p.Name).Returns(name);
  43. mock.SetupGet(p => p.IsTopParent).Returns(isTopParent);
  44. return mock;
  45. }
  46. [Fact]
  47. public void TestApplicationFolder()
  48. {
  49. Assert.False(_rule.ShouldIgnore(
  50. MakeFileSystemMetadata("/server/root/extras", isDirectory: true),
  51. null));
  52. Assert.False(_rule.ShouldIgnore(
  53. MakeFileSystemMetadata("/server/root/small.jpg"),
  54. null));
  55. }
  56. [Fact]
  57. public void TestTopLevelDirectory()
  58. {
  59. Assert.False(_rule.ShouldIgnore(
  60. MakeFileSystemMetadata("Series/Extras", true),
  61. MakeParent(type: typeof(AggregateFolder))));
  62. Assert.False(_rule.ShouldIgnore(
  63. MakeFileSystemMetadata("Series/Extras/Extras", true),
  64. MakeParent(isTopParent: true)));
  65. }
  66. [Fact]
  67. public void TestIgnorePatterns()
  68. {
  69. Assert.False(_rule.ShouldIgnore(
  70. MakeFileSystemMetadata("/Media/big.jpg"),
  71. MakeParent()));
  72. Assert.True(_rule.ShouldIgnore(
  73. MakeFileSystemMetadata("/Media/small.jpg"),
  74. MakeParent()));
  75. }
  76. [Fact]
  77. public void TestExtrasTypesFolderNames()
  78. {
  79. FileSystemMetadata fileSystemMetadata = MakeFileSystemMetadata("/Movies/Up/extras", true);
  80. Assert.False(_rule.ShouldIgnore(
  81. fileSystemMetadata,
  82. MakeParent(type: typeof(AggregateFolder))));
  83. Assert.False(_rule.ShouldIgnore(
  84. fileSystemMetadata,
  85. MakeParent(type: typeof(UserRootFolder))));
  86. Assert.False(_rule.ShouldIgnore(
  87. fileSystemMetadata,
  88. null));
  89. Assert.True(_rule.ShouldIgnore(
  90. fileSystemMetadata,
  91. MakeParent()));
  92. Assert.True(_rule.ShouldIgnore(
  93. fileSystemMetadata,
  94. MakeParent(type: typeof(Folder))));
  95. }
  96. [Fact]
  97. public void TestThemeSong()
  98. {
  99. Assert.False(_rule.ShouldIgnore(
  100. MakeFileSystemMetadata("/Movies/Up/intro.mp3"),
  101. MakeParent()));
  102. Assert.True(_rule.ShouldIgnore(
  103. MakeFileSystemMetadata("/Movies/Up/theme.mp3"),
  104. MakeParent()));
  105. }
  106. }