diff --git a/NzbDrone.Core.Test/RootDirProviderTest.cs b/NzbDrone.Core.Test/RootDirProviderTest.cs index 1ddf58866..796709dc2 100644 --- a/NzbDrone.Core.Test/RootDirProviderTest.cs +++ b/NzbDrone.Core.Test/RootDirProviderTest.cs @@ -40,15 +40,14 @@ public void GetRootDirs() Assert.AreEqual(result.Count, 2); } - [Test] - public void AddRootDir() + [TestCase("D:\\TV Shows\\")] + [TestCase("//server//folder")] + public void AddRootDir(string path) { //Setup var mocker = new AutoMoqer(); mocker.SetConstant(MockLib.GetEmptyRepository()); - const string path = @"C:\TV\"; - //Act var rootDirProvider = mocker.Resolve(); rootDirProvider.Add(new RootDir { Path = path }); @@ -62,25 +61,26 @@ public void AddRootDir() Assert.AreEqual(path, rootDirs.First().Path); } - [Test] - public void UpdateRootDir() + + [TestCase("D:\\TV Shows\\")] + [TestCase("//server//folder")] + public void UpdateRootDir(string newPath) { //Setup var mocker = new AutoMoqer(); mocker.SetConstant(MockLib.GetEmptyRepository()); - const string path = @"C:\TV2"; //Act var rootDirProvider = mocker.Resolve(); rootDirProvider.Add(new RootDir { Path = @"C:\TV" }); - rootDirProvider.Update(new RootDir { Id = 1, Path = path }); + rootDirProvider.Update(new RootDir { Id = 1, Path = newPath }); //Assert var rootDirs = rootDirProvider.GetAll(); Assert.IsNotEmpty(rootDirs); rootDirs.Should().HaveCount(1); - Assert.AreEqual(path, rootDirs.First().Path); + Assert.AreEqual(newPath, rootDirs.First().Path); } [Test] @@ -144,5 +144,25 @@ public void empty_folder_path_throws() var mocker = new AutoMoqer(); mocker.Resolve().GetUnmappedFolders(""); } + + [TestCase("")] + [TestCase(null)] + [TestCase("BAD PATH")] + [ExpectedException(typeof(ArgumentException))] + public void invalid_folder_path_throws_on_add(string path) + { + var mocker = new AutoMoqer(); + mocker.Resolve().Add(new RootDir { Id = 0, Path = path }); + } + + [TestCase("")] + [TestCase(null)] + [TestCase("BAD PATH")] + [ExpectedException(typeof(ArgumentException))] + public void invalid_folder_path_throws_on_update(string path) + { + var mocker = new AutoMoqer(); + mocker.Resolve().Update(new RootDir { Id = 2, Path = path }); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/RootDirProvider.cs b/NzbDrone.Core/Providers/RootDirProvider.cs index 9c1e1aee9..1bb341d20 100644 --- a/NzbDrone.Core/Providers/RootDirProvider.cs +++ b/NzbDrone.Core/Providers/RootDirProvider.cs @@ -11,15 +11,15 @@ namespace NzbDrone.Core.Providers { public class RootDirProvider { - private readonly IRepository _sonioRepo; + private readonly IRepository _repository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly DiskProvider _diskProvider; private readonly SeriesProvider _seriesProvider; - public RootDirProvider(IRepository sonicRepo, SeriesProvider seriesProvider, DiskProvider diskProvider) + public RootDirProvider(IRepository repository, SeriesProvider seriesProvider, DiskProvider diskProvider) { - _sonioRepo = sonicRepo; + _repository = repository; _diskProvider = diskProvider; _seriesProvider = seriesProvider; } @@ -28,27 +28,39 @@ public RootDirProvider(IRepository sonicRepo, SeriesProvider seriesProvider, Dis public virtual List GetAll() { - return _sonioRepo.All().ToList(); + return _repository.All().ToList(); } - public virtual int Add(RootDir rootDir) + public virtual void Add(RootDir rootDir) { - return Convert.ToInt32(_sonioRepo.Add(rootDir)); + ValidatePath(rootDir); + + _repository.Add(rootDir); } public virtual void Remove(int rootDirId) { - _sonioRepo.Delete(rootDirId); + _repository.Delete(rootDirId); } public virtual void Update(RootDir rootDir) { - _sonioRepo.Update(rootDir); + ValidatePath(rootDir); + + _repository.Update(rootDir); + } + + private static void ValidatePath(RootDir rootDir) + { + if (String.IsNullOrWhiteSpace(rootDir.Path) || !Path.IsPathRooted(rootDir.Path)) + { + throw new ArgumentException("Invalid path"); + } } public virtual RootDir GetRootDir(int rootDirId) { - return _sonioRepo.Single(rootDirId); + return _repository.Single(rootDirId); } public List GetUnmappedFolders(string path)