diff options
Diffstat (limited to 'tests')
20 files changed, 195 insertions, 131 deletions
diff --git a/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj b/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj index 8476c935e..aaa6b5d90 100644 --- a/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj +++ b/tests/Jellyfin.Common.Tests/Jellyfin.Common.Tests.csproj @@ -16,7 +16,7 @@ <PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" /> <PackageReference Include="coverlet.collector" Version="3.1.0" /> - <PackageReference Include="FsCheck.Xunit" Version="2.16.3" /> + <PackageReference Include="FsCheck.Xunit" Version="2.16.4" /> </ItemGroup> <!-- Code Analyzers --> diff --git a/tests/Jellyfin.Extensions.Tests/Jellyfin.Extensions.Tests.csproj b/tests/Jellyfin.Extensions.Tests/Jellyfin.Extensions.Tests.csproj index 3dcc00ff0..2a3918469 100644 --- a/tests/Jellyfin.Extensions.Tests/Jellyfin.Extensions.Tests.csproj +++ b/tests/Jellyfin.Extensions.Tests/Jellyfin.Extensions.Tests.csproj @@ -17,7 +17,7 @@ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> - <PackageReference Include="FsCheck.Xunit" Version="2.16.3" /> + <PackageReference Include="FsCheck.Xunit" Version="2.16.4" /> </ItemGroup> <!-- Code Analyzers --> diff --git a/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs b/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs new file mode 100644 index 000000000..7c3a7ff6c --- /dev/null +++ b/tests/Jellyfin.Model.Tests/Drawing/ImageFormatExtensionsTests.cs @@ -0,0 +1,33 @@ +using System; +using System.ComponentModel; +using MediaBrowser.Model.Drawing; +using Xunit; + +namespace Jellyfin.Model.Drawing; + +public static class ImageFormatExtensionsTests +{ + private static TheoryData<ImageFormat> GetAllImageFormats() + { + var theoryTypes = new TheoryData<ImageFormat>(); + foreach (var x in Enum.GetValues<ImageFormat>()) + { + theoryTypes.Add(x); + } + + return theoryTypes; + } + + [Theory] + [MemberData(nameof(GetAllImageFormats))] + public static void GetMimeType_Valid_Valid(ImageFormat format) + => Assert.Null(Record.Exception(() => format.GetMimeType())); + + [Theory] + [InlineData((ImageFormat)int.MinValue)] + [InlineData((ImageFormat)int.MaxValue)] + [InlineData((ImageFormat)(-1))] + [InlineData((ImageFormat)5)] + public static void GetMimeType_Valid_ThrowsInvalidEnumArgumentException(ImageFormat format) + => Assert.Throws<InvalidEnumArgumentException>(() => format.GetMimeType()); +} diff --git a/tests/Jellyfin.Model.Tests/Jellyfin.Model.Tests.csproj b/tests/Jellyfin.Model.Tests/Jellyfin.Model.Tests.csproj index d4a1a30c3..3b6259abd 100644 --- a/tests/Jellyfin.Model.Tests/Jellyfin.Model.Tests.csproj +++ b/tests/Jellyfin.Model.Tests/Jellyfin.Model.Tests.csproj @@ -11,7 +11,7 @@ <PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" /> <PackageReference Include="coverlet.collector" Version="3.1.0" /> - <PackageReference Include="FsCheck.Xunit" Version="2.16.3" /> + <PackageReference Include="FsCheck.Xunit" Version="2.16.4" /> </ItemGroup> <!-- Code Analyzers --> diff --git a/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs index 356ba216d..e81c5152e 100644 --- a/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/AbsoluteEpisodeNumberTests.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class AbsoluteEpisodeNumberTests { + private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); + [Theory] [InlineData("The Simpsons/12.avi", 12)] [InlineData("The Simpsons/The Simpsons 12.avi", 12)] @@ -16,10 +18,7 @@ namespace Jellyfin.Naming.Tests.TV [InlineData("The Simpsons/The Simpsons 101.avi", 101)] public void GetEpisodeNumberFromFileTest(string path, int episodeNumber) { - var options = new NamingOptions(); - - var result = new EpisodeResolver(options) - .Resolve(path, false, null, null, true); + var result = _resolver.Resolve(path, false, null, null, true); Assert.Equal(episodeNumber, result?.EpisodeNumber); } diff --git a/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs index 2937914b9..72052a23c 100644 --- a/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/DailyEpisodeTests.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class DailyEpisodeTests { + private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); + [Theory] [InlineData(@"/server/anything_1996.11.14.mp4", "anything", 1996, 11, 14)] [InlineData(@"/server/anything_1996-11-14.mp4", "anything", 1996, 11, 14)] @@ -16,10 +18,7 @@ namespace Jellyfin.Naming.Tests.TV // TODO: [InlineData(@"/server/Last Man Standing_KTLADT_2018_05_25_01_28_00.wtv", "Last Man Standing", 2018, 05, 25)] public void Test(string path, string seriesName, int? year, int? month, int? day) { - var options = new NamingOptions(); - - var result = new EpisodeResolver(options) - .Resolve(path, false); + var result = _resolver.Resolve(path, false); Assert.Null(result?.SeasonNumber); Assert.Null(result?.EpisodeNumber); diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs index 8bd1a43d6..1da5a30a8 100644 --- a/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/EpisodeNumberWithoutSeasonTests.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class EpisodeNumberWithoutSeasonTests { + private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); + [Theory] [InlineData(8, @"The Simpsons/The Simpsons.S25E08.Steal this episode.mp4")] [InlineData(2, @"The Simpsons/The Simpsons - 02 - Ep Name.avi")] @@ -24,10 +26,7 @@ namespace Jellyfin.Naming.Tests.TV // TODO: [InlineData(13, @"Case Closed (1996-2007)/Case Closed - 13.mkv")] public void GetEpisodeNumberFromFileTest(int episodeNumber, string path) { - var options = new NamingOptions(); - - var result = new EpisodeResolver(options) - .Resolve(path, false); + var result = _resolver.Resolve(path, false); Assert.Equal(episodeNumber, result?.EpisodeNumber); } diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs index 12fc19bc4..af219b118 100644 --- a/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs +++ b/tests/Jellyfin.Naming.Tests/TV/EpisodePathParserTest.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class EpisodePathParserTest { + private readonly NamingOptions _namingOptions = new NamingOptions(); + [Theory] [InlineData("/media/Foo/Foo-S01E01", true, "Foo", 1, 1)] [InlineData("/media/Foo - S04E011", true, "Foo", 4, 11)] @@ -36,8 +38,7 @@ namespace Jellyfin.Naming.Tests.TV // TODO: [InlineData("/The.Legend.of.Condor.Heroes.2017.V2.web-dl.1080p.h264.aac-hdctv/The.Legend.of.Condor.Heroes.2017.E07.V2.web-dl.1080p.h264.aac-hdctv.mkv", "The Legend of Condor Heroes 2017", 1, 7)] public void ParseEpisodesCorrectly(string path, bool isDirectory, string name, int season, int episode) { - NamingOptions o = new NamingOptions(); - EpisodePathParser p = new EpisodePathParser(o); + EpisodePathParser p = new EpisodePathParser(_namingOptions); var res = p.Parse(path, isDirectory); Assert.True(res.Success); @@ -50,8 +51,7 @@ namespace Jellyfin.Naming.Tests.TV [InlineData("/test/01-03.avi", true, true)] public void EpisodePathParserTest_DifferentExpressionsParameters(string path, bool? isNamed, bool? isOptimistic) { - NamingOptions o = new NamingOptions(); - EpisodePathParser p = new EpisodePathParser(o); + EpisodePathParser p = new EpisodePathParser(_namingOptions); var res = p.Parse(path, false, isNamed, isOptimistic); Assert.True(res.Success); @@ -60,8 +60,7 @@ namespace Jellyfin.Naming.Tests.TV [Fact] public void EpisodePathParserTest_FalsePositivePixelRate() { - NamingOptions o = new NamingOptions(); - EpisodePathParser p = new EpisodePathParser(o); + EpisodePathParser p = new EpisodePathParser(_namingOptions); var res = p.Parse("Series Special (1920x1080).mkv", false); Assert.False(res.Success); @@ -70,14 +69,14 @@ namespace Jellyfin.Naming.Tests.TV [Fact] public void EpisodeResolverTest_WrongExtension() { - var res = new EpisodeResolver(new NamingOptions()).Resolve("test.mp3", false); + var res = new EpisodeResolver(_namingOptions).Resolve("test.mp3", false); Assert.Null(res); } [Fact] public void EpisodeResolverTest_WrongExtensionStub() { - var res = new EpisodeResolver(new NamingOptions()).Resolve("dvd.disc", false); + var res = new EpisodeResolver(_namingOptions).Resolve("dvd.disc", false); Assert.NotNull(res); Assert.True(res!.IsStub); } diff --git a/tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs b/tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs deleted file mode 100644 index d0418a49e..000000000 --- a/tests/Jellyfin.Naming.Tests/TV/EpisodeWithoutSeasonTests.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Emby.Naming.Common; -using Emby.Naming.TV; -using Xunit; - -namespace Jellyfin.Naming.Tests.TV -{ - public class EpisodeWithoutSeasonTests - { - // TODO: [Theory] - // TODO: [InlineData(@"/server/anything_ep02.mp4", "anything", null, 2)] - // TODO: [InlineData(@"/server/anything_ep_02.mp4", "anything", null, 2)] - // TODO: [InlineData(@"/server/anything_part.II.mp4", "anything", null, null)] - // TODO: [InlineData(@"/server/anything_pt.II.mp4", "anything", null, null)] - // TODO: [InlineData(@"/server/anything_pt_II.mp4", "anything", null, null)] - public void Test(string path, string seriesName, int? seasonNumber, int? episodeNumber) - { - var options = new NamingOptions(); - - var result = new EpisodeResolver(options) - .Resolve(path, false); - - Assert.Equal(seasonNumber, result?.SeasonNumber); - Assert.Equal(episodeNumber, result?.EpisodeNumber); - Assert.Equal(seriesName, result?.SeriesName, ignoreCase: true); - } - } -} diff --git a/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs index 58ea0bec5..ffaa64c3f 100644 --- a/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/MultiEpisodeTests.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class MultiEpisodeTests { + private readonly EpisodePathParser _episodePathParser = new EpisodePathParser(new NamingOptions()); + [Theory] [InlineData(@"Season 1/4x01 – 20 Hours in America (1).mkv", null)] [InlineData(@"Season 1/01x02 blah.avi", null)] @@ -69,10 +71,7 @@ namespace Jellyfin.Naming.Tests.TV [InlineData(@"Season 1/MOONLIGHTING_s01e01-e04", 4)] public void TestGetEndingEpisodeNumberFromFile(string filename, int? endingEpisodeNumber) { - var options = new NamingOptions(); - - var result = new EpisodePathParser(options) - .Parse(filename, false); + var result = _episodePathParser.Parse(filename, false); Assert.Equal(result.EndingEpisodeNumber, endingEpisodeNumber); } diff --git a/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs index 4837e3a3b..58ec1b5d2 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeasonNumberTests.cs @@ -6,7 +6,7 @@ namespace Jellyfin.Naming.Tests.TV { public class SeasonNumberTests { - private readonly NamingOptions _namingOptions = new NamingOptions(); + private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); [Theory] [InlineData("The Daily Show/The Daily Show 25x22 - [WEBDL-720p][AAC 2.0][x264] Noah Baumbach-TBS.mkv", 25)] @@ -56,8 +56,7 @@ namespace Jellyfin.Naming.Tests.TV // TODO: [InlineData(@"Seinfeld/Seinfeld 0807 The Checks.avi", 8)] public void GetSeasonNumberFromEpisodeFileTest(string path, int? expected) { - var result = new EpisodeResolver(_namingOptions) - .Resolve(path, false); + var result = _resolver.Resolve(path, false); Assert.Equal(expected, result?.SeasonNumber); } diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs index ceb5f8b73..e6b0409db 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeriesPathParserTest.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class SeriesPathParserTest { + private readonly NamingOptions _namingOptions = new NamingOptions(); + [Theory] [InlineData("The.Show.S01", "The.Show")] [InlineData("/The.Show.S01", "The.Show")] @@ -18,8 +20,7 @@ namespace Jellyfin.Naming.Tests.TV [InlineData("/something/The Show/S01", "The Show")] public void SeriesPathParserParseTest(string path, string name) { - NamingOptions o = new NamingOptions(); - var res = SeriesPathParser.Parse(o, path); + var res = SeriesPathParser.Parse(_namingOptions, path); Assert.Equal(name, res.SeriesName); Assert.True(res.Success); diff --git a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs index 97f4b4058..84758c9c3 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SeriesResolverTests.cs @@ -6,6 +6,8 @@ namespace Jellyfin.Naming.Tests.TV { public class SeriesResolverTests { + private readonly NamingOptions _namingOptions = new NamingOptions(); + [Theory] [InlineData("The.Show.S01", "The Show")] [InlineData("The.Show.S01.COMPLETE", "The Show")] @@ -19,8 +21,7 @@ namespace Jellyfin.Naming.Tests.TV [InlineData("/some/path/The Show s02e10 the episode 720p hdtv", "The Show")] public void SeriesResolverResolveTest(string path, string name) { - NamingOptions o = new NamingOptions(); - var res = SeriesResolver.Resolve(o, path); + var res = SeriesResolver.Resolve(_namingOptions, path); Assert.Equal(name, res.Name); } diff --git a/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs b/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs index 6d49ac832..fa46ecc3a 100644 --- a/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs +++ b/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs @@ -7,6 +7,8 @@ namespace Jellyfin.Naming.Tests.TV { public class SimpleEpisodeTests { + private readonly EpisodeResolver _resolver = new EpisodeResolver(new NamingOptions()); + [Theory] [InlineData("/server/anything_s01e02.mp4", "anything", 1, 2)] [InlineData("/server/anything_s1e2.mp4", "anything", 1, 2)] @@ -23,39 +25,25 @@ namespace Jellyfin.Naming.Tests.TV [InlineData(@"Love.Death.and.Robots.S01.1080p.NF.WEB-DL.DDP5.1.x264-NTG/Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv", "Love.Death.and.Robots", 1, 1)] [InlineData("[YuiSubs] Tensura Nikki - Tensei Shitara Slime Datta Ken/[YuiSubs] Tensura Nikki - Tensei Shitara Slime Datta Ken - 12 (NVENC H.265 1080p).mkv", "Tensura Nikki - Tensei Shitara Slime Datta Ken", null, 12)] [InlineData("[Baz-Bar]Foo - 01 - 12[1080p][Multiple Subtitle]/[Baz-Bar] Foo - 05 [1080p][Multiple Subtitle].mkv", "Foo", null, 5)] + [InlineData("Series/4-12 - The Woman.mp4", "", 4, 12, 12)] // TODO: [InlineData("E:\\Anime\\Yahari Ore no Seishun Love Comedy wa Machigatteiru\\Yahari Ore no Seishun Love Comedy wa Machigatteiru. Zoku\\Oregairu Zoku 11 - Hayama Hayato Always Renconds to Everyone's Expectations..mkv", "Yahari Ore no Seishun Love Comedy wa Machigatteiru", null, 11)] // TODO: [InlineData(@"/Library/Series/The Grand Tour (2016)/Season 1/S01E01 The Holy Trinity.mkv", "The Grand Tour", 1, 1)] - public void TestSimple(string path, string seriesName, int? seasonNumber, int? episodeNumber) + public void TestSimple(string path, string seriesName, int? seasonNumber, int? episodeNumber, int? episodeEndNumber = null) { - Test(path, seriesName, seasonNumber, episodeNumber, null); - } - - [Theory] - [InlineData("Series/4-12 - The Woman.mp4", "", 4, 12, 12)] - public void TestWithPossibleEpisodeEnd(string path, string seriesName, int? seasonNumber, int? episodeNumber, int? episodeEndNumber) - { - Test(path, seriesName, seasonNumber, episodeNumber, episodeEndNumber); - } - - private void Test(string path, string seriesName, int? seasonNumber, int? episodeNumber, int? episodeEndNumber) - { - var options = new NamingOptions(); - - var result = new EpisodeResolver(options) - .Resolve(path, false); + var result = _resolver.Resolve(path, false); Assert.NotNull(result); - Assert.Equal(seasonNumber, result?.SeasonNumber); - Assert.Equal(episodeNumber, result?.EpisodeNumber); - Assert.Equal(seriesName, result?.SeriesName, true); - Assert.Equal(path, result?.Path); + Assert.Equal(seasonNumber, result!.SeasonNumber); + Assert.Equal(episodeNumber, result!.EpisodeNumber); + Assert.Equal(seriesName, result!.SeriesName, true); + Assert.Equal(path, result!.Path); Assert.Equal(Path.GetExtension(path).Substring(1), result?.Container); - Assert.Null(result?.Format3D); - Assert.False(result?.Is3D); - Assert.False(result?.IsStub); - Assert.Null(result?.StubType); - Assert.Equal(episodeEndNumber, result?.EndingEpisodeNumber); - Assert.False(result?.IsByDate); + Assert.Null(result!.Format3D); + Assert.False(result!.Is3D); + Assert.False(result!.IsStub); + Assert.Null(result!.StubType); + Assert.Equal(episodeEndNumber, result!.EndingEpisodeNumber); + Assert.False(result!.IsByDate); } } } diff --git a/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs b/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs index 24f9bf98d..731580e0c 100644 --- a/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs +++ b/tests/Jellyfin.Naming.Tests/Video/ExtraTests.cs @@ -82,7 +82,7 @@ namespace Jellyfin.Naming.Tests.Video private void Test(string input, ExtraType? expectedType) { - var extraType = ExtraResolver.GetExtraInfo(input, _videoOptions).ExtraType; + var extraType = ExtraRuleResolver.GetExtraInfo(input, _videoOptions).ExtraType; Assert.Equal(expectedType, extraType); } @@ -92,7 +92,7 @@ namespace Jellyfin.Naming.Tests.Video { var rule = new ExtraRule(ExtraType.Unknown, ExtraRuleType.Regex, @"([eE]x(tra)?\.\w+)", MediaType.Video); var options = new NamingOptions { VideoExtraRules = new[] { rule } }; - var res = ExtraResolver.GetExtraInfo("extra.mp4", options); + var res = ExtraRuleResolver.GetExtraInfo("extra.mp4", options); Assert.Equal(rule, res.Rule); } diff --git a/tests/Jellyfin.Networking.Tests/Jellyfin.Networking.Tests.csproj b/tests/Jellyfin.Networking.Tests/Jellyfin.Networking.Tests.csproj index 87acc7f68..7f9b60b9e 100644 --- a/tests/Jellyfin.Networking.Tests/Jellyfin.Networking.Tests.csproj +++ b/tests/Jellyfin.Networking.Tests/Jellyfin.Networking.Tests.csproj @@ -16,7 +16,7 @@ <PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" /> <PackageReference Include="coverlet.collector" Version="3.1.0" /> - <PackageReference Include="FsCheck.Xunit" Version="2.16.3" /> + <PackageReference Include="FsCheck.Xunit" Version="2.16.4" /> <PackageReference Include="Moq" Version="4.16.1" /> </ItemGroup> diff --git a/tests/Jellyfin.Server.Implementations.Tests/HttpServer/WebSocketConnectionTests.cs b/tests/Jellyfin.Server.Implementations.Tests/HttpServer/WebSocketConnectionTests.cs index 1ce2096ea..ef8f7cd90 100644 --- a/tests/Jellyfin.Server.Implementations.Tests/HttpServer/WebSocketConnectionTests.cs +++ b/tests/Jellyfin.Server.Implementations.Tests/HttpServer/WebSocketConnectionTests.cs @@ -13,7 +13,7 @@ namespace Jellyfin.Server.Implementations.Tests.HttpServer [Fact] public void DeserializeWebSocketMessage_SingleSegment_Success() { - var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!, null!); + var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!); var bytes = File.ReadAllBytes("Test Data/HttpServer/ForceKeepAlive.json"); con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(bytes), out var bytesConsumed); Assert.Equal(109, bytesConsumed); @@ -23,7 +23,7 @@ namespace Jellyfin.Server.Implementations.Tests.HttpServer public void DeserializeWebSocketMessage_MultipleSegments_Success() { const int SplitPos = 64; - var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!, null!); + var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!); var bytes = File.ReadAllBytes("Test Data/HttpServer/ForceKeepAlive.json"); var seg1 = new BufferSegment(new Memory<byte>(bytes, 0, SplitPos)); var seg2 = seg1.Append(new Memory<byte>(bytes, SplitPos, bytes.Length - SplitPos)); @@ -34,7 +34,7 @@ namespace Jellyfin.Server.Implementations.Tests.HttpServer [Fact] public void DeserializeWebSocketMessage_ValidPartial_Success() { - var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!, null!); + var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!); var bytes = File.ReadAllBytes("Test Data/HttpServer/ValidPartial.json"); con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(bytes), out var bytesConsumed); Assert.Equal(109, bytesConsumed); @@ -43,7 +43,7 @@ namespace Jellyfin.Server.Implementations.Tests.HttpServer [Fact] public void DeserializeWebSocketMessage_Partial_ThrowJsonException() { - var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!, null!); + var con = new WebSocketConnection(new NullLogger<WebSocketConnection>(), null!, null!); var bytes = File.ReadAllBytes("Test Data/HttpServer/Partial.json"); Assert.Throws<JsonException>(() => con.DeserializeWebSocketMessage(new ReadOnlySequence<byte>(bytes), out var bytesConsumed)); } diff --git a/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs b/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs index 3ce29f28c..f5c8cc970 100644 --- a/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs +++ b/tests/Jellyfin.Server.Implementations.Tests/Library/LibraryManager/FindExtrasTests.cs @@ -1,16 +1,18 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Linq; using AutoFixture; using AutoFixture.AutoMoq; using Emby.Naming.Common; -using Emby.Server.Implementations.Library.Resolvers; using Emby.Server.Implementations.Library.Resolvers.Audio; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Sorting; @@ -32,11 +34,13 @@ public class FindExtrasTests fixture.Register(() => new NamingOptions()); var configMock = fixture.Freeze<Mock<IServerConfigurationManager>>(); configMock.Setup(c => c.ApplicationPaths.ProgramDataPath).Returns("/data"); + var itemRepository = fixture.Freeze<Mock<IItemRepository>>(); + itemRepository.Setup(i => i.RetrieveItem(It.IsAny<Guid>())).Returns<BaseItem>(null); _fileSystemMock = fixture.Freeze<Mock<IFileSystem>>(); _fileSystemMock.Setup(f => f.GetFileInfo(It.IsAny<string>())).Returns<string>(path => new FileSystemMetadata { FullName = path }); _libraryManager = fixture.Build<Emby.Server.Implementations.Library.LibraryManager>().Do(s => s.AddParts( fixture.Create<IEnumerable<IResolverIgnoreRule>>(), - new List<IItemResolver> { new VideoExtraResolver(fixture.Create<NamingOptions>()), new AudioResolver(fixture.Create<NamingOptions>()) }, + new List<IItemResolver> { new AudioResolver(fixture.Create<NamingOptions>()) }, fixture.Create<IEnumerable<IIntroProvider>>(), fixture.Create<IEnumerable<IBaseItemComparer>>(), fixture.Create<IEnumerable<ILibraryPostScanTask>>())) @@ -56,7 +60,8 @@ public class FindExtrasTests "/movies/Up/Up.mkv", "/movies/Up/Up - trailer.mkv", "/movies/Up/Up - sample.mkv", - "/movies/Up/Up something else.mkv" + "/movies/Up/Up something else.mkv", + "/movies/Up/Up-extra.mkv" }; var files = paths.Select(p => new FileSystemMetadata @@ -67,10 +72,11 @@ public class FindExtrasTests var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList(); - Assert.Equal(2, extras.Count); - Assert.Equal(ExtraType.Trailer, extras[0].ExtraType); - Assert.Equal(typeof(Trailer), extras[0].GetType()); - Assert.Equal(ExtraType.Sample, extras[1].ExtraType); + Assert.Equal(3, extras.Count); + Assert.Equal(ExtraType.Unknown, extras[0].ExtraType); + Assert.Equal(ExtraType.Trailer, extras[1].ExtraType); + Assert.Equal(typeof(Trailer), extras[1].GetType()); + Assert.Equal(ExtraType.Sample, extras[2].ExtraType); } [Fact] @@ -88,7 +94,8 @@ public class FindExtrasTests "/movies/Up/behind the scenes", "/movies/Up/behind the scenes.mkv", "/movies/Up/Up - sample.mkv", - "/movies/Up/Up something else.mkv" + "/movies/Up/Up something else.mkv", + "/movies/Up/extras" }; _fileSystemMock.Setup(f => f.GetFiles( @@ -104,7 +111,7 @@ public class FindExtrasTests Name = "some trailer.mkv", IsDirectory = false } - }); + }).Verifiable(); _fileSystemMock.Setup(f => f.GetFiles( "/movies/Up/behind the scenes", @@ -119,7 +126,7 @@ public class FindExtrasTests Name = "the making of Up.mkv", IsDirectory = false } - }); + }).Verifiable(); _fileSystemMock.Setup(f => f.GetFiles( "/movies/Up/theme-music", @@ -134,26 +141,46 @@ public class FindExtrasTests Name = "theme2.mp3", IsDirectory = false } - }); + }).Verifiable(); + + _fileSystemMock.Setup(f => f.GetFiles( + "/movies/Up/extras", + It.IsAny<string[]>(), + false, + false)) + .Returns(new List<FileSystemMetadata> + { + new() + { + FullName = "/movies/Up/extras/Honest Trailer.mkv", + Name = "Honest Trailer.mkv", + IsDirectory = false + } + }).Verifiable(); var files = paths.Select(p => new FileSystemMetadata { FullName = p, Name = Path.GetFileName(p), - IsDirectory = string.IsNullOrEmpty(Path.GetExtension(p)) + IsDirectory = !Path.HasExtension(p) }).ToList(); var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList(); - Assert.Equal(6, extras.Count); - Assert.Equal(ExtraType.Trailer, extras[0].ExtraType); - Assert.Equal(typeof(Trailer), extras[0].GetType()); + _fileSystemMock.Verify(); + Assert.Equal(7, extras.Count); + Assert.Equal(ExtraType.Unknown, extras[0].ExtraType); + Assert.Equal(typeof(Video), extras[0].GetType()); Assert.Equal(ExtraType.Trailer, extras[1].ExtraType); Assert.Equal(typeof(Trailer), extras[1].GetType()); - Assert.Equal(ExtraType.BehindTheScenes, extras[2].ExtraType); - Assert.Equal(ExtraType.Sample, extras[3].ExtraType); - Assert.Equal(ExtraType.ThemeSong, extras[4].ExtraType); + Assert.Equal(ExtraType.Trailer, extras[2].ExtraType); + Assert.Equal(typeof(Trailer), extras[2].GetType()); + Assert.Equal(ExtraType.BehindTheScenes, extras[3].ExtraType); + Assert.Equal(ExtraType.Sample, extras[4].ExtraType); Assert.Equal(ExtraType.ThemeSong, extras[5].ExtraType); + Assert.Equal(typeof(Audio), extras[5].GetType()); + Assert.Equal(ExtraType.ThemeSong, extras[6].ExtraType); + Assert.Equal(typeof(Audio), extras[6].GetType()); } [Fact] @@ -210,6 +237,46 @@ public class FindExtrasTests } [Fact] + public void FindExtras_WrongExtensions_FindsNoExtras() + { + var owner = new Movie { Name = "Up", Path = "/movies/Up/Up.mkv" }; + var paths = new List<string> + { + "/movies/Up/Up.mkv", + "/movies/Up/trailer.noext", + "/movies/Up/theme.png", + "/movies/Up/trailers" + }; + + var files = paths.Select(p => new FileSystemMetadata + { + FullName = p, + Name = Path.GetFileName(p), + IsDirectory = !Path.HasExtension(p) + }).ToList(); + + _fileSystemMock.Setup(f => f.GetFiles( + "/movies/Up/trailers", + It.IsAny<string[]>(), + false, + false)) + .Returns(new List<FileSystemMetadata> + { + new() + { + FullName = "/movies/Up/trailers/trailer.jpg", + Name = "trailer.jpg", + IsDirectory = false + } + }).Verifiable(); + + var extras = _libraryManager.FindExtras(owner, files, new DirectoryService(_fileSystemMock.Object)).OrderBy(e => e.ExtraType).ToList(); + + _fileSystemMock.Verify(); + Assert.Empty(extras); + } + + [Fact] public void FindExtras_SeriesWithTrailers_FindsCorrectExtras() { var owner = new Series { Name = "Dexter", Path = "/series/Dexter" }; diff --git a/tests/Jellyfin.Server.Implementations.Tests/Library/PathExtensionsTests.cs b/tests/Jellyfin.Server.Implementations.Tests/Library/PathExtensionsTests.cs index 54a63a5f2..be2dfe0a8 100644 --- a/tests/Jellyfin.Server.Implementations.Tests/Library/PathExtensionsTests.cs +++ b/tests/Jellyfin.Server.Implementations.Tests/Library/PathExtensionsTests.cs @@ -8,13 +8,17 @@ namespace Jellyfin.Server.Implementations.Tests.Library { [Theory] [InlineData("Superman: Red Son [imdbid=tt10985510]", "imdbid", "tt10985510")] + [InlineData("Superman: Red Son [imdbid-tt10985510]", "imdbid", "tt10985510")] [InlineData("Superman: Red Son - tt10985510", "imdbid", "tt10985510")] [InlineData("Superman: Red Son", "imdbid", null)] [InlineData("Superman: Red Son", "something", null)] [InlineData("Superman: Red Son [imdbid1=tt11111111][imdbid=tt10985510]", "imdbid", "tt10985510")] + [InlineData("Superman: Red Son [imdbid1-tt11111111][imdbid=tt10985510]", "imdbid", "tt10985510")] [InlineData("Superman: Red Son [tmdbid=618355][imdbid=tt10985510]", "imdbid", "tt10985510")] - [InlineData("Superman: Red Son [tmdbid=618355][imdbid=tt10985510]", "tmdbid", "618355")] + [InlineData("Superman: Red Son [tmdbid-618355][imdbid-tt10985510]", "imdbid", "tt10985510")] + [InlineData("Superman: Red Son [tmdbid-618355][imdbid-tt10985510]", "tmdbid", "618355")] [InlineData("[tmdbid=618355]", "tmdbid", "618355")] + [InlineData("[tmdbid-618355]", "tmdbid", "618355")] [InlineData("tmdbid=111111][tmdbid=618355]", "tmdbid", "618355")] [InlineData("[tmdbid=618355]tmdbid=111111]", "tmdbid", "618355")] [InlineData("tmdbid=618355]", "tmdbid", null)] @@ -23,6 +27,8 @@ namespace Jellyfin.Server.Implementations.Tests.Library [InlineData("tmdbid=", "tmdbid", null)] [InlineData("tmdbid", "tmdbid", null)] [InlineData("[tmdbid=][imdbid=tt10985510]", "tmdbid", null)] + [InlineData("[tmdbid-][imdbid-tt10985510]", "tmdbid", null)] + [InlineData("Superman: Red Son [tmdbid-618355][tmdbid=1234567]", "tmdbid", "618355")] public void GetAttributeValue_ValidArgs_Correct(string input, string attribute, string? expectedResult) { Assert.Equal(expectedResult, PathExtensions.GetAttributeValue(input, attribute)); diff --git a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs index 7ea45d14d..7c9952030 100644 --- a/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs +++ b/tests/Jellyfin.XbmcMetadata.Tests/Parsers/MovieNfoParserTests.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Threading; using Jellyfin.Data.Entities; @@ -157,33 +158,33 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers // Images Assert.Equal(7, result.RemoteImages.Count); - var posters = result.RemoteImages.Where(x => x.type == ImageType.Primary).ToList(); + var posters = result.RemoteImages.Where(x => x.Type == ImageType.Primary).ToList(); Assert.Single(posters); - Assert.Equal("http://image.tmdb.org/t/p/original/9rtrRGeRnL0JKtu9IMBWsmlmmZz.jpg", posters[0].url); + Assert.Equal("http://image.tmdb.org/t/p/original/9rtrRGeRnL0JKtu9IMBWsmlmmZz.jpg", posters[0].Url); - var logos = result.RemoteImages.Where(x => x.type == ImageType.Logo).ToList(); + var logos = result.RemoteImages.Where(x => x.Type == ImageType.Logo).ToList(); Assert.Single(logos); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/hdmovielogo/justice-league-5865bf95cbadb.png", logos[0].url); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/hdmovielogo/justice-league-5865bf95cbadb.png", logos[0].Url); - var banners = result.RemoteImages.Where(x => x.type == ImageType.Banner).ToList(); + var banners = result.RemoteImages.Where(x => x.Type == ImageType.Banner).ToList(); Assert.Single(banners); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviebanner/justice-league-586017e95adbd.jpg", banners[0].url); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviebanner/justice-league-586017e95adbd.jpg", banners[0].Url); - var thumbs = result.RemoteImages.Where(x => x.type == ImageType.Thumb).ToList(); + var thumbs = result.RemoteImages.Where(x => x.Type == ImageType.Thumb).ToList(); Assert.Single(thumbs); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviethumb/justice-league-585fb155c3743.jpg", thumbs[0].url); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviethumb/justice-league-585fb155c3743.jpg", thumbs[0].Url); - var art = result.RemoteImages.Where(x => x.type == ImageType.Art).ToList(); + var art = result.RemoteImages.Where(x => x.Type == ImageType.Art).ToList(); Assert.Single(art); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/hdmovieclearart/justice-league-5865c23193041.png", art[0].url); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/hdmovieclearart/justice-league-5865c23193041.png", art[0].Url); - var discArt = result.RemoteImages.Where(x => x.type == ImageType.Disc).ToList(); + var discArt = result.RemoteImages.Where(x => x.Type == ImageType.Disc).ToList(); Assert.Single(discArt); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviedisc/justice-league-5a3af26360617.png", discArt[0].url); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviedisc/justice-league-5a3af26360617.png", discArt[0].Url); - var backdrop = result.RemoteImages.Where(x => x.type == ImageType.Backdrop).ToList(); + var backdrop = result.RemoteImages.Where(x => x.Type == ImageType.Backdrop).ToList(); Assert.Single(backdrop); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviebackground/justice-league-5793f518c6d6e.jpg", backdrop[0].url); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviebackground/justice-league-5793f518c6d6e.jpg", backdrop[0].Url); // Local Image - contains only one item depending on operating system Assert.Single(result.Images); @@ -216,8 +217,8 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers _parser.Fetch(result, "Test Data/Fanart.nfo", CancellationToken.None); - Assert.Single(result.RemoteImages.Where(x => x.type == ImageType.Backdrop)); - Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviebackground/justice-league-5a5332c7b5e77.jpg", result.RemoteImages.First(x => x.type == ImageType.Backdrop).url); + Assert.Single(result.RemoteImages.Where(x => x.Type == ImageType.Backdrop)); + Assert.Equal("https://assets.fanart.tv/fanart/movies/141052/moviebackground/justice-league-5a5332c7b5e77.jpg", result.RemoteImages.First(x => x.Type == ImageType.Backdrop).Url); } [Fact] |
