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 ;
namespace NzbDrone.Core.Test.RootFolderTests
{
[TestFixture]
public class RootFolderServiceFixture : CoreTest < RootFolderService >
{
[SetUp]
public void Setup ( )
{
Mocker . GetMock < IDiskProvider > ( )
. Setup ( m = > m . FolderExists ( It . IsAny < string > ( ) ) )
. Returns ( true ) ;
Mocker . GetMock < IBasicRepository < RootFolder > > ( )
. Setup ( s = > s . All ( ) )
. Returns ( new List < RootFolder > ( ) ) ;
}
private void WithNoneExistingFolder ( )
{
Mocker . GetMock < IDiskProvider > ( )
. Setup ( m = > m . FolderExists ( It . IsAny < string > ( ) ) )
. Returns ( false ) ;
}
[TestCase("D:\\TV Shows\\")]
[TestCase("//server//folder")]
public void should_be_able_to_add_root_dir ( string path )
{
var root = new RootFolder { Path = path } ;
Subject . Add ( root ) ;
Mocker . GetMock < IBasicRepository < RootFolder > > ( ) . Verify ( c = > c . Insert ( root ) , Times . Once ( ) ) ;
}
[Test]
public void should_throw_if_folder_being_added_doesnt_exist ( )
{
WithNoneExistingFolder ( ) ;
Assert . Throws < DirectoryNotFoundException > ( ( ) = > Subject . Add ( new RootFolder { Path = "C:\\TEST" } ) ) ;
}
[Test]
public void should_be_able_to_remove_root_dir ( )
{
Subject . Remove ( 1 ) ;
Mocker . GetMock < IBasicRepository < RootFolder > > ( ) . Verify ( c = > c . Delete ( 1 ) , Times . Once ( ) ) ;
}
public void None_existing_folder_returns_empty_list ( )
{
WithNoneExistingFolder ( ) ;
Mocker . GetMock < IBasicRepository < RootFolder > > ( ) . Setup ( c = > c . All ( ) ) . Returns ( new List < RootFolder > ( ) ) ;
const string path = "d:\\bad folder" ;
var result = Subject . GetUnmappedFolders ( path ) ;
result . Should ( ) . NotBeNull ( ) ;
result . Should ( ) . BeEmpty ( ) ;
Mocker . GetMock < IDiskProvider > ( ) . Verify ( c = > c . GetDirectories ( It . IsAny < String > ( ) ) , Times . Never ( ) ) ;
}
[Test]
public void GetUnmappedFolders_throw_on_empty_folders ( )
{
Assert . Throws < ArgumentException > ( ( ) = > Mocker . Resolve < RootFolderService > ( ) . GetUnmappedFolders ( "" ) ) ;
}
[TestCase("")]
[TestCase(null)]
[TestCase("BAD PATH")]
public void invalid_folder_path_throws_on_add ( string path )
{
Assert . Throws < ArgumentException > ( ( ) = >
Mocker . Resolve < RootFolderService > ( ) . Add ( new RootFolder { Id = 0 , Path = path } )
) ;
}
[Test]
public void adding_duplicated_root_folder_should_throw ( )
{
Mocker . GetMock < IBasicRepository < RootFolder > > ( ) . Setup ( c = > c . All ( ) ) . Returns ( new List < RootFolder > { new RootFolder { Path = "C:\\TV" } } ) ;
Assert . Throws < InvalidOperationException > ( ( ) = > Subject . Add ( new RootFolder { Path = @"C:\TV" } ) ) ;
}
}
}