Radarr/src/NzbDrone.Test.Common/TestBase.cs

220 lines
5.6 KiB
C#
Raw Normal View History

2018-04-21 04:59:31 +00:00
using System;
using System.Diagnostics;
2011-11-13 07:27:16 +00:00
using System.IO;
2013-09-04 06:15:35 +00:00
using System.Threading;
2013-04-16 04:52:41 +00:00
using FluentAssertions;
2011-11-13 07:27:16 +00:00
using Moq;
using NLog;
2011-11-13 07:27:16 +00:00
using NUnit.Framework;
using NzbDrone.Common.Cache;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Messaging;
2013-09-14 06:42:09 +00:00
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Test.Common.AutoMoq;
2011-11-13 07:27:16 +00:00
namespace NzbDrone.Test.Common
{
2019-12-22 22:08:53 +00:00
public abstract class TestBase<TSubject> : TestBase
where TSubject : class
{
private TSubject _subject;
[SetUp]
public void CoreTestSetup()
{
_subject = null;
}
protected TSubject Subject
{
get
{
if (_subject == null)
{
_subject = Mocker.Resolve<TSubject>();
}
return _subject;
}
}
}
public abstract class TestBase : LoggingTest
2011-11-13 07:27:16 +00:00
{
2013-09-04 06:15:35 +00:00
private static readonly Random _random = new Random();
private static int _nextUid;
2013-09-04 06:15:35 +00:00
2011-12-15 04:15:53 +00:00
private AutoMoqer _mocker;
protected AutoMoqer Mocker
{
get
{
if (_mocker == null)
{
_mocker = new AutoMoqer();
2014-09-11 23:49:41 +00:00
_mocker.SetConstant<ICacheManager>(new CacheManager());
_mocker.SetConstant<IStartupContext>(new StartupContext(Array.Empty<string>()));
2014-09-11 23:49:41 +00:00
_mocker.SetConstant(TestLogger);
2011-12-15 04:15:53 +00:00
}
return _mocker;
}
}
2011-11-13 07:27:16 +00:00
2013-09-04 06:15:35 +00:00
protected int RandomNumber
{
get
{
Thread.Sleep(1);
return _random.Next(0, int.MaxValue);
}
}
private string VirtualPath
2011-11-13 07:27:16 +00:00
{
get
{
var virtualPath = Path.Combine(TempFolder, "VirtualNzbDrone");
2019-12-22 22:08:53 +00:00
if (!Directory.Exists(virtualPath))
{
Directory.CreateDirectory(virtualPath);
}
2011-11-13 07:27:16 +00:00
return virtualPath;
}
}
private string _tempFolder;
protected string TempFolder
{
get
{
if (_tempFolder == null)
{
_tempFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "_temp_" + GetUID());
Directory.CreateDirectory(_tempFolder);
}
return _tempFolder;
}
}
2011-11-13 07:27:16 +00:00
[SetUp]
2011-11-13 19:15:40 +00:00
public void TestBaseSetup()
2011-11-13 07:27:16 +00:00
{
2013-04-16 04:52:41 +00:00
GetType().IsPublic.Should().BeTrue("All Test fixtures should be public to work in mono.");
LogManager.ReconfigExistingLoggers();
_tempFolder = null;
2011-11-13 07:27:16 +00:00
}
2011-11-13 19:15:40 +00:00
[TearDown]
public void TestBaseTearDown()
{
2011-12-15 04:15:53 +00:00
_mocker = null;
DeleteTempFolder(_tempFolder);
}
public static string GetUID()
{
return Process.GetCurrentProcess().Id + "_" + DateTime.Now.Ticks + "_" + Interlocked.Increment(ref _nextUid);
}
public static void DeleteTempFolder(string folder)
{
if (folder == null)
{
return;
}
try
{
var tempFolder = new DirectoryInfo(folder);
if (tempFolder.Exists)
{
foreach (var file in tempFolder.GetFiles("*", SearchOption.AllDirectories))
{
file.IsReadOnly = false;
}
tempFolder.Delete(true);
}
}
catch (Exception)
{
}
2013-06-28 01:03:04 +00:00
}
2013-04-30 00:04:14 +00:00
protected IAppFolderInfo TestFolderInfo { get; private set; }
2013-04-30 00:39:25 +00:00
protected void WindowsOnly()
{
2014-12-07 20:54:07 +00:00
if (OsInfo.IsNotWindows)
2013-04-30 00:39:25 +00:00
{
throw new IgnoreException("windows specific test");
}
}
2019-10-14 20:21:00 +00:00
protected void PosixOnly()
{
if (OsInfo.IsWindows)
{
throw new IgnoreException("non windows specific test");
}
}
2014-03-14 10:15:30 +00:00
protected void MonoOnly()
2013-04-30 00:39:25 +00:00
{
2018-04-21 04:59:31 +00:00
if (!PlatformInfo.IsMono)
2013-04-30 00:39:25 +00:00
{
2014-09-11 23:49:41 +00:00
throw new IgnoreException("mono specific test");
2013-04-30 00:04:14 +00:00
}
2011-11-13 07:27:16 +00:00
}
protected void WithTempAsAppPath()
{
Mocker.GetMock<IAppFolderInfo>()
.SetupGet(c => c.AppDataFolder)
2011-11-13 07:27:16 +00:00
.Returns(VirtualPath);
2013-06-28 01:03:04 +00:00
TestFolderInfo = Mocker.GetMock<IAppFolderInfo>().Object;
2011-11-13 07:27:16 +00:00
}
protected string GetTestPath(string path)
{
return Path.Combine(TestContext.CurrentContext.TestDirectory, Path.Combine(path.Split('/')));
}
protected string ReadAllText(string path)
{
return File.ReadAllText(GetTestPath(path));
}
protected string GetTempFilePath()
{
return Path.Combine(TempFolder, Path.GetRandomFileName());
}
2019-12-22 22:08:53 +00:00
protected void VerifyEventPublished<TEvent>()
where TEvent : class, IEvent
{
VerifyEventPublished<TEvent>(Times.Once());
}
2019-12-22 22:08:53 +00:00
protected void VerifyEventPublished<TEvent>(Times times)
where TEvent : class, IEvent
{
Mocker.GetMock<IEventAggregator>().Verify(c => c.PublishEvent(It.IsAny<TEvent>()), times);
}
2019-12-22 22:08:53 +00:00
protected void VerifyEventNotPublished<TEvent>()
where TEvent : class, IEvent
{
Mocker.GetMock<IEventAggregator>().Verify(c => c.PublishEvent(It.IsAny<TEvent>()), Times.Never());
}
2011-11-13 07:27:16 +00:00
}
}