using System; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using Autofac; using NHibernate; using NUnit.Framework; using Orchard.ContentManagement.FieldStorage.InfosetStorage; using Orchard.ContentManagement.Handlers; using Orchard.Data; using Orchard.Environment.Configuration; using Orchard.Services; using Orchard.Tests.ContentManagement; using Orchard.Tests.Data; using Orchard.Tests.Stubs; namespace Orchard.Tests.Modules { public abstract class DatabaseEnabledTestsBase { protected IContainer _container; protected ITransaction _transaction; protected ISession _session; protected string _databaseFilePath; protected ISessionFactory _sessionFactory; protected StubClock _clock; [OneTimeSetUp] public void InitFixture() { } [OneTimeTearDown] public void TearDownFixture() { File.Delete(_databaseFilePath); } [SetUp] public virtual void Init() { _databaseFilePath = Path.GetTempFileName(); _sessionFactory = DataUtility.CreateSessionFactory(_databaseFilePath, DatabaseTypes.ToArray()); _session = _sessionFactory.OpenSession(); _transaction = _session.BeginTransaction(IsolationLevel.ReadCommitted); _clock = new StubClock(); var builder = new ContainerBuilder(); //builder.RegisterModule(new ImplicitCollectionSupportModule()); builder.RegisterType().As(); builder.RegisterInstance(new StubLocator(_session)).As(); builder.RegisterInstance(_clock).As(); builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); builder.RegisterInstance(new ShellSettings { Name = ShellSettings.DefaultName, DataProvider = "SqlCe" }); builder.RegisterInstance(new TestTransactionManager(_session)).As(); Register(builder); _container = builder.Build(); } [TearDown] public virtual void Cleanup() { if (_container != null) _container.Dispose(); } public abstract void Register(ContainerBuilder builder); protected virtual IEnumerable DatabaseTypes => Enumerable.Empty(); protected void ClearSession() { Trace.WriteLine("Flush and clear session"); _transaction.Commit(); _session.Clear(); _transaction = _session.BeginTransaction(IsolationLevel.ReadCommitted); Trace.WriteLine("Flushed and cleared session"); } } }