2011-12-14 20:15:53 -08:00
using System ;
using System.Linq ;
2011-11-12 23:27:16 -08:00
using System.IO ;
using Moq ;
2013-02-17 23:59:43 -08:00
using NLog ;
2011-11-12 23:27:16 -08:00
using NUnit.Framework ;
using NzbDrone.Common ;
2013-02-24 11:18:48 -08:00
using NzbDrone.Common.Eventing ;
2011-11-13 16:22:18 -08:00
using NzbDrone.Test.Common.AutoMoq ;
2011-11-12 23:27:16 -08:00
namespace NzbDrone.Test.Common
{
2013-02-02 11:39:27 -08:00
public abstract class TestBase : LoggingTest
2011-11-12 23:27:16 -08:00
{
2011-12-01 17:33:17 -08:00
protected const string INTEGRATION_TEST = "Integration Test" ;
2011-11-13 16:22:18 -08:00
2011-12-14 20:15:53 -08:00
private AutoMoqer _mocker ;
protected AutoMoqer Mocker
{
get
{
if ( _mocker = = null )
{
_mocker = new AutoMoqer ( ) ;
}
return _mocker ;
}
}
2011-11-12 23:27:16 -08:00
2012-02-04 22:34:36 -08:00
protected Mock < RestProvider > MockedRestProvider { get ; private set ; }
2013-01-19 12:59:36 -08:00
private string VirtualPath
2011-11-12 23:27:16 -08:00
{
get
{
var virtualPath = Path . Combine ( TempFolder , "VirtualNzbDrone" ) ;
if ( ! Directory . Exists ( virtualPath ) ) Directory . CreateDirectory ( virtualPath ) ;
return virtualPath ;
}
}
2013-01-19 12:59:36 -08:00
protected string TempFolder { get ; private set ; }
2011-11-12 23:27:16 -08:00
[SetUp]
2011-11-13 11:15:40 -08:00
public void TestBaseSetup ( )
2011-11-12 23:27:16 -08:00
{
2013-01-19 12:59:36 -08:00
2013-02-17 23:59:43 -08:00
Mocker . SetConstant ( LogManager . GetLogger ( "TestLogger" ) ) ;
2013-03-03 21:53:02 -08:00
LogManager . ReconfigExistingLoggers ( ) ;
2013-01-19 12:59:36 -08:00
TempFolder = Path . Combine ( Directory . GetCurrentDirectory ( ) , "_temp_" + DateTime . Now . Ticks ) ;
2012-02-04 22:34:36 -08:00
MockedRestProvider = new Mock < RestProvider > ( ) ;
ReportingService . RestProvider = MockedRestProvider . Object ;
2012-04-22 16:14:02 -07:00
2011-11-12 23:27:16 -08:00
Directory . CreateDirectory ( TempFolder ) ;
}
2011-11-13 11:15:40 -08:00
[TearDown]
public void TestBaseTearDown ( )
{
2011-12-14 20:15:53 -08:00
_mocker = null ;
2013-01-19 12:59:36 -08:00
try
{
if ( Directory . Exists ( TempFolder ) )
{
Directory . Delete ( TempFolder , true ) ;
}
}
catch ( Exception )
{
}
2011-11-13 11:15:40 -08:00
}
2013-02-18 17:57:08 -08:00
[Obsolete("Use Mock.Verify() instead")]
2011-12-01 17:37:38 -08:00
protected void WithStrictMocker ( )
2011-11-12 23:27:16 -08:00
{
2013-02-18 17:57:08 -08:00
return ;
//TODO: Remove dependency on restrict mocks!
2011-12-14 20:15:53 -08:00
if ( _mocker ! = null )
throw new InvalidOperationException ( "Can not switch to a strict container after container has been used. make sure this is the first call in your test." ) ;
_mocker = new AutoMoqer ( MockBehavior . Strict ) ;
2011-11-12 23:27:16 -08:00
}
protected void WithTempAsAppPath ( )
{
2012-03-06 18:59:43 -08:00
Mocker . GetMock < EnvironmentProvider > ( )
2011-11-12 23:27:16 -08:00
. SetupGet ( c = > c . ApplicationPath )
. Returns ( VirtualPath ) ;
}
protected string GetTestFilePath ( string fileName )
{
2013-02-17 11:19:38 -08:00
return Path . Combine ( Directory . GetCurrentDirectory ( ) , "Files" , fileName ) ;
2011-11-12 23:27:16 -08:00
}
2013-02-24 11:18:48 -08:00
2013-03-07 13:34:56 +09:00
2013-02-24 11:39:31 -08:00
protected void VerifyEventPublished < TEvent > ( ) where TEvent : IEvent
2013-02-24 11:18:48 -08:00
{
2013-03-07 13:34:56 +09:00
VerifyEventPublished < TEvent > ( Times . Once ( ) ) ;
}
protected void VerifyEventPublished < TEvent > ( Times times ) where TEvent : IEvent
{
Mocker . GetMock < IEventAggregator > ( ) . Verify ( c = > c . Publish ( It . IsAny < TEvent > ( ) ) , times ) ;
2013-02-24 11:18:48 -08:00
}
protected void VerifyEventNotPublished < TEvent > ( ) where TEvent : IEvent
{
Mocker . GetMock < IEventAggregator > ( ) . Verify ( c = > c . Publish ( It . IsAny < TEvent > ( ) ) , Times . Never ( ) ) ;
}
2011-11-12 23:27:16 -08:00
}
}