diff --git a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs index e72fcf1c4..094e00b59 100644 --- a/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs +++ b/src/NzbDrone.Core.Test/MediaFiles/DiskScanServiceTests/ScanFixture.cs @@ -30,8 +30,8 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests .Build(); Mocker.GetMock() - .Setup(s => s.GetParentFolder(It.IsAny())) - .Returns((String path) => Directory.GetParent(path).FullName); + .Setup(s => s.GetParentFolder(It.IsAny())) + .Returns((string path) => Directory.GetParent(path).FullName); } @@ -39,14 +39,18 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests private void GivenParentFolderExists() { Mocker.GetMock() - .Setup(s => s.FolderExists(It.IsAny())) + .Setup(s => s.FolderExists(It.IsAny())) .Returns(true); + + Mocker.GetMock() + .Setup(s => s.GetDirectories(It.IsAny())) + .Returns(new string[] { @"C:\Test\TV\Series2".AsOsAgnostic() }); } - private void GivenFiles(IEnumerable files) + private void GivenFiles(IEnumerable files) { Mocker.GetMock() - .Setup(s => s.GetFiles(It.IsAny(), SearchOption.AllDirectories)) + .Setup(s => s.GetFiles(It.IsAny(), SearchOption.AllDirectories)) .Returns(files.ToArray()); } @@ -61,12 +65,31 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests .Verify(v => v.PublishCommand(It.IsAny()), Times.Never()); } + [Test] + public void should_not_scan_if_series_root_folder_is_empty() + { + Mocker.GetMock() + .Setup(s => s.FolderExists(It.IsAny())) + .Returns(true); + + Mocker.GetMock() + .Setup(s => s.GetDirectories(It.IsAny())) + .Returns(new string[0]); + + Subject.Scan(_series); + + ExceptionVerification.ExpectedWarns(1); + + Mocker.GetMock() + .Verify(v => v.PublishCommand(It.IsAny()), Times.Never()); + } + [Test] public void should_not_scan_extras_subfolder() { GivenParentFolderExists(); - GivenFiles(new List + GivenFiles(new List { Path.Combine(_series.Path, "EXTRAS", "file1.mkv").AsOsAgnostic(), Path.Combine(_series.Path, "Extras", "file2.mkv").AsOsAgnostic(), @@ -78,7 +101,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Subject.Scan(_series); Mocker.GetMock() - .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series, false, (QualityModel)null), Times.Once()); + .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series, false, (QualityModel)null), Times.Once()); } [Test] @@ -86,7 +109,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests { GivenParentFolderExists(); - GivenFiles(new List + GivenFiles(new List { Path.Combine(_series.Path, ".AppleDouble", "file1.mkv").AsOsAgnostic(), Path.Combine(_series.Path, ".appledouble", "file2.mkv").AsOsAgnostic(), @@ -96,7 +119,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Subject.Scan(_series); Mocker.GetMock() - .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series, false, (QualityModel)null), Times.Once()); + .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 1), _series, false, (QualityModel)null), Times.Once()); } [Test] @@ -105,7 +128,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests GivenParentFolderExists(); _series.Path = @"C:\Test\TV\Extras".AsOsAgnostic(); - GivenFiles(new List + GivenFiles(new List { Path.Combine(_series.Path, "Extras", "file1.mkv").AsOsAgnostic(), Path.Combine(_series.Path, ".AppleDouble", "file2.mkv").AsOsAgnostic(), @@ -118,7 +141,7 @@ namespace NzbDrone.Core.Test.MediaFiles.DiskScanServiceTests Subject.Scan(_series); Mocker.GetMock() - .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 4), _series, false, (QualityModel)null), Times.Once()); + .Verify(v => v.GetImportDecisions(It.Is>(l => l.Count == 4), _series, false, (QualityModel)null), Times.Once()); } } } diff --git a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs index b8a12ab81..56f46c823 100644 --- a/src/NzbDrone.Core/MediaFiles/DiskScanService.cs +++ b/src/NzbDrone.Core/MediaFiles/DiskScanService.cs @@ -69,6 +69,12 @@ namespace NzbDrone.Core.MediaFiles return; } + if (_diskProvider.GetDirectories(rootFolder).Empty()) + { + _logger.Warn("Series' root folder ({0}) is empty.", rootFolder); + return; + } + _logger.ProgressInfo("Scanning disk for {0}", series.Title); _commandExecutor.PublishCommand(new CleanMediaFileDb(series.Id));