using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using Emby.Server.Implementations.TV; using Jellyfin.Database.Implementations.Entities; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Querying; using Moq; using Xunit; namespace Jellyfin.Server.Implementations.Tests.TV; public class TVSeriesManagerNextUpTests { [Theory] [InlineData(1)] [InlineData(25)] [InlineData(200)] public void GetNextUp_ReadsUserDataInABoundedNumberOfQueries(int seriesCount) { var user = new User("next-up", "provider", "provider"); var libraryManager = new Mock(); var userDataManager = new Mock(); var seriesKeys = Enumerable.Range(0, seriesCount) .Select(i => i.ToString(CultureInfo.InvariantCulture)) .ToList(); var batch = seriesKeys.ToDictionary( key => key, key => new NextUpEpisodeBatchResult { NextUp = new Episode { Id = Guid.NewGuid(), Name = "Next " + key }, LastWatched = new Episode { Id = Guid.NewGuid(), Name = "Watched " + key } }); libraryManager .Setup(l => l.GetNextUpSeriesKeys(It.IsAny(), It.IsAny>(), It.IsAny())) .Returns(seriesKeys); libraryManager .Setup(l => l.GetNextUpEpisodesBatch(It.IsAny(), It.IsAny>(), It.IsAny(), It.IsAny())) .Returns(batch); libraryManager.Setup(l => l.GetLinkedAlternateVersions(It.IsAny