2011-12-15 07:15:53 +03:00
|
|
|
using System;
|
2011-11-13 10:27:16 +03:00
|
|
|
using System.IO;
|
2013-09-04 09:15:35 +03:00
|
|
|
using System.Threading;
|
2013-04-16 07:52:41 +03:00
|
|
|
using FluentAssertions;
|
2011-11-13 10:27:16 +03:00
|
|
|
using Moq;
|
2013-02-18 10:59:43 +03:00
|
|
|
using NLog;
|
2011-11-13 10:27:16 +03:00
|
|
|
using NUnit.Framework;
|
|
|
|
using NzbDrone.Common;
|
2013-05-23 08:12:01 +03:00
|
|
|
using NzbDrone.Common.Cache;
|
2013-06-28 03:04:52 +03:00
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2013-04-24 04:56:00 +03:00
|
|
|
using NzbDrone.Common.Messaging;
|
2013-09-11 09:33:47 +03:00
|
|
|
using NzbDrone.Core.Messaging;
|
2011-11-14 03:22:18 +03:00
|
|
|
using NzbDrone.Test.Common.AutoMoq;
|
2011-11-13 10:27:16 +03:00
|
|
|
|
|
|
|
namespace NzbDrone.Test.Common
|
|
|
|
{
|
2013-03-30 02:00:38 +03:00
|
|
|
public abstract class TestBase<TSubject> : TestBase where TSubject : class
|
|
|
|
{
|
|
|
|
|
|
|
|
private TSubject _subject;
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
public void CoreTestSetup()
|
|
|
|
{
|
|
|
|
_subject = null;
|
2013-05-23 08:12:01 +03:00
|
|
|
|
2013-03-30 02:00:38 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
protected TSubject Subject
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (_subject == null)
|
|
|
|
{
|
|
|
|
_subject = Mocker.Resolve<TSubject>();
|
|
|
|
}
|
|
|
|
|
|
|
|
return _subject;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2013-04-30 03:04:14 +03:00
|
|
|
|
2013-03-30 02:00:38 +03:00
|
|
|
}
|
|
|
|
|
2013-02-02 22:39:27 +03:00
|
|
|
public abstract class TestBase : LoggingTest
|
2011-11-13 10:27:16 +03:00
|
|
|
{
|
2013-09-04 09:15:35 +03:00
|
|
|
|
|
|
|
private static readonly Random _random = new Random();
|
|
|
|
|
2011-12-15 07:15:53 +03:00
|
|
|
private AutoMoqer _mocker;
|
|
|
|
protected AutoMoqer Mocker
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (_mocker == null)
|
|
|
|
{
|
|
|
|
_mocker = new AutoMoqer();
|
|
|
|
}
|
|
|
|
|
|
|
|
return _mocker;
|
|
|
|
}
|
|
|
|
}
|
2011-11-13 10:27:16 +03:00
|
|
|
|
2012-02-05 09:34:36 +03:00
|
|
|
protected Mock<RestProvider> MockedRestProvider { get; private set; }
|
|
|
|
|
2013-09-04 09:15:35 +03:00
|
|
|
protected int RandomNumber
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
Thread.Sleep(1);
|
|
|
|
return _random.Next(0, int.MaxValue);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-19 23:59:36 +03:00
|
|
|
private string VirtualPath
|
2011-11-13 10:27:16 +03:00
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
var virtualPath = Path.Combine(TempFolder, "VirtualNzbDrone");
|
|
|
|
if (!Directory.Exists(virtualPath)) Directory.CreateDirectory(virtualPath);
|
|
|
|
|
|
|
|
return virtualPath;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-19 23:59:36 +03:00
|
|
|
protected string TempFolder { get; private set; }
|
|
|
|
|
2011-11-13 10:27:16 +03:00
|
|
|
[SetUp]
|
2011-11-13 22:15:40 +03:00
|
|
|
public void TestBaseSetup()
|
2011-11-13 10:27:16 +03:00
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
|
2013-04-16 07:52:41 +03:00
|
|
|
GetType().IsPublic.Should().BeTrue("All Test fixtures should be public to work in mono.");
|
|
|
|
|
2013-05-30 08:10:26 +03:00
|
|
|
Mocker.SetConstant<ICacheManger>(new CacheManger());
|
2013-01-19 23:59:36 +03:00
|
|
|
|
2013-02-18 10:59:43 +03:00
|
|
|
Mocker.SetConstant(LogManager.GetLogger("TestLogger"));
|
|
|
|
|
2013-08-13 08:08:37 +03:00
|
|
|
Mocker.SetConstant<IStartupArguments>(new StartupArguments(new string[0]));
|
2013-07-09 03:47:09 +03:00
|
|
|
|
2013-03-04 08:53:02 +03:00
|
|
|
LogManager.ReconfigExistingLoggers();
|
|
|
|
|
2013-01-19 23:59:36 +03:00
|
|
|
TempFolder = Path.Combine(Directory.GetCurrentDirectory(), "_temp_" + DateTime.Now.Ticks);
|
|
|
|
|
2012-02-05 09:34:36 +03:00
|
|
|
MockedRestProvider = new Mock<RestProvider>();
|
2012-04-23 02:14:02 +03:00
|
|
|
|
2011-11-13 10:27:16 +03:00
|
|
|
Directory.CreateDirectory(TempFolder);
|
|
|
|
}
|
|
|
|
|
2011-11-13 22:15:40 +03:00
|
|
|
[TearDown]
|
|
|
|
public void TestBaseTearDown()
|
|
|
|
{
|
2011-12-15 07:15:53 +03:00
|
|
|
_mocker = null;
|
2013-01-19 23:59:36 +03:00
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
if (Directory.Exists(TempFolder))
|
|
|
|
{
|
|
|
|
Directory.Delete(TempFolder, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception)
|
|
|
|
{
|
|
|
|
}
|
2013-06-28 04:03:04 +03:00
|
|
|
}
|
2013-04-30 03:04:14 +03:00
|
|
|
|
|
|
|
|
2013-07-05 07:43:28 +03:00
|
|
|
protected IAppFolderInfo TestFolderInfo { get; private set; }
|
2013-04-30 03:39:25 +03:00
|
|
|
|
|
|
|
protected void WindowsOnly()
|
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
if (OsInfo.IsLinux)
|
2013-04-30 03:39:25 +03:00
|
|
|
{
|
|
|
|
throw new IgnoreException("windows specific test");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected void LinuxOnly()
|
|
|
|
{
|
2013-06-28 03:04:52 +03:00
|
|
|
if (!OsInfo.IsLinux)
|
2013-04-30 03:39:25 +03:00
|
|
|
{
|
|
|
|
throw new IgnoreException("linux specific test");
|
2013-04-30 03:04:14 +03:00
|
|
|
}
|
2011-11-13 10:27:16 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
protected void WithTempAsAppPath()
|
|
|
|
{
|
2013-07-05 07:43:28 +03:00
|
|
|
Mocker.GetMock<IAppFolderInfo>()
|
|
|
|
.SetupGet(c => c.AppDataFolder)
|
2011-11-13 10:27:16 +03:00
|
|
|
.Returns(VirtualPath);
|
2013-06-28 04:03:04 +03:00
|
|
|
|
2013-07-05 07:43:28 +03:00
|
|
|
TestFolderInfo = Mocker.GetMock<IAppFolderInfo>().Object;
|
2011-11-13 10:27:16 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
protected string GetTestFilePath(string fileName)
|
|
|
|
{
|
2013-07-27 07:34:11 +03:00
|
|
|
return Path.Combine(SandboxFolder, fileName);
|
2011-11-13 10:27:16 +03:00
|
|
|
}
|
2013-02-24 22:18:48 +03:00
|
|
|
|
2013-09-13 07:59:29 +03:00
|
|
|
protected string GetTestFilePath()
|
|
|
|
{
|
|
|
|
return GetTestFilePath(Path.GetTempFileName());
|
|
|
|
}
|
|
|
|
|
2013-07-27 07:34:11 +03:00
|
|
|
protected string SandboxFolder
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
var folder = Path.Combine(Directory.GetCurrentDirectory(), "Files");
|
|
|
|
Directory.CreateDirectory(folder);
|
|
|
|
return folder;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2013-05-13 05:52:55 +03:00
|
|
|
protected void VerifyEventPublished<TEvent>() where TEvent : class, IEvent
|
2013-02-24 22:18:48 +03:00
|
|
|
{
|
2013-03-07 07:34:56 +03:00
|
|
|
VerifyEventPublished<TEvent>(Times.Once());
|
|
|
|
}
|
|
|
|
|
2013-05-13 05:52:55 +03:00
|
|
|
protected void VerifyEventPublished<TEvent>(Times times) where TEvent : class, IEvent
|
2013-03-07 07:34:56 +03:00
|
|
|
{
|
2013-04-27 05:03:34 +03:00
|
|
|
Mocker.GetMock<IMessageAggregator>().Verify(c => c.PublishEvent(It.IsAny<TEvent>()), times);
|
2013-02-24 22:18:48 +03:00
|
|
|
}
|
|
|
|
|
2013-05-13 05:52:55 +03:00
|
|
|
protected void VerifyEventNotPublished<TEvent>() where TEvent : class, IEvent
|
2013-02-24 22:18:48 +03:00
|
|
|
{
|
2013-04-27 05:03:34 +03:00
|
|
|
Mocker.GetMock<IMessageAggregator>().Verify(c => c.PublishEvent(It.IsAny<TEvent>()), Times.Never());
|
2013-02-24 22:18:48 +03:00
|
|
|
}
|
2011-11-13 10:27:16 +03:00
|
|
|
}
|
|
|
|
}
|