From 72f0085ef78fd6a1d399843974cc72a48cd31a17 Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Mon, 15 Feb 2016 21:55:53 +0100 Subject: [PATCH] Fixed: DownloadedEpisodesScan API command couldn't be used to process individual files. --- ...DownloadedEpisodesCommandServiceFixture.cs | 47 +++++++++++++++++-- .../DownloadedEpisodesCommandService.cs | 9 ++-- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesCommandServiceFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesCommandServiceFixture.cs index 058ec9686..9cc71321c 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesCommandServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DownloadedEpisodesCommandServiceFixture.cs @@ -22,15 +22,13 @@ namespace NzbDrone.Core.Test.MediaFiles { private string _droneFactory = "c:\\drop\\".AsOsAgnostic(); private string _downloadFolder = "c:\\drop_other\\Show.S01E01\\".AsOsAgnostic(); + private string _downloadFile = "c:\\drop_other\\Show.S01E01.mkv".AsOsAgnostic(); private TrackedDownload _trackedDownload; [SetUp] public void Setup() { - Mocker.GetMock().Setup(c => c.FolderExists(It.IsAny())) - .Returns(true); - Mocker.GetMock().SetupGet(c => c.DownloadedEpisodesFolder) .Returns(_droneFactory); @@ -59,6 +57,18 @@ namespace NzbDrone.Core.Test.MediaFiles }; } + private void GivenExistingFolder(string path) + { + Mocker.GetMock().Setup(c => c.FolderExists(It.IsAny())) + .Returns(true); + } + + private void GivenExistingFile(string path) + { + Mocker.GetMock().Setup(c => c.FileExists(It.IsAny())) + .Returns(true); + } + private void GivenValidQueueItem() { Mocker.GetMock() @@ -69,6 +79,8 @@ namespace NzbDrone.Core.Test.MediaFiles [Test] public void should_process_dronefactory_if_path_is_not_specified() { + GivenExistingFolder(_droneFactory); + Subject.Execute(new DownloadedEpisodesScanCommand()); Mocker.GetMock().Verify(c => c.ProcessRootFolder(It.IsAny()), Times.Once()); @@ -77,8 +89,6 @@ namespace NzbDrone.Core.Test.MediaFiles [Test] public void should_skip_import_if_dronefactory_doesnt_exist() { - Mocker.GetMock().Setup(c => c.FolderExists(It.IsAny())).Returns(false); - Subject.Execute(new DownloadedEpisodesScanCommand()); Mocker.GetMock().Verify(c => c.ProcessRootFolder(It.IsAny()), Times.Never()); @@ -89,6 +99,8 @@ namespace NzbDrone.Core.Test.MediaFiles [Test] public void should_ignore_downloadclientid_if_path_is_not_specified() { + GivenExistingFolder(_droneFactory); + Subject.Execute(new DownloadedEpisodesScanCommand() { DownloadClientId = "sab1" }); Mocker.GetMock().Verify(c => c.ProcessRootFolder(It.IsAny()), Times.Once()); @@ -97,14 +109,27 @@ namespace NzbDrone.Core.Test.MediaFiles [Test] public void should_process_folder_if_downloadclientid_is_not_specified() { + GivenExistingFolder(_downloadFolder); + Subject.Execute(new DownloadedEpisodesScanCommand() { Path = _downloadFolder }); Mocker.GetMock().Verify(c => c.ProcessPath(It.IsAny(), null, null), Times.Once()); } + [Test] + public void should_process_file_if_downloadclientid_is_not_specified() + { + GivenExistingFile(_downloadFile); + + Subject.Execute(new DownloadedEpisodesScanCommand() { Path = _downloadFile }); + + Mocker.GetMock().Verify(c => c.ProcessPath(It.IsAny(), null, null), Times.Once()); + } + [Test] public void should_process_folder_with_downloadclientitem_if_available() { + GivenExistingFolder(_downloadFolder); GivenValidQueueItem(); Subject.Execute(new DownloadedEpisodesScanCommand() { Path = _downloadFolder, DownloadClientId = "sab1" }); @@ -115,11 +140,23 @@ namespace NzbDrone.Core.Test.MediaFiles [Test] public void should_process_folder_without_downloadclientitem_if_not_available() { + GivenExistingFolder(_downloadFolder); + Subject.Execute(new DownloadedEpisodesScanCommand() { Path = _downloadFolder, DownloadClientId = "sab1" }); Mocker.GetMock().Verify(c => c.ProcessPath(_downloadFolder, null, null), Times.Once()); ExceptionVerification.ExpectedWarns(1); } + + [Test] + public void should_warn_if_neither_folder_or_file_exists() + { + Subject.Execute(new DownloadedEpisodesScanCommand() { Path = _downloadFolder }); + + Mocker.GetMock().Verify(c => c.ProcessPath(It.IsAny(), null, null), Times.Never()); + + ExceptionVerification.ExpectedWarns(1); + } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs index 8250d92f0..84f2cf898 100644 --- a/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs +++ b/src/NzbDrone.Core/MediaFiles/DownloadedEpisodesCommandService.cs @@ -54,17 +54,16 @@ namespace NzbDrone.Core.MediaFiles return _downloadedEpisodesImportService.ProcessRootFolder(new DirectoryInfo(downloadedEpisodesFolder)); } - private List ProcessFolder(DownloadedEpisodesScanCommand message) + private List ProcessPath(DownloadedEpisodesScanCommand message) { - if (!_diskProvider.FolderExists(message.Path)) + if (!_diskProvider.FolderExists(message.Path) && !_diskProvider.FileExists(message.Path)) { - _logger.Warn("Folder specified for import scan [{0}] doesn't exist.", message.Path); + _logger.Warn("Folder/File specified for import scan [{0}] doesn't exist.", message.Path); return new List(); } if (message.DownloadClientId.IsNotNullOrWhiteSpace()) { - var trackedDownload = _trackedDownloadService.Find(message.DownloadClientId); if (trackedDownload != null) @@ -90,7 +89,7 @@ namespace NzbDrone.Core.MediaFiles if (message.Path.IsNotNullOrWhiteSpace()) { - importResults = ProcessFolder(message); + importResults = ProcessPath(message); } else {