From 55af8ecb18d7b6b1263cf3b3689047025dafa249 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Tue, 6 Aug 2013 18:25:06 -0700 Subject: [PATCH] SeasonPass now properly updates episodes --- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 2 + .../SeasonServiceTests/SetMonitoredFixture.cs | 53 ++++++++++ .../SetSeasonPassFixture.cs | 91 ++++++++++++++++++ NzbDrone.Core/Tv/EpisodeService.cs | 1 + NzbDrone.Core/Tv/SeasonService.cs | Bin 8412 -> 8428 bytes 5 files changed, 147 insertions(+) create mode 100644 NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetMonitoredFixture.cs create mode 100644 NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetSeasonPassFixture.cs diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 26967ac0a..16f498630 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -181,6 +181,8 @@ + + diff --git a/NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetMonitoredFixture.cs b/NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetMonitoredFixture.cs new file mode 100644 index 000000000..775d7d41c --- /dev/null +++ b/NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetMonitoredFixture.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Moq; +using NUnit.Framework; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.Test.TvTests.SeasonServiceTests +{ + [TestFixture] + public class SetMonitoredFixture : CoreTest + { + private Season _season; + + [SetUp] + public void Setup() + { + _season = new Season + { + Id = 1, + SeasonNumber = 1, + SeriesId = 1, + Monitored = false + }; + + Mocker.GetMock() + .Setup(s => s.Get(It.IsAny(), It.IsAny())) + .Returns(_season); + } + + [TestCase(true)] + [TestCase(false)] + public void should_update_season(bool monitored) + { + Subject.SetMonitored(_season.SeriesId, _season.SeasonNumber, monitored); + + Mocker.GetMock() + .Verify(v => v.Update(_season), Times.Once()); + } + + [TestCase(true)] + [TestCase(false)] + public void should_update_episodes_in_season(bool monitored) + { + Subject.SetMonitored(_season.SeriesId, _season.SeasonNumber, monitored); + + Mocker.GetMock() + .Verify(v => v.SetEpisodeMonitoredBySeason(_season.SeriesId, _season.SeasonNumber, monitored), Times.Once()); + } + } +} diff --git a/NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetSeasonPassFixture.cs b/NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetSeasonPassFixture.cs new file mode 100644 index 000000000..b8ac4a9ea --- /dev/null +++ b/NzbDrone.Core.Test/TvTests/SeasonServiceTests/SetSeasonPassFixture.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FizzWare.NBuilder; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Tv; + +namespace NzbDrone.Core.Test.TvTests.SeasonServiceTests +{ + [TestFixture] + public class SetSeasonPassFixture : CoreTest + { + private const Int32 SERIES_ID = 1; + private List _seasons; + + [SetUp] + public void Setup() + { + _seasons = Builder.CreateListOfSize(5) + .All() + .With(s => s.SeriesId = SERIES_ID) + .Build() + .ToList(); + + Mocker.GetMock() + .Setup(s => s.GetSeasonBySeries(It.IsAny())) + .Returns(_seasons); + } + + [Test] + public void should_updateMany() + { + Subject.SetSeasonPass(SERIES_ID, 1); + + Mocker.GetMock() + .Verify(v => v.UpdateMany(It.IsAny>()), Times.Once()); + } + + [Test] + public void should_set_lower_seasons_to_false() + { + const int seasonNumber = 3; + + var result = Subject.SetSeasonPass(SERIES_ID, seasonNumber); + + result.Where(s => s.SeasonNumber < seasonNumber).Should().OnlyContain(s => s.Monitored == false); + } + + [Test] + public void should_set_equal_or_higher_seasons_to_false() + { + const int seasonNumber = 3; + + var result = Subject.SetSeasonPass(SERIES_ID, seasonNumber); + + result.Where(s => s.SeasonNumber >= seasonNumber).Should().OnlyContain(s => s.Monitored == true); + } + + [Test] + public void should_set_episodes_in_lower_seasons_to_false() + { + const int seasonNumber = 3; + + Subject.SetSeasonPass(SERIES_ID, seasonNumber); + + Mocker.GetMock() + .Verify(v => v.SetEpisodeMonitoredBySeason(SERIES_ID, It.Is(i => i < seasonNumber), false), Times.AtLeastOnce()); + + Mocker.GetMock() + .Verify(v => v.SetEpisodeMonitoredBySeason(SERIES_ID, It.Is(i => i < seasonNumber), true), Times.Never()); + } + + [Test] + public void should_set_episodes_in_equal_or_higher_seasons_to_false() + { + const int seasonNumber = 3; + + Subject.SetSeasonPass(SERIES_ID, seasonNumber); + + Mocker.GetMock() + .Verify(v => v.SetEpisodeMonitoredBySeason(SERIES_ID, It.Is(i => i >= seasonNumber), true), Times.AtLeastOnce()); + + Mocker.GetMock() + .Verify(v => v.SetEpisodeMonitoredBySeason(SERIES_ID, It.Is(i => i >= seasonNumber), false), Times.Never()); + } + } +} diff --git a/NzbDrone.Core/Tv/EpisodeService.cs b/NzbDrone.Core/Tv/EpisodeService.cs index 1231d1384..dce584fa4 100644 --- a/NzbDrone.Core/Tv/EpisodeService.cs +++ b/NzbDrone.Core/Tv/EpisodeService.cs @@ -31,6 +31,7 @@ namespace NzbDrone.Core.Tv void InsertMany(List episodes); void UpdateMany(List episodes); void DeleteMany(List episodes); + void SetEpisodeMonitoredBySeason(int seriesId, int seasonNumber, bool monitored); } public class EpisodeService : IEpisodeService, diff --git a/NzbDrone.Core/Tv/SeasonService.cs b/NzbDrone.Core/Tv/SeasonService.cs index 988281a55ff37951d23f24a0429fb887c18da4e6..de0c4013de8646ad2eb640d4dfc6fca885572538 100644 GIT binary patch delta 46 zcmccP_{MPqKQp7}WPav8M$gT2nUAwhHs|1-e1}77@^Wt8%@a9g89@S@w{U5Q0RVGr B4z2(I delta 42 vcmaFkc*k)AKl5Y(=DyAInUAwhp1{sF`5uSV=3Y)MMleU0OM3HtE?zMJSH=!)