From 7a675487fd91ca57e5f08ef4f116c624d282171c Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sun, 13 Jan 2013 15:09:44 -0800 Subject: [PATCH] Don't try to move episode file that does not exist #ND-144 fixed --- .../MoveEpisodeFileFixture.cs | 70 +++++++++++++++++-- NzbDrone.Core/Providers/DiskScanProvider.cs | 6 ++ 2 files changed, 72 insertions(+), 4 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs index 80b1f35ed..125312ba5 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTests/MoveEpisodeFileFixture.cs @@ -88,6 +88,69 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests var currentFilename = Path.Combine(@"C:\Test\TV\30 Rock\Season 01\", "30.Rock.S01E01.Test.WED-DL.mkv"); const string message = "30 Rock - 1x01 - [WEBDL]"; + var file = Builder.CreateNew() + .With(f => f.SeriesId = fakeSeries.SeriesId) + .With(f => f.Path = currentFilename) + .With(f => f.Quality = QualityTypes.WEBDL720p) + .With(f => f.Proper = false) + .Build(); + + Mocker.GetMock() + .Setup(e => e.GetSeries(fakeSeries.SeriesId)) + .Returns(fakeSeries); + + Mocker.GetMock() + .Setup(e => e.GetEpisodesByFileId(file.EpisodeFileId)) + .Returns(fakeEpisode); + + Mocker.GetMock() + .Setup(e => e.GetNewFilename(fakeEpisode, fakeSeries, It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(filename); + + Mocker.GetMock() + .Setup(e => e.CalculateFilePath(It.IsAny(), fakeEpisode.First().SeasonNumber, filename, ".mkv")) + .Returns(fi); + + Mocker.GetMock() + .Setup(s => s.GetDownloadTitle(It.Is(e => e.Quality == new QualityModel { Quality = QualityTypes.WEBDL720p, Proper = false }))) + .Returns(message); + + Mocker.GetMock() + .Setup(s => s.FileExists(currentFilename)) + .Returns(true); + + Mocker.GetMock() + .Setup(e => e.OnDownload("30 Rock - 1x01 - [WEBDL]", It.IsAny())); + + //Act + var result = Mocker.Resolve().MoveEpisodeFile(file, true); + + //Assert + result.Should().NotBeNull(); + Mocker.GetMock() + .Verify(e => e.OnDownload("30 Rock - 1x01 - [WEBDL]", It.IsAny()), Times.Once()); + } + + [Test] + public void should_log_error_and_return_null_when_source_file_does_not_exists() + { + var fakeSeries = Builder.CreateNew() + .With(s => s.SeriesId = 5) + .With(s => s.Title = "30 Rock") + .Build(); + + var fakeEpisode = Builder.CreateListOfSize(1) + .All() + .With(e => e.SeriesId = fakeSeries.SeriesId) + .With(e => e.SeasonNumber = 1) + .With(e => e.EpisodeNumber = 1) + .Build(); + + const string filename = @"30 Rock - S01E01 - TBD"; + var fi = new FileInfo(Path.Combine(@"C:\Test\TV\30 Rock\Season 01\", filename + ".mkv")); + var currentFilename = Path.Combine(@"C:\Test\TV\30 Rock\Season 01\", "30.Rock.S01E01.Test.WED-DL.mkv"); + const string message = "30 Rock - 1x01 - [WEBDL]"; + var file = Builder.CreateNew() .With(f => f.SeriesId = fakeSeries.SeriesId) .With(f => f.Path = currentFilename) @@ -112,7 +175,7 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests .Returns(fi); Mocker.GetMock() - .Setup(s => s.GetDownloadTitle(It.Is(e => e.Quality == new QualityModel{ Quality = QualityTypes.WEBDL720p, Proper = false }))) + .Setup(s => s.GetDownloadTitle(It.Is(e => e.Quality == new QualityModel { Quality = QualityTypes.WEBDL720p, Proper = false }))) .Returns(message); Mocker.GetMock() @@ -122,9 +185,8 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskScanProviderTests var result = Mocker.Resolve().MoveEpisodeFile(file, true); //Assert - result.Should().NotBeNull(); - Mocker.GetMock() - .Verify(e => e.OnDownload("30 Rock - 1x01 - [WEBDL]", It.IsAny()), Times.Once()); + result.Should().BeNull(); + ExceptionVerification.ExpectedErrors(1); } } } diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index 30126f45a..320ae315c 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -191,6 +191,12 @@ namespace NzbDrone.Core.Providers return null; } + if(!_diskProvider.FileExists(episodeFile.Path)) + { + Logger.Error("Episode file path does not exist, {0}", episodeFile.Path); + return null; + } + _diskProvider.CreateDirectory(newFile.DirectoryName); Logger.Debug("Moving [{0}] > [{1}]", episodeFile.Path, newFile.FullName);