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();
        }
Esempio n. 2
0
        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();
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        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();
        }
Esempio n. 9
0
        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();
        }