From 6ba78f6aedb968b1508ef7352881d291cd83da4f Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Sun, 1 Mar 2015 22:38:47 +0100 Subject: [PATCH] No longer marks download as imported if no episodes were found. --- .../CompletedDownloadServiceFixture.cs | 57 ++++++++++++++++++- .../Download/CompletedDownloadService.cs | 5 +- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs index 9bd22d81e..365711e6f 100644 --- a/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs +++ b/src/NzbDrone.Core.Test/Download/CompletedDownloadServiceFixture.cs @@ -59,6 +59,10 @@ namespace NzbDrone.Core.Test.Download .Setup(s => s.MostRecentForDownloadId(_trackedDownload.DownloadItem.DownloadId)) .Returns(new History.History()); + Mocker.GetMock() + .Setup(s => s.GetSeries("Drone.S01E01.HDTV")) + .Returns(remoteEpisode.Series); + } private void GivenNoGrabbedHistory() @@ -147,6 +151,27 @@ namespace NzbDrone.Core.Test.Download AssertNoAttemptedImport(); } + [Test] + public void should_mark_as_imported_if_all_episodes_were_imported() + { + Mocker.GetMock() + .Setup(v => v.ProcessPath(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(new List + { + new ImportResult( + new ImportDecision( + new LocalEpisode {Path = @"C:\TestPath\Droned.S01E01.mkv"})), + + new ImportResult( + new ImportDecision( + new LocalEpisode {Path = @"C:\TestPath\Droned.S01E02.mkv"})) + }); + + Subject.Process(_trackedDownload); + + AssertCompletedDownload(); + } + [Test] public void should_not_mark_as_imported_if_all_files_were_rejected() { @@ -165,8 +190,31 @@ namespace NzbDrone.Core.Test.Download Subject.Process(_trackedDownload); + Mocker.GetMock() + .Verify(v => v.PublishEvent(It.IsAny()), Times.Never()); - _trackedDownload.State.Should().NotBe(TrackedDownloadStage.Imported); + AssertNoCompletedDownload(); + } + + [Test] + public void should_not_mark_as_imported_if_no_episodes_were_parsed() + { + Mocker.GetMock() + .Setup(v => v.ProcessPath(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(new List + { + new ImportResult( + new ImportDecision( + new LocalEpisode {Path = @"C:\TestPath\Droned.S01E01.mkv"}, new Rejection("Rejected!")), "Test Failure"), + + new ImportResult( + new ImportDecision( + new LocalEpisode {Path = @"C:\TestPath\Droned.S01E02.mkv"},new Rejection("Rejected!")), "Test Failure") + }); + + _trackedDownload.RemoteEpisode.Episodes.Clear(); + + Subject.Process(_trackedDownload); AssertNoCompletedDownload(); } @@ -239,6 +287,10 @@ namespace NzbDrone.Core.Test.Download [Test] public void should_not_import_when_there_is_a_title_mismatch() { + Mocker.GetMock() + .Setup(s => s.GetSeries("Drone.S01E01.HDTV")) + .Returns((Series)null); + Subject.Process(_trackedDownload); AssertNoCompletedDownload(); @@ -285,6 +337,9 @@ namespace NzbDrone.Core.Test.Download Mocker.GetMock() .Verify(v => v.ProcessPath(_trackedDownload.DownloadItem.OutputPath.FullPath, _trackedDownload.RemoteEpisode.Series, _trackedDownload.DownloadItem), Times.Once()); + Mocker.GetMock() + .Verify(v => v.PublishEvent(It.IsAny()), Times.Once()); + _trackedDownload.State.Should().Be(TrackedDownloadStage.Imported); } } diff --git a/src/NzbDrone.Core/Download/CompletedDownloadService.cs b/src/NzbDrone.Core/Download/CompletedDownloadService.cs index 09cb3e6e4..b26f4a820 100644 --- a/src/NzbDrone.Core/Download/CompletedDownloadService.cs +++ b/src/NzbDrone.Core/Download/CompletedDownloadService.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using System.Linq; using NLog; using NzbDrone.Common.Disk; @@ -98,7 +99,7 @@ namespace NzbDrone.Core.Download return; } - if (importResults.Count(c => c.Result == ImportResultType.Imported) >= trackedDownload.RemoteEpisode.Episodes.Count) + if (importResults.Count(c => c.Result == ImportResultType.Imported) >= Math.Max(1, trackedDownload.RemoteEpisode.Episodes.Count)) { trackedDownload.State = TrackedDownloadStage.Imported; _eventAggregator.PublishEvent(new DownloadCompletedEvent(trackedDownload));