Esempio n. 1
0
        public void ShouldCommitTransactionIfExceptionNotThrown()
        {
            Thrower instance = new Thrower()
            {
                ShouldThrowException = false
            };
            TransactionStatus status = TransactionStatus.InDoubt;

            instance.Completed = (obj, e) =>
            {
                status = e.Transaction.TransactionInformation.Status;
            };

            IInvocation invocation = Substitute.For <IInvocation>();

            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");

            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();

            interceptor.Intercept(invocation);

            Assert.AreEqual(TransactionStatus.Committed, status, "The transaction was not committed.");
        }
Esempio n. 2
0
        public void ShouldAbortTransactionIfExceptionThrown()
        {
            Thrower instance = new Thrower()
            {
                ShouldThrowException = true
            };
            TransactionStatus status = TransactionStatus.InDoubt;

            instance.Completed = (obj, e) =>
            {
                status = e.Transaction.TransactionInformation.Status;
            };

            IInvocation invocation = Substitute.For <IInvocation>();

            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");

            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            try
            {
                TransactionInterceptor interceptor = new TransactionInterceptor();
                interceptor.Intercept(invocation);
                Assert.Fail("An exception should have been thrown.");
            }
            catch (Exception)
            {
                Assert.AreEqual(TransactionStatus.Aborted, status, "The transaction was not abandoned.");
            }
        }
        public void ShouldAbortTransactionIfExceptionThrown()
        {
            Thrower instance = new Thrower() { ShouldThrowException = true };
            TransactionStatus status = TransactionStatus.InDoubt;
            instance.Completed = (obj, e) =>
            {
                status = e.Transaction.TransactionInformation.Status;
            };

            IInvocation invocation = Substitute.For<IInvocation>();
            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");
            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            try
            {
                TransactionInterceptor interceptor = new TransactionInterceptor();
                interceptor.Intercept(invocation);
                Assert.Fail("An exception should have been thrown.");
            }
            catch (Exception)
            {
                Assert.AreEqual(TransactionStatus.Aborted, status, "The transaction was not abandoned.");
            }
        }
Esempio n. 4
0
        public void CheckAutoTransaction_NotDecoratedIsTransactional_WrappedInATransaction()
        {
            var interceptor = new TransactionInterceptor();
            var invocation  = Substitute.For <IInvocation>();

            invocation.InvocationTarget.Returns(new AdministrationComponent());
            invocation.MethodInvocationTarget.Returns(typeof(AdministrationComponent).GetMethod("GetAllDrugs"));
            invocation.Method.Returns(typeof(AdministrationComponent).GetMethod("GetAllDrugs"));
            invocation.When(e => e.Proceed()).Do(e => Nothing());

            interceptor.Intercept(invocation);
            Assert.IsTrue(interceptor.WasTransactional);
        }
Esempio n. 5
0
        public void CheckAutoTransaction_DecoratedIsNotTransactional_NotWrappedInATransaction()
        {
            var interceptor = new TransactionInterceptor();
            var invocation  = Substitute.For <IInvocation>();

            invocation.InvocationTarget.Returns(new SqlComponent());
            invocation.MethodInvocationTarget.Returns(typeof(SqlComponent).GetMethod("ExecuteNonQuery"));
            invocation.Method.Returns(typeof(SqlComponent).GetMethod("ExecuteNonQuery"));
            invocation.When(e => e.Proceed()).Do(e => Nothing());

            interceptor.Intercept(invocation);
            Assert.IsFalse(interceptor.WasTransactional);
        }
        public void ShouldNotCreateTransactionIfMissingAttribute()
        {
            NoAttribute instance = new NoAttribute();

            IInvocation invocation = Substitute.For<IInvocation>();
            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(NoAttribute).GetMethod("DoSomething");
            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();
            interceptor.Intercept(invocation);

            Assert.IsFalse(instance.HadTransaction, "There should be no active transaction.");
        }
Esempio n. 7
0
        public void ShouldNotCreateTransactionIfMissingAttribute()
        {
            NoAttribute instance = new NoAttribute();

            IInvocation invocation = Substitute.For <IInvocation>();

            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(NoAttribute).GetMethod("DoSomething");

            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();

            interceptor.Intercept(invocation);

            Assert.IsFalse(instance.HadTransaction, "There should be no active transaction.");
        }
        public void ShouldCommitTransactionIfExceptionNotThrown()
        {
            Thrower instance = new Thrower() { ShouldThrowException = false };
            TransactionStatus status = TransactionStatus.InDoubt;
            instance.Completed = (obj, e) =>
                {
                    status = e.Transaction.TransactionInformation.Status;
                };

            IInvocation invocation = Substitute.For<IInvocation>();
            invocation.Request.Target.Returns(instance);
            MethodInfo method = typeof(Thrower).GetMethod("DoSomething");
            invocation.Request.Method.Returns(method);
            invocation.When(i => i.Proceed()).Do(i => instance.DoSomething());

            TransactionInterceptor interceptor = new TransactionInterceptor();
            interceptor.Intercept(invocation);

            Assert.AreEqual(TransactionStatus.Committed, status, "The transaction was not committed.");
        }