mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-08-05 21:57:04 +02:00
130 lines
4.0 KiB
C#
130 lines
4.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using Emby.Naming.Common;
|
|
using Emby.Naming.Video;
|
|
using Emby.Server.Implementations.Library;
|
|
using MediaBrowser.Controller;
|
|
using MediaBrowser.Controller.Entities;
|
|
using MediaBrowser.Model.Entities;
|
|
using MediaBrowser.Model.IO;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace Jellyfin.Server.Implementations.Tests.Library;
|
|
|
|
public class CoreResolutionIgnoreRuleTest
|
|
{
|
|
private readonly CoreResolutionIgnoreRule _rule;
|
|
private readonly NamingOptions _namingOptions;
|
|
private readonly Mock<IServerApplicationPaths> _appPathsMock;
|
|
|
|
public CoreResolutionIgnoreRuleTest()
|
|
{
|
|
_namingOptions = new NamingOptions();
|
|
|
|
_namingOptions.AllExtrasTypesFolderNames.TryAdd("extras", ExtraType.Trailer);
|
|
|
|
_appPathsMock = new Mock<IServerApplicationPaths>();
|
|
_appPathsMock.SetupGet(x => x.RootFolderPath).Returns("/server/root");
|
|
|
|
_rule = new CoreResolutionIgnoreRule(_namingOptions, _appPathsMock.Object);
|
|
}
|
|
|
|
private FileSystemMetadata MakeFileSystemMetadata(string fullName, bool isDirectory = false)
|
|
=> new FileSystemMetadata { FullName = fullName, Name = Path.GetFileName(fullName), IsDirectory = isDirectory };
|
|
|
|
private BaseItem MakeParent(string name = "Parent", bool isTopParent = false, Type? type = null)
|
|
{
|
|
return type switch
|
|
{
|
|
Type t when t == typeof(Folder) => CreateMock<Folder>(name, isTopParent).Object,
|
|
Type t when t == typeof(AggregateFolder) => CreateMock<AggregateFolder>(name, isTopParent).Object,
|
|
Type t when t == typeof(UserRootFolder) => CreateMock<UserRootFolder>(name, isTopParent).Object,
|
|
_ => CreateMock<BaseItem>(name, isTopParent).Object
|
|
};
|
|
}
|
|
|
|
private static Mock<T> CreateMock<T>(string name, bool isTopParent)
|
|
where T : BaseItem
|
|
{
|
|
var mock = new Mock<T>();
|
|
mock.SetupGet(p => p.Name).Returns(name);
|
|
mock.SetupGet(p => p.IsTopParent).Returns(isTopParent);
|
|
return mock;
|
|
}
|
|
|
|
[Fact]
|
|
public void TestApplicationFolder()
|
|
{
|
|
Assert.False(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("/server/root/extras", isDirectory: true),
|
|
null));
|
|
|
|
Assert.False(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("/server/root/small.jpg"),
|
|
null));
|
|
}
|
|
|
|
[Fact]
|
|
public void TestTopLevelDirectory()
|
|
{
|
|
Assert.False(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("Series/Extras", true),
|
|
MakeParent(type: typeof(AggregateFolder))));
|
|
|
|
Assert.False(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("Series/Extras/Extras", true),
|
|
MakeParent(isTopParent: true)));
|
|
}
|
|
|
|
[Fact]
|
|
public void TestIgnorePatterns()
|
|
{
|
|
Assert.False(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("/Media/big.jpg"),
|
|
MakeParent()));
|
|
|
|
Assert.True(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("/Media/small.jpg"),
|
|
MakeParent()));
|
|
}
|
|
|
|
[Fact]
|
|
public void TestExtrasTypesFolderNames()
|
|
{
|
|
FileSystemMetadata fileSystemMetadata = MakeFileSystemMetadata("/Movies/Up/extras", true);
|
|
|
|
Assert.False(_rule.ShouldIgnore(
|
|
fileSystemMetadata,
|
|
MakeParent(type: typeof(AggregateFolder))));
|
|
|
|
Assert.False(_rule.ShouldIgnore(
|
|
fileSystemMetadata,
|
|
MakeParent(type: typeof(UserRootFolder))));
|
|
|
|
Assert.False(_rule.ShouldIgnore(
|
|
fileSystemMetadata,
|
|
null));
|
|
|
|
Assert.True(_rule.ShouldIgnore(
|
|
fileSystemMetadata,
|
|
MakeParent()));
|
|
|
|
Assert.True(_rule.ShouldIgnore(
|
|
fileSystemMetadata,
|
|
MakeParent(type: typeof(Folder))));
|
|
}
|
|
|
|
[Fact]
|
|
public void TestThemeSong()
|
|
{
|
|
Assert.False(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("/Movies/Up/intro.mp3"),
|
|
MakeParent()));
|
|
|
|
Assert.True(_rule.ShouldIgnore(
|
|
MakeFileSystemMetadata("/Movies/Up/theme.mp3"),
|
|
MakeParent()));
|
|
}
|
|
}
|