using System.Collections.Generic; using System.Linq; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Download; using NzbDrone.Core.IndexerSearch; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; using NzbDrone.Core.Messaging.Commands; namespace NzbDrone.Core.Test.IndexerSearchTests { [TestFixture] public class SeriesSearchServiceFixture : CoreTest { private Series _series; [SetUp] public void Setup() { _series = new Series { Id = 1, Title = "Title", Seasons = new List() }; Mocker.GetMock() .Setup(s => s.GetSeries(It.IsAny())) .Returns(_series); Mocker.GetMock() .Setup(s => s.SeasonSearch(_series.Id, It.IsAny(), false, true)) .Returns(new List()); Mocker.GetMock() .Setup(s => s.ProcessDecisions(It.IsAny>())) .Returns(new ProcessedDecisions(new List(), new List(), new List())); } [Test] public void should_only_include_monitored_seasons() { _series.Seasons = new List { new Season { SeasonNumber = 0, Monitored = false }, new Season { SeasonNumber = 1, Monitored = true } }; Subject.Execute(new SeriesSearchCommand { SeriesId = _series.Id, Trigger = CommandTrigger.Manual }); Mocker.GetMock() .Verify(v => v.SeasonSearch(_series.Id, It.IsAny(), false, true), Times.Exactly(_series.Seasons.Count(s => s.Monitored))); } [Test] public void should_start_with_lower_seasons_first() { var seasonOrder = new List(); _series.Seasons = new List { new Season { SeasonNumber = 3, Monitored = true }, new Season { SeasonNumber = 1, Monitored = true }, new Season { SeasonNumber = 2, Monitored = true } }; Mocker.GetMock() .Setup(s => s.SeasonSearch(_series.Id, It.IsAny(), false, true)) .Returns(new List()) .Callback((seriesId, seasonNumber, missingOnly, userInvokedSearch) => seasonOrder.Add(seasonNumber)); Subject.Execute(new SeriesSearchCommand { SeriesId = _series.Id, Trigger = CommandTrigger.Manual }); seasonOrder.First().Should().Be(_series.Seasons.OrderBy(s => s.SeasonNumber).First().SeasonNumber); } } }