Exemplo n.º 1
0
        public void NonQueryExternalTransactionAsync()
        {
            var transaction = new CommittableTransaction();

            queryRunner.EnlistTransaction(transaction);

            int returnValue = 100;

            MockDatabaseFactory.DbCommand.Setup(dbc => dbc.ExecuteNonQueryAsync(It.IsAny <System.Threading.CancellationToken>()))
            .Returns(() =>
            {
                returnValue++;
                return(Task.FromResult <int>(returnValue));
            });

            var queries = new Dictionary <int, SQLQuery>();

            for (int counter = 0; counter < 10; counter++)
            {
                queries.Add(counter, new SQLQuery("insert into sometable values (" + counter + ");", SQLQueryType.NonQuery)
                {
                    GroupNumber = counter
                });
            }
            queryRunner.RunQuery(queries.Values);

            for (int counter = 0; counter < 10; counter++)
            {
                Assert.AreEqual(101 + counter, queries[counter].RowCount);
            }
            MockDatabaseFactory.DbCommand.Verify(dbc => dbc.ExecuteNonQueryAsync(It.IsAny <System.Threading.CancellationToken>()), Times.Exactly(10));
            MockDatabaseFactory.DbConnection.VerifySet(dbc => dbc.ConnectionString = connectionString, Times.Exactly(1));
            MockDatabaseFactory.DbConnection.Verify(dbc => dbc.Close(), Times.Exactly(0));
            MockDatabaseFactory.Parameters.Verify(p => p.Add(It.IsAny <DbParameter>()), Times.Exactly(0));
            MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Commit(), Times.Exactly(0));
            MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Rollback(), Times.Exactly(0));
            Assert.IsTrue(queryRunner.TransactionOpen);

            transaction.Commit();
            Assert.AreEqual(1, MockDatabaseFactory.DbConnection.Object.CommitCallCount);
            MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Commit(), Times.Exactly(0));
            MockDatabaseFactory.DbTransaction.Verify(dbt => dbt.Rollback(), Times.Exactly(0));
            MockDatabaseFactory.DbConnection.Verify(dbc => dbc.Close(), Times.Exactly(1));
            Assert.IsFalse(queryRunner.TransactionOpen);
        }