using System; using System.IO; using System.Linq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Core.Datastore; namespace NzbDrone.Core.Test.Framework { public abstract class RepositoryTest : ObjectDbTest where TRepository : class, IBasicRepository where TModel : ModelBase, new() { protected BasicRepository Storage { get; private set; } [SetUp] public void RepositoryTestSetup() { WithObjectDb(); Storage = Mocker.Resolve>(); } } public abstract class ObjectDbTest : ObjectDbTest where TSubject : class { private TSubject _subject; [SetUp] public void CoreTestSetup() { _subject = null; } protected TSubject Subject { get { if (_subject == null) { _subject = Mocker.Resolve(); } return _subject; } } } public abstract class ObjectDbTest : CoreTest { private IObjectDatabase _db; protected IObjectDatabase Db { get { if (_db == null) throw new InvalidOperationException("Test object database doesn't exists. Make sure you call WithRealDb() if you intend to use an actual database."); return _db; } } protected void WithObjectDb(bool memory = true) { //if (memory) //{ // _db = new SiaqoDbFactory(new DiskProvider(),new EnvironmentProvider()).CreateMemoryDb(); //} //else //{ _db = new SiaqoDbFactory(new DiskProvider(), new EnvironmentProvider()).Create(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Guid.NewGuid().ToString())); //} Mocker.SetConstant(Db); } [TearDown] public void ObjectDbTearDown() { if (_db != null) { _db.Dispose(); } } } }