Skip to content

Commit

Permalink
#3 Moved all Database Tests under Collection Fixture to share context
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Gerbenis committed Oct 7, 2015
1 parent 6cbf22a commit d85db58
Show file tree
Hide file tree
Showing 20 changed files with 254 additions and 126 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ public static IServiceCollection AddBetterModulesCore(this IServiceCollection se

services.LoadAssemblies();

RunDatabaseMigrations(services);
// Do not run migrations when running tests
if (configuration["isTestMode"] != true.ToString())
{
RunDatabaseMigrations(services);
}

return services;
}
Expand Down
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,24 @@

namespace BetterModules.Core.Database.Tests.DataAccess.DataContext
{
public class DefaultUnitOfWorkFactoryIntegrationTests : DatabaseTestBase
[Collection("Database test collection")]
public class DefaultUnitOfWorkFactoryIntegrationTests
{
private DatabaseTestFixture fixture;

public DefaultUnitOfWorkFactoryIntegrationTests(DatabaseTestFixture fixture)
{
this.fixture = fixture;
}

[Fact]
public void Should_Create_New_Unit_Of_Work()
{
var factory = new DefaultUnitOfWorkFactory(Provider.GetService<ISessionFactoryProvider>());
var factory = new DefaultUnitOfWorkFactory(fixture.Provider.GetService<ISessionFactoryProvider>());
var uow = factory.New();

Assert.NotNull(uow);
Assert.NotEqual(uow, UnitOfWork);
Assert.NotEqual(uow, fixture.UnitOfWork);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,20 @@

namespace BetterModules.Core.Database.Tests.DataAccess.DataContext
{
public class DefaultUnitOfWorkTests : DatabaseTestBase
[Collection("Database test collection")]
public class DefaultUnitOfWorkTests
{
private DatabaseTestFixture fixture;

public DefaultUnitOfWorkTests(DatabaseTestFixture fixture)
{
this.fixture = fixture;
}

[Fact]
public void Should_Create_UoW_With_Session_Successfully()
{
var sessionFactoryProvider = Provider.GetService<ISessionFactoryProvider>();
var sessionFactoryProvider = fixture.Provider.GetService<ISessionFactoryProvider>();
using (var session = sessionFactoryProvider.OpenSession())
{
using (var unitOfWork = new DefaultUnitOfWork(session))
Expand All @@ -24,7 +32,7 @@ public void Should_Create_UoW_With_Session_Successfully()
[Fact]
public void Should_Create_UoW_With_SessionFactoryprovider_Successfully()
{
using (var unitOfWork = new DefaultUnitOfWork(Provider.GetService<ISessionFactoryProvider>()))
using (var unitOfWork = new DefaultUnitOfWork(fixture.Provider.GetService<ISessionFactoryProvider>()))
{
Assert.NotNull(unitOfWork.Session);
}
Expand All @@ -33,7 +41,7 @@ public void Should_Create_UoW_With_SessionFactoryprovider_Successfully()
[Fact]
public void Should_Create_Transaction_Successfuly()
{
using (var unitOfWork = new DefaultUnitOfWork(Provider.GetService<ISessionFactoryProvider>()))
using (var unitOfWork = new DefaultUnitOfWork(fixture.Provider.GetService<ISessionFactoryProvider>()))
{
Assert.False(unitOfWork.IsActiveTransaction);
unitOfWork.BeginTransaction();
Expand All @@ -46,7 +54,7 @@ public void Should_Throw_Exception_Creating_Multiple_Transactions()
{
Assert.Throws<DataException>(() =>
{
using (var unitOfWork = new DefaultUnitOfWork(Provider.GetService<ISessionFactoryProvider>()))
using (var unitOfWork = new DefaultUnitOfWork(fixture.Provider.GetService<ISessionFactoryProvider>()))
{
unitOfWork.BeginTransaction();
unitOfWork.BeginTransaction();
Expand All @@ -57,25 +65,25 @@ public void Should_Throw_Exception_Creating_Multiple_Transactions()
[Fact]
public void Should_Rollback_Transaction_Successfully()
{
var model1 = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model2 = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model1 = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model2 = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();

try
{
UnitOfWork.BeginTransaction();
fixture.UnitOfWork.BeginTransaction();

Repository.Save(model1);
Repository.Save(model2);
fixture.Repository.Save(model1);
fixture.Repository.Save(model2);

UnitOfWork.Rollback();
fixture.UnitOfWork.Rollback();
}
catch
{
// Do nothing here
}

var loadedModel1 = Repository.FirstOrDefault<TestItemModel>(model1.Id);
var loadedModel2 = Repository.FirstOrDefault<TestItemModel>(model2.Id);
var loadedModel1 = fixture.Repository.FirstOrDefault<TestItemModel>(model1.Id);
var loadedModel2 = fixture.Repository.FirstOrDefault<TestItemModel>(model2.Id);

Assert.Null(loadedModel1);
Assert.Null(loadedModel2);
Expand All @@ -84,26 +92,26 @@ public void Should_Rollback_Transaction_Successfully()
[Fact]
public void Should_Commit_And_Rollback_Transactions_Successfully()
{
var model1 = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model2 = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model1 = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model2 = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();

try
{
UnitOfWork.BeginTransaction();
Repository.Save(model1);
UnitOfWork.Commit();
fixture.UnitOfWork.BeginTransaction();
fixture.Repository.Save(model1);
fixture.UnitOfWork.Commit();

UnitOfWork.BeginTransaction();
Repository.Save(model2);
UnitOfWork.Rollback();
fixture.UnitOfWork.BeginTransaction();
fixture.Repository.Save(model2);
fixture.UnitOfWork.Rollback();
}
catch
{
// Do nothing here
}

var loadedModel1 = Repository.FirstOrDefault<TestItemModel>(model1.Id);
var loadedModel2 = Repository.FirstOrDefault<TestItemModel>(model2.Id);
var loadedModel1 = fixture.Repository.FirstOrDefault<TestItemModel>(model1.Id);
var loadedModel2 = fixture.Repository.FirstOrDefault<TestItemModel>(model2.Id);

Assert.NotNull(loadedModel1);
Assert.Null(loadedModel2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,28 @@

namespace BetterModules.Core.Database.Tests.DataAccess.DataContext.EventListeners
{
public class DeleteEventListenerIntegrationTests : DatabaseTestBase
[Collection("Database test collection")]
public class DeleteEventListenerIntegrationTests
{
private DatabaseTestFixture fixture;

public DeleteEventListenerIntegrationTests(DatabaseTestFixture fixture)
{
this.fixture = fixture;
}

[Fact]
public void Should_Mark_Entity_As_Deleted()
{
var entity = DatabaseTestDataProvider.ProvideRandomTestItemModel();
Repository.Save(entity);
UnitOfWork.Commit();
var entity = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
fixture.Repository.Save(entity);
fixture.UnitOfWork.Commit();

Assert.NotSame(entity.Id.ToString(), Guid.Empty.ToString());
Repository.Delete(entity);
UnitOfWork.Commit();
fixture.Repository.Delete(entity);
fixture.UnitOfWork.Commit();

var principalProvider = Provider.GetService<IPrincipalProvider>();
var principalProvider = fixture.Provider.GetService<IPrincipalProvider>();

Assert.True(entity.IsDeleted);
Assert.NotNull(entity.DeletedOn);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,24 @@

namespace BetterModules.Core.Database.Tests.DataAccess.DataContext.EventListeners
{
public class SaveOrUpdateEventListenerTests : DatabaseTestBase
[Collection("Database test collection")]
public class SaveOrUpdateEventListenerTests
{
private DatabaseTestFixture fixture;

public SaveOrUpdateEventListenerTests(DatabaseTestFixture fixture)
{
this.fixture = fixture;
}

[Fact]
public void Should_Update_Entity_Properties_When_Creating()
{
var entity = DatabaseTestDataProvider.ProvideRandomTestItemModel();
Repository.Save(entity);
UnitOfWork.Commit();
var entity = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
fixture.Repository.Save(entity);
fixture.UnitOfWork.Commit();

var principalProvider = Provider.GetService<IPrincipalProvider>();
var principalProvider = fixture.Provider.GetService<IPrincipalProvider>();

Assert.NotNull(entity.CreatedOn);
Assert.Equal(entity.CreatedByUser, principalProvider.CurrentPrincipalName);
Expand All @@ -25,11 +33,11 @@ public void Should_Update_Entity_Properties_When_Creating()
[Fact]
public void Should_Update_Entity_Properties_When_Updating()
{
var entity = DatabaseTestDataProvider.ProvideRandomTestItemModel();
Repository.Save(entity);
UnitOfWork.Commit();
var entity = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
fixture.Repository.Save(entity);
fixture.UnitOfWork.Commit();

var principalProvider = Provider.GetService<IPrincipalProvider>();
var principalProvider = fixture.Provider.GetService<IPrincipalProvider>();

Assert.NotNull(entity.CreatedOn);
Assert.Equal(entity.CreatedByUser, principalProvider.CurrentPrincipalName);
Expand All @@ -38,10 +46,10 @@ public void Should_Update_Entity_Properties_When_Updating()

var modified = entity.ModifiedOn;

var loadedEntity = Repository.FirstOrDefault<TestItemModel>(entity.Id);
loadedEntity.Name = TestDataProvider.ProvideRandomString(100);
Repository.Save(loadedEntity);
UnitOfWork.Commit();
var loadedEntity = fixture.Repository.FirstOrDefault<TestItemModel>(entity.Id);
loadedEntity.Name = fixture.TestDataProvider.ProvideRandomString(100);
fixture.Repository.Save(loadedEntity);
fixture.UnitOfWork.Commit();

Assert.NotNull(loadedEntity.CreatedOn);
Assert.Equal(loadedEntity.CreatedByUser, principalProvider.CurrentPrincipalName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,49 @@

namespace BetterModules.Core.Database.Tests.DataAccess.DataContext.Interceptors
{
public class StaleInterceptorIntegrationTests : DatabaseTestBase
{
[Collection("Database test collection")]
public class StaleInterceptorIntegrationTests
{
private DatabaseTestFixture fixture;

public StaleInterceptorIntegrationTests(DatabaseTestFixture fixture)
{
this.fixture = fixture;
}

[Fact]
public void Should_Create_Version()
{
var model = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();

Assert.Equal(model.Version, 0);

Repository.Save(model);
UnitOfWork.Commit();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();

Assert.Equal(model.Version, 1);
}

[Fact]
public void Should_Increase_Version_If_Dirty()
{
var model = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();

Assert.Equal(model.Version, 0);

Repository.Save(model);
UnitOfWork.Commit();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();

Assert.Equal(model.Version, 1);

Repository.Save(model);
UnitOfWork.Commit();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();

Assert.Equal(model.Version, 1);

model.Name = TestDataProvider.ProvideRandomString();
Repository.Save(model);
UnitOfWork.Commit();
model.Name = fixture.TestDataProvider.ProvideRandomString();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();

Assert.Equal(model.Version, 2);
}
Expand All @@ -48,18 +56,18 @@ public void Should_Throw_Concurrent_Data_Exception_Saving()
{
Assert.Throws<ConcurrentDataException>(() =>
{
var model = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
Assert.Equal(model.Version, 0);
Repository.Save(model);
UnitOfWork.Commit();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();
model.Name = TestDataProvider.ProvideRandomString();
model.Name = fixture.TestDataProvider.ProvideRandomString();
model.Version = 3;
Repository.Save(model);
UnitOfWork.Commit();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();
});
}

Expand All @@ -68,18 +76,18 @@ public void Should_Throw_Concurrent_Data_Exception_Deleting()
{
Assert.Throws<ConcurrentDataException>(() =>
{
var model = DatabaseTestDataProvider.ProvideRandomTestItemModel();
var model = fixture.DatabaseTestDataProvider.ProvideRandomTestItemModel();
Assert.Equal(model.Version, 0);
Repository.Save(model);
UnitOfWork.Commit();
fixture.Repository.Save(model);
fixture.UnitOfWork.Commit();
model.Name = TestDataProvider.ProvideRandomString();
model.Name = fixture.TestDataProvider.ProvideRandomString();
model.Version = 3;
Repository.Delete(model);
UnitOfWork.Commit();
fixture.Repository.Delete(model);
fixture.UnitOfWork.Commit();
});
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,17 @@

namespace BetterModules.Core.Database.Tests.DataAccess.DataContext.Migrations
{
public class DefaultMigrationTests: DatabaseTestBase
[Collection("Database test collection")]
public class DefaultMigrationTests
{
// TODO: Use Mocking instead of Fixture
private DatabaseTestFixture fixture;

public DefaultMigrationTests(DatabaseTestFixture fixture)
{
this.fixture = fixture;
}

[Fact]
public void Should_Throw_Core_Exception_Migrating_Down()
{
Expand Down
Loading

0 comments on commit d85db58

Please sign in to comment.