From 730aba4408d2832e7a3f57e06d8c521eb9d6cf3b Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 6 Nov 2014 17:13:40 -0800 Subject: [PATCH] New: Series search will search starting with the lowest season --- .../SeriesSearchServiceFixture.cs | 80 +++++++++++++++++++ .../NzbDrone.Core.Test.csproj | 1 + .../IndexerSearch/SeriesSearchService.cs | 5 +- 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/NzbDrone.Core.Test/IndexerSearchTests/SeriesSearchServiceFixture.cs diff --git a/src/NzbDrone.Core.Test/IndexerSearchTests/SeriesSearchServiceFixture.cs b/src/NzbDrone.Core.Test/IndexerSearchTests/SeriesSearchServiceFixture.cs new file mode 100644 index 000000000..22ef726a7 --- /dev/null +++ b/src/NzbDrone.Core.Test/IndexerSearchTests/SeriesSearchServiceFixture.cs @@ -0,0 +1,80 @@ +using System; +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; + +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())) + .Returns(new List()); + + Mocker.GetMock() + .Setup(s => s.ProcessDecisions(It.IsAny>())) + .Returns(new ProcessedDecisions(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 }); + + Mocker.GetMock() + .Verify(v => v.SeasonSearch(_series.Id, It.IsAny()), 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())) + .Returns(new List()) + .Callback((seriesId, seasonNumber) => seasonOrder.Add(seasonNumber)); + + Subject.Execute(new SeriesSearchCommand { SeriesId = _series.Id }); + + seasonOrder.First().Should().Be(_series.Seasons.OrderBy(s => s.SeasonNumber).First().SeasonNumber); + } + } +} diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 96a6a2f15..436fc73bd 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -175,6 +175,7 @@ + diff --git a/src/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs b/src/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs index c59326b57..472a9d36e 100644 --- a/src/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs +++ b/src/NzbDrone.Core/IndexerSearch/SeriesSearchService.cs @@ -1,4 +1,5 @@ -using NLog; +using System.Linq; +using NLog; using NzbDrone.Common.Instrumentation.Extensions; using NzbDrone.Core.Download; using NzbDrone.Core.Messaging.Commands; @@ -30,7 +31,7 @@ namespace NzbDrone.Core.IndexerSearch var downloadedCount = 0; - foreach (var season in series.Seasons) + foreach (var season in series.Seasons.OrderBy(s => s.SeasonNumber)) { if (!season.Monitored) {