public async void Dispose_Should_Rolleback_And_Dispose_If_Transaction_Exists() { // PREPARATION var options = new DbContextOptions <TestDbContext>(new MongoDB.Driver.MongoUrl(mongo2GoRunnerFixture.ConnectionString)); var dbContext = new TestDbContext(options); dbContext.Database.DropCollection("SampleEntity"); dbContext.Database.Client.DropDatabase("test"); dbContext.Database.CreateCollection("SampleEntity"); await dbContext.BeginTransactionAsync(); dbContext.SampleEntities.InsertOne(dbContext.SessionHandler, new SampleEntity() { Name = "TEST", _id = Guid.NewGuid() }); // EXECUTION dbContext.Dispose(); // ASSERTION Assert.Null(dbContext.SessionHandler); Assert.Null(dbContext.Client); Assert.Null(dbContext.Database); var dbContext2 = new TestDbContext(options); var count = dbContext2.Database.GetCollection <SampleEntity>("SampleEntity").AsQueryable().Count(); Assert.Equal(0, count); //CLEANUP dbContext2.Dispose(); }
public async void Dispose_Should_Revert_Changes() { // Preparation var sqliteConnection = new SqliteConnection("DataSource=:memory:"); sqliteConnection.Open(); var options = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder().UseSqlite(sqliteConnection).Options; var dbContext = new TestDbContext(options); dbContext.Database.EnsureDeleted(); dbContext.Database.EnsureCreated(); dbContext.Database.Migrate(); await dbContext.BeginTransactionAsync(); // EXECUTION dbContext.Samples.Add(new SampleEntity() { Name = "TEST", UniqueId = Guid.NewGuid() }); dbContext.Dispose(); // ASSERTION Assert.Throws <System.ObjectDisposedException>(() => dbContext.Database.ExecuteSqlRaw("SELECT 1")); // CLEANUP sqliteConnection.Close(); }
public async Task CommitAsync_Should_Commit_The_Transaction() { // PREPARATION var options = new DbContextOptions <TestDbContext>(new MongoDB.Driver.MongoUrl(mongo2GoRunnerFixture.ConnectionString)); var dbContext = new TestDbContext(options); dbContext.Database.DropCollection("SampleEntity"); dbContext.Database.Client.DropDatabase("test"); dbContext.Database.CreateCollection("SampleEntity"); await dbContext.BeginTransactionAsync(); // EXECUTION dbContext.SampleEntities.InsertOne(dbContext.SessionHandler, new SampleEntity() { Name = "TEST", _id = Guid.NewGuid() }); await dbContext.CommitAsync(); // ASSERTION var result = dbContext.Database.GetCollection <SampleEntity>("SampleEntity").AsQueryable().ToList(); Assert.Collection(result, t => { Assert.Equal("TEST", t.Name); }); // CLEANUP dbContext.Dispose(); dbContext.Dispose(); }
public async Task BeginTransactionAsync_Should_Throw_If_Already_Transaction_Initiated() { // PREPARATION var options = new DbContextOptions <TestDbContext>(new MongoDB.Driver.MongoUrl(mongo2GoRunnerFixture.ConnectionString)); var dbContext = new TestDbContext(options); dbContext.Database.DropCollection("SampleEntity"); dbContext.Database.Client.DropDatabase("test"); dbContext.Database.CreateCollection("SampleEntity"); await dbContext.BeginTransactionAsync(); // EXECUTION AND ASSERTION await Assert.ThrowsAsync <InvalidOperationException>(() => dbContext.BeginTransactionAsync()); // CLEANUP dbContext.Dispose(); }
public async void BeginTransactionAsync_Should_Throw_If_Already_Transaction_Has_Initiated() { // Preparation var sqliteConnection = new SqliteConnection("DataSource=:memory:"); sqliteConnection.Open(); // EXECUTION var options = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder().UseSqlite(sqliteConnection).Options; var dbContext = new TestDbContext(options); await dbContext.BeginTransactionAsync(); // ASSERTION await Assert.ThrowsAsync <InvalidOperationException>(() => dbContext.BeginTransactionAsync()); // Cleaning await dbContext.RollbackAsync(); sqliteConnection.Close(); }
public async void CommitAsync_Should_SaveChanges() { // Preparation var sqliteConnection = new SqliteConnection("DataSource=:memory:"); sqliteConnection.Open(); var options = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder().UseSqlite(sqliteConnection).Options; var dbContext = new TestDbContext(options); dbContext.Database.EnsureDeleted(); dbContext.Database.EnsureCreated(); dbContext.Database.Migrate(); await dbContext.BeginTransactionAsync(); // EXECUTION dbContext.Samples.Add(new SampleEntity() { UniqueId = Guid.Empty, Name = "Test" }); await dbContext.CommitAsync(); // ASSERTION var cmd = sqliteConnection.CreateCommand(); cmd.CommandText = "SELECT * FROM sample"; var DataAssetionHitted = false; using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { if (DataAssetionHitted) { Assert.False(DataAssetionHitted, "More that one record exists"); } Assert.Equal("Test", (string)reader["Name"]); DataAssetionHitted = true; } } if (!DataAssetionHitted) { Assert.True(DataAssetionHitted, "No record found in database!"); } Assert.Null(dbContext.Database.CurrentTransaction); // Cleaning sqliteConnection.Close(); }
public async void BeginTransactionAsync_Should_Open_A_Transaction() { // Preparation var sqliteConnection = new SqliteConnection("DataSource=:memory:"); sqliteConnection.Open(); // EXECUTION var options = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder().UseSqlite(sqliteConnection).Options; var dbContext = new TestDbContext(options); await dbContext.BeginTransactionAsync(); // ASSERTION Assert.NotNull(dbContext.Database.CurrentTransaction); Assert.NotNull(dbContext.Transaction); // Cleaning await dbContext.RollbackAsync(); sqliteConnection.Close(); }
public async Task BeginTransactionAsync_Should_Open_A_Transaction() { // PREPARATION var options = new DbContextOptions <TestDbContext>(new MongoDB.Driver.MongoUrl(mongo2GoRunnerFixture.ConnectionString)); var dbContext = new TestDbContext(options); dbContext.Database.DropCollection("SampleEntity"); dbContext.Database.Client.DropDatabase("test"); dbContext.Database.CreateCollection("SampleEntity"); // EXECUTION await dbContext.BeginTransactionAsync(); // ASSERTION Assert.NotNull(dbContext.SessionHandler); Assert.True(dbContext.SessionHandler.IsInTransaction); // CLEANUP dbContext.Dispose(); }
public async void RollbackAsync_Should_Revert_Changes() { // Preparation var sqliteConnection = new SqliteConnection("DataSource=:memory:"); sqliteConnection.Open(); var options = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder().UseSqlite(sqliteConnection).Options; var dbContext = new TestDbContext(options); dbContext.Database.EnsureDeleted(); dbContext.Database.EnsureCreated(); dbContext.Database.Migrate(); await dbContext.BeginTransactionAsync(); // EXECUTION dbContext.Samples.Add(new SampleEntity() { UniqueId = Guid.Empty, Name = "Test" }); await dbContext.RollbackAsync(); // ASSERTION var cmd = sqliteConnection.CreateCommand(); cmd.CommandText = "SELECT COUNT(*) FROM sample"; var count = (long)cmd.ExecuteScalar(); Assert.Null(dbContext.Database.CurrentTransaction); Assert.Equal((long)0, count); // Cleaning sqliteConnection.Close(); }