Пример #1
0
        public void ShouldSetAndGetAmbientTransactionTest()
        {
            DataSourceTransaction transaction;

            Assert.IsNull(DataSourceTransaction.Current);

            transaction = new DataSourceTransaction();
            DataSourceTransaction.FrameTransaction(transaction);

            Assert.IsNotNull(DataSourceTransaction.Current);
        }
Пример #2
0
        public void ShouldFailOnConnectionTypeMismatchUnderAmbientDataSourceTransactionTest()
        {
            Mockery mockery;
            AdoNetDataSource dataSource;
            IConnectionFactory mockConnectionFactory;
            IDbConnection mockDbConnection;
            IDbCommand mockDbCommand;
            IDataParameterCollection mockDataParameterCollection;
            IDataParameter[] mockDataParameters;
            IDataParameter mockDataParameter0;
            IDataParameter mockDataParameter1;
            IDbTransaction mockDbTransaction;
            DataSourceTransaction transaction;

            int recordsAffected;

            mockery = new Mockery();
            mockConnectionFactory = mockery.NewMock<IConnectionFactory>();
            mockDbConnection = mockery.NewMock<IDbConnection>();
            mockDbCommand = mockery.NewMock<IDbCommand>();
            mockDataParameterCollection = mockery.NewMock<IDataParameterCollection>();
            mockDataParameter0 = mockery.NewMock<IDataParameter>();
            mockDataParameter1 = mockery.NewMock<IDataParameter>();
            mockDbTransaction = mockery.NewMock<IDbTransaction>();
            mockDataParameters = new IDataParameter[] { mockDataParameter0, mockDataParameter1 };

            Expect.Once.On(mockConnectionFactory).Method("GetConnection").Will(Return.Value(mockDbConnection));
            Expect.Once.On(mockConnectionFactory).GetProperty("ConnectionType").Will(Return.Value(mockDbConnection.GetType()));
            //Expect.AtLeastOnce.On(mockDbConnection).GetProperty("State").Will(Return.Value(ConnectionState.Open));
            Expect.AtLeastOnce.On(mockDbConnection).Method("Dispose").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbConnection).SetProperty("ConnectionString").To("myConnectionString");
            Expect.AtLeastOnce.On(mockDbConnection).Method("Open").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbConnection).Method("CreateCommand").WithNoArguments().Will(Return.Value(mockDbCommand));
            Expect.AtLeastOnce.On(mockDbConnection).Method("BeginTransaction").WithNoArguments().Will(Return.Value(mockDbTransaction));
            Expect.AtLeastOnce.On(mockDbCommand).GetProperty("Parameters").Will(Return.Value(mockDataParameterCollection));
            Expect.AtLeastOnce.On(mockDataParameterCollection).Method("Clear").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbCommand).Method("Dispose").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbCommand).SetProperty("Connection").To(mockDbConnection);
            Expect.AtLeastOnce.On(mockDbCommand).SetProperty("CommandType").To(CommandType.StoredProcedure);
            Expect.AtLeastOnce.On(mockDbCommand).SetProperty("CommandText").To("blah blah blah");
            Expect.AtLeastOnce.On(mockDbCommand).SetProperty("Transaction");
            Expect.AtLeastOnce.On(mockDbCommand).Method("ExecuteNonQuery").WithNoArguments().Will(Return.Value(1));
            Expect.AtLeastOnce.On(mockDbTransaction).Method("Commit").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbTransaction).Method("Dispose").WithNoArguments();

            Expect.AtLeastOnce.On(mockDataParameter0).GetProperty("Value").Will(Return.Value(1));
            Expect.AtLeastOnce.On(mockDataParameter1).GetProperty("Value").Will(Return.Value(null));
            Expect.AtLeastOnce.On(mockDataParameter1).SetProperty("Value").To(DBNull.Value);
            Expect.AtLeastOnce.On(mockDataParameterCollection).Method("Add").With(mockDataParameter0).Will(Return.Value(0));
            Expect.AtLeastOnce.On(mockDataParameterCollection).Method("Add").With(mockDataParameter1).Will(Return.Value(0));

            transaction = new DataSourceTransaction();

            Assert.IsFalse(transaction.Bound);

            Assert.IsNull(DataSourceTransaction.Current);
            DataSourceTransaction.FrameTransaction(transaction);
            Assert.IsNotNull(DataSourceTransaction.Current);

            transaction.Bind(MOCK_CONNECTION_STRING, new MockConnection(), mockDbTransaction, null);

            dataSource = new AdoNetDataSource(MOCK_CONNECTION_STRING, mockConnectionFactory);

            recordsAffected = dataSource.ExecuteNonQuery(CommandType.StoredProcedure, "blah blah blah", mockDataParameters, null, false);
        }
Пример #3
0
        public void ShouldRollbackTest()
        {
            Mockery mockery;
            DataSourceTransaction transaction;
            string mockConnectionString;
            IDbConnection mockDbConnection;
            IDbTransaction mockDbTransaction;

            mockery = new Mockery();
            mockConnectionString = "db=local";
            mockDbConnection = mockery.NewMock<IDbConnection>();
            mockDbTransaction = mockery.NewMock<IDbTransaction>();

            Expect.AtLeastOnce.On(mockDbConnection).Method("Dispose").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbTransaction).Method("Rollback").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbTransaction).Method("Dispose").WithNoArguments();

            transaction = new DataSourceTransaction();

            Assert.IsNotNull(transaction);

            Assert.IsNull(transaction.ConnectionString);
            Assert.IsNull(transaction.Connection);
            Assert.IsNull(transaction.Transaction);
            Assert.IsFalse(transaction.Bound);
            Assert.IsNull(transaction.Context);

            transaction.Bind(mockConnectionString, mockDbConnection, mockDbTransaction, null);

            Assert.IsNotNull(transaction.ConnectionString);
            Assert.IsNotNull(transaction.Connection);
            Assert.IsNotNull(transaction.Transaction);
            Assert.IsTrue(transaction.Bound);
            Assert.IsNull(transaction.Context);

            transaction.Rollback();
            transaction.Dispose();

            mockery.VerifyAllExpectationsHaveBeenMet();
        }
Пример #4
0
        public void ShouldFailOnNullConnectionStringBindTest()
        {
            Mockery mockery;
            DataSourceTransaction transaction;
            string mockConnectionString;
            IDbConnection mockDbConnection;
            IDbTransaction mockDbTransaction;

            mockery = new Mockery();
            mockConnectionString = null;
            mockDbConnection = mockery.NewMock<IDbConnection>();
            mockDbTransaction = mockery.NewMock<IDbTransaction>();

            transaction = new DataSourceTransaction();

            Assert.IsNotNull(transaction);

            Assert.IsNull(transaction.ConnectionString);
            Assert.IsNull(transaction.Connection);
            Assert.IsNull(transaction.Transaction);
            Assert.IsFalse(transaction.Bound);
            Assert.IsNull(transaction.Context);

            transaction.Bind(mockConnectionString, mockDbConnection, mockDbTransaction, null);
        }
Пример #5
0
        public void ShouldFailOnAlreadyContextSetBindTest()
        {
            Mockery mockery;
            DataSourceTransaction transaction;
            IDataSourceTransactionContext mockDataSourceTransactionContext;

            mockery = new Mockery();
            mockDataSourceTransactionContext = mockery.NewMock<IDataSourceTransactionContext>();

            transaction = new DataSourceTransaction();

            Assert.IsNotNull(transaction);

            Assert.IsNull(transaction.ConnectionString);
            Assert.IsNull(transaction.Connection);
            Assert.IsNull(transaction.Transaction);
            Assert.IsFalse(transaction.Bound);
            Assert.IsNull(transaction.Context);

            transaction.Context = mockDataSourceTransactionContext;

            Assert.IsNotNull(transaction.Context);

            transaction.Context = null; // ok

            transaction.Context = mockDataSourceTransactionContext;

            mockDataSourceTransactionContext = mockery.NewMock<IDataSourceTransactionContext>();
            transaction.Context = mockDataSourceTransactionContext; // not ok
        }
Пример #6
0
        public void ShouldCreateTest()
        {
            DataSourceTransaction transaction;

            transaction = new DataSourceTransaction();

            Assert.IsNotNull(transaction);

            Assert.IsNull(transaction.ConnectionString);
            Assert.IsNull(transaction.Connection);
            Assert.IsNull(transaction.Transaction);
            Assert.IsFalse(transaction.Bound);
            Assert.IsNull(transaction.Context);
            Assert.AreEqual(IsolationLevel.Unspecified, transaction.IsolationLevel);

            transaction.Dispose();

            Assert.IsTrue(transaction.Adjudicated);
            Assert.IsTrue(transaction.Disposed);

            transaction = new DataSourceTransaction(IsolationLevel.Serializable);

            Assert.IsNotNull(transaction);
            Assert.AreEqual(IsolationLevel.Serializable, transaction.IsolationLevel);
        }
Пример #7
0
        public void ShouldFailOnConnectionTypeMismatchUnderAmbientDataSourceTransactionTest()
        {
            Mockery mockery;
            MockAdoNetAmbientAware ambientAware;
            IConnectionFactory mockConnectionFactory;
            IDbConnection mockDbConnection;
            IDbTransaction mockDbTransaction;
            DataSourceTransaction transaction;

            IDbConnection dbConnection;
            IDbTransaction dbTransaction;

            mockery = new Mockery();
            mockConnectionFactory = mockery.NewMock<IConnectionFactory>();
            mockDbConnection = mockery.NewMock<IDbConnection>();
            mockDbTransaction = mockery.NewMock<IDbTransaction>();

            Expect.Once.On(mockConnectionFactory).Method("GetConnection").Will(Return.Value(mockDbConnection));
            Expect.Once.On(mockConnectionFactory).GetProperty("ConnectionType").Will(Return.Value(mockDbConnection.GetType()));
            //Expect.AtLeastOnce.On(mockDbConnection).GetProperty("State").Will(Return.Value(ConnectionState.Open));
            Expect.AtLeastOnce.On(mockDbConnection).Method("Dispose").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbConnection).SetProperty("ConnectionString").To("myConnectionString");
            Expect.AtLeastOnce.On(mockDbConnection).Method("Open").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbConnection).Method("BeginTransaction").WithNoArguments().Will(Return.Value(mockDbTransaction));
            Expect.AtLeastOnce.On(mockDbTransaction).Method("Commit").WithNoArguments();
            Expect.AtLeastOnce.On(mockDbTransaction).Method("Dispose").WithNoArguments();

            transaction = new DataSourceTransaction();

            Assert.IsFalse(transaction.Bound);

            Assert.IsNull(DataSourceTransaction.Current);
            DataSourceTransaction.FrameTransaction(transaction);
            Assert.IsNotNull(DataSourceTransaction.Current);

            transaction.Bind(MOCK_CONNECTION_STRING, new MockConnection(), mockDbTransaction, null);

            ambientAware = new MockAdoNetAmbientAware(MOCK_CONNECTION_STRING, mockConnectionFactory);

            ambientAware.BypassGetConnectionAndTransaction(out dbConnection, out dbTransaction);
        }