From e9248e284efd999dfc5bdd8e25d1afea777d72ef Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 17 Apr 2016 14:17:46 -0700 Subject: [PATCH] Return decisions when catching exceptions during decision making Fixed: Manual Import not showing files that failed to process Closes #1131 --- .../DownloadDecisionMakerFixture.cs | 18 ++++++++++++++++++ .../ImportDecisionMakerFixture.cs | 19 +++++++++++++++++++ .../DecisionEngine/DownloadDecisionMaker.cs | 3 +++ .../EpisodeImport/ImportDecisionMaker.cs | 3 +++ 4 files changed, 43 insertions(+) diff --git a/src/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs index cb4d2a97d..0206abbd2 100644 --- a/src/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs +++ b/src/NzbDrone.Core.Test/DecisionEngineTests/DownloadDecisionMakerFixture.cs @@ -270,5 +270,23 @@ namespace NzbDrone.Core.Test.DecisionEngineTests result.First().RemoteEpisode.DownloadAllowed.Should().BeFalse(); } + + [Test] + public void should_return_a_decision_when_exception_is_caught() + { + GivenSpecifications(_pass1); + + Mocker.GetMock().Setup(c => c.Map(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Throws(); + + _reports = new List + { + new ReleaseInfo{Title = "The.Office.S03E115.DVDRip.XviD-OSiTV"}, + }; + + Subject.GetRssDecision(_reports).Should().HaveCount(1); + + ExceptionVerification.ExpectedErrors(1); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs index 1ff8a2896..4508f2e5a 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/EpisodeImport/ImportDecisionMakerFixture.cs @@ -385,5 +385,24 @@ namespace NzbDrone.Core.Test.MediaFiles.EpisodeImport result.Single().LocalEpisode.Quality.Should().Be(_quality); } + + [Test] + public void should_return_a_decision_when_exception_is_caught() + { + Mocker.GetMock() + .Setup(c => c.GetLocalEpisode(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Throws(); + + _videoFiles = new List + { + "The.Office.S03E115.DVDRip.XviD-OSiTV" + }; + + GivenVideoFiles(_videoFiles); + + Subject.GetImportDecisions(_videoFiles, _series).Should().HaveCount(1); + + ExceptionVerification.ExpectedErrors(1); + } } } diff --git a/src/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs index c702e60bd..d86653478 100644 --- a/src/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs +++ b/src/NzbDrone.Core/DecisionEngine/DownloadDecisionMaker.cs @@ -96,6 +96,9 @@ namespace NzbDrone.Core.DecisionEngine catch (Exception e) { _logger.Error(e, "Couldn't process release."); + + var remoteEpisode = new RemoteEpisode { Release = report }; + decision = new DownloadDecision(remoteEpisode, new Rejection("Unexpected error processing release")); } reportNumber++; diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs index 71f0ba938..8f03ca756 100644 --- a/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs +++ b/src/NzbDrone.Core/MediaFiles/EpisodeImport/ImportDecisionMaker.cs @@ -112,6 +112,9 @@ namespace NzbDrone.Core.MediaFiles.EpisodeImport catch (Exception e) { _logger.Error(e, "Couldn't import file. " + file); + + var localEpisode = new LocalEpisode { Path = file }; + decision = new ImportDecision(localEpisode, new Rejection("Unexpected error processing file")); } return decision;