| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | using System;using Emby.Server.Implementations.Sorting;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Entities.Movies;using MediaBrowser.Controller.Entities.TV;using Xunit;namespace Jellyfin.Server.Implementations.Tests.Sorting{    public class AiredEpisodeOrderComparerTests    {        [Theory]        [ClassData(typeof(EpisodeBadData))]        public void Compare_GivenNull_ThrowsArgumentNullException(BaseItem? x, BaseItem? y)        {            var cmp = new AiredEpisodeOrderComparer();            Assert.Throws<ArgumentNullException>(() => cmp.Compare(x, y));        }        [Theory]        [ClassData(typeof(EpisodeTestData))]        public void AiredEpisodeOrderCompareTest(BaseItem x, BaseItem y, int expected)        {            var cmp = new AiredEpisodeOrderComparer();            Assert.Equal(expected, cmp.Compare(x, y));            Assert.Equal(-expected, cmp.Compare(y, x));        }        private class EpisodeBadData : TheoryData<BaseItem?, BaseItem?>        {            public EpisodeBadData()            {                Add(null, new Episode());                Add(new Episode(), null);            }        }        private class EpisodeTestData : TheoryData<BaseItem, BaseItem, int>        {            public EpisodeTestData()            {                Add(                    new Movie(),                    new Movie(),                    0);                Add(                    new Movie(),                    new Episode(),                    1);                // Good cases                Add(                    new Episode(),                    new Episode(),                    0);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    0);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 2 },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 2, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    1);                // Good Specials                Add(                    new Episode { ParentIndexNumber = 0, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1 },                    0);                Add(                    new Episode { ParentIndexNumber = 0, IndexNumber = 2 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1 },                    1);                // Specials to Episodes                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 2 },                    1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 2 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 2 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 2 },                    1);                Add(                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsAfterSeasonNumber = 1 },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 3, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsAfterSeasonNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 3, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsAfterSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },                    1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1 },                    1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 2 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },                    1);                Add(                    new Episode { ParentIndexNumber = 1 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },                    0);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 3 },                    new Episode { ParentIndexNumber = 0, IndexNumber = 1, AirsBeforeSeasonNumber = 1, AirsBeforeEpisodeNumber = 2 },                    1);                // Premiere Date                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1, PremiereDate = new DateTime(2021, 09, 12, 0, 0, 0) },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1, PremiereDate = new DateTime(2021, 09, 12, 0, 0, 0) },                    0);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1, PremiereDate = new DateTime(2021, 09, 11, 0, 0, 0) },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1, PremiereDate = new DateTime(2021, 09, 12, 0, 0, 0) },                    -1);                Add(                    new Episode { ParentIndexNumber = 1, IndexNumber = 1, PremiereDate = new DateTime(2021, 09, 12, 0, 0, 0) },                    new Episode { ParentIndexNumber = 1, IndexNumber = 1, PremiereDate = new DateTime(2021, 09, 11, 0, 0, 0) },                    1);            }        }    }}
 |