using System; using System.Collections.Generic; using System.IO; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Core.Datastore; using NzbDrone.Core.RootFolders; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.RootFolderTests { [TestFixture] public class FreeSpaceOnDrivesFixture : CoreTest { [Test] public void should_return_one_drive_when_only_one_root_dir_exists() { Mocker.GetMock>() .Setup(s => s.All()) .Returns(new List { new RootFolder { Id = 1, Path = @"C:\Test\TV" } }); Mocker.GetMock() .Setup(s => s.GetPathRoot(@"C:\Test\TV")) .Returns(@"C:\"); Mocker.GetMock() .Setup(s => s.GetAvilableSpace(@"C:\")) .Returns(123456); var result = Subject.FreeSpaceOnDrives(); result.Should().HaveCount(1); } [Test] public void should_return_one_drive_when_two_rootDirs_on_the_same_drive_exist() { Mocker.GetMock>() .Setup(s => s.All()) .Returns(new List { new RootFolder { Id = 1, Path = @"C:\Test\TV" }, new RootFolder { Id = 2, Path = @"C:\Test\TV2" }}); Mocker.GetMock() .Setup(s => s.GetPathRoot(It.IsAny())) .Returns(@"C:\"); Mocker.GetMock() .Setup(s => s.GetAvilableSpace(@"C:\")) .Returns(123456); var result = Subject.FreeSpaceOnDrives(); result.Should().HaveCount(1); } [Test] public void should_return_two_drives_when_two_rootDirs_on_the_different_drive_exist() { Mocker.GetMock>() .Setup(s => s.All()) .Returns(new List { new RootFolder { Id = 1, Path = @"C:\Test\TV" }, new RootFolder { Id = 2, Path = @"D:\Test\TV" }}); Mocker.GetMock() .Setup(s => s.GetPathRoot(@"C:\Test\TV")) .Returns(@"C:\"); Mocker.GetMock() .Setup(s => s.GetPathRoot(@"D:\Test\TV")) .Returns(@"D:\"); Mocker.GetMock() .Setup(s => s.GetAvilableSpace(It.IsAny())) .Returns(123456); var result = Subject.FreeSpaceOnDrives(); result.Should().HaveCount(2); } [Test] public void should_skip_rootDir_if_not_found_on_disk() { Mocker.GetMock>() .Setup(s => s.All()) .Returns(new List { new RootFolder { Id = 1, Path = @"C:\Test\TV" } }); Mocker.GetMock() .Setup(s => s.GetPathRoot(@"C:\Test\TV")) .Returns(@"C:\"); Mocker.GetMock() .Setup(s => s.GetAvilableSpace(It.IsAny())) .Throws(new DirectoryNotFoundException()); var result = Subject.FreeSpaceOnDrives(); result.Should().HaveCount(0); ExceptionVerification.ExpectedWarns(1); } } }