aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Naming.Tests/TV/SimpleEpisodeTests.cs
blob: 6d49ac832dbd25313125df1ea2979f6b2628f5c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System.IO;
using Emby.Naming.Common;
using Emby.Naming.TV;
using Xunit;

namespace Jellyfin.Naming.Tests.TV
{
    public class SimpleEpisodeTests
    {
        [Theory]
        [InlineData("/server/anything_s01e02.mp4", "anything", 1, 2)]
        [InlineData("/server/anything_s1e2.mp4", "anything", 1, 2)]
        [InlineData("/server/anything_s01.e02.mp4", "anything", 1, 2)]
        [InlineData("/server/anything_102.mp4", "anything", 1, 2)]
        [InlineData("/server/anything_1x02.mp4", "anything", 1, 2)]
        [InlineData("/server/The Walking Dead 4x01.mp4", "The Walking Dead", 4, 1)]
        [InlineData("/server/the_simpsons-s02e01_18536.mp4", "the_simpsons", 2, 1)]
        [InlineData("/server/Temp/S01E02 foo.mp4", "", 1, 2)]
        [InlineData("Series/4x12 - The Woman.mp4", "", 4, 12)]
        [InlineData("Series/LA X, Pt. 1_s06e32.mp4", "LA X, Pt. 1", 6, 32)]
        [InlineData("[Baz-Bar]Foo - [1080p][Multiple Subtitle]/[Baz-Bar] Foo - 05 [1080p][Multiple Subtitle].mkv", "Foo", null, 5)]
        [InlineData(@"/Foo/The.Series.Name.S01E04.WEBRip.x264-Baz[Bar]/the.series.name.s01e04.webrip.x264-Baz[Bar].mkv", "The.Series.Name", 1, 4)]
        [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)]
        // 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)
        {
            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);

            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(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);
        }
    }
}