Esempio n. 1
0
        public async Task ItWillHandleExceptionOnCapture()
        {
            using (AutoMock mock = AutoMock.GetLoose())
            {
                var mockDbTransaction  = new MockDbTransaction();
                var paymentMethod      = PaymentMethod.CreditCard;
                var paymentTransaction = GetPaymentTransaction();
                var paymentProfile     = GetPaymentProfile();

                mock.Mock <IPaymentTransactionRepository>().Setup(x => x.GetOpenDbTransaction())
                .Returns(mockDbTransaction);

                mock.Mock <IExternalPaymentService>()
                .Setup(x => x.IsAutomatedProcessingEnabled(It.IsAny <PaymentMethod>()))
                .Returns(true);

                mock.Mock <IExternalPaymentService>().Setup(x => x.CaptureTransaction(It.IsAny <PaymentMethod>(),
                                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <PaymentProfile>()))
                .ThrowsAsync(new Exception());

                mock.Mock <IPaymentTransactionRepository>().Setup(x => x.UpdatePaymentTransaction(
                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <IDbTransaction>()))
                .ReturnsAsync((PaymentTransaction pt, IDbTransaction dbt) => pt);

                var paymentTransactionService = mock.Create <PaymentTransactionService>();
                var result = await paymentTransactionService.CaptureTransaction(paymentMethod,
                                                                                paymentTransaction, paymentProfile);

                Assert.NotNull(result);
                Assert.False(result.IsApproved);
                Assert.Equal(_dateComparison, result.DateCaptureAttempted.Value.ToShortDateString());
                Assert.Null(result.DateCapturedFunds);

                mock.Mock <IPaymentTransactionRepository>().Verify(x => x.GetOpenDbTransaction(), Times.Once);

                mock.Mock <IExternalPaymentService>().Verify(x => x.IsAutomatedProcessingEnabled(
                                                                 It.Is <PaymentMethod>(p => p == paymentMethod)), Times.Once);

                mock.Mock <IExternalPaymentService>().Verify(x => x.CaptureTransaction(
                                                                 It.Is <PaymentMethod>(p => p == paymentMethod),
                                                                 It.Is <PaymentTransaction>(pt => pt.PaymentTransactionId == paymentTransaction.PaymentTransactionId),
                                                                 It.Is <PaymentProfile>(pp => pp.AccountId == paymentProfile.AccountId)), Times.Once);

                mock.Mock <IPaymentTransactionRepository>().Verify(x => x.UpdatePaymentTransaction(
                                                                       It.Is <PaymentTransaction>(pt => pt.PaymentTransactionId == paymentTransaction.PaymentTransactionId &&
                                                                                                  pt.DateCaptureAttempted.Value.ToShortDateString() == _dateComparison &&
                                                                                                  !pt.IsApproved &&
                                                                                                  paymentTransaction.DateCapturedFunds == null),
                                                                       It.Is <IDbTransaction>(t => t != null)), Times.Once);

                mock.Mock <IExternalPaymentService>().Verify(x => x.SendManualProcessingEmail(It.IsAny <PaymentMethod>(),
                                                                                              It.IsAny <PaymentTransaction>(), It.IsAny <PaymentProfile>()), Times.Never);

                mock.Mock <IExternalPaymentService>().Verify(x => x.RefundTransaction(It.IsAny <PaymentMethod>(),
                                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <PaymentProfile>()), Times.Never);

                mockDbTransaction.VerifyCommit();
            }
        }
Esempio n. 2
0
        public async Task SupportsExpectedTransactionVerification()
        {
            var connectionFactory = new Mock <IDbConnectionFactory>();
            var connection        = new MockDbConnection();
            var repository        = new SampleRepository(connectionFactory.Object);
            var transaction       = new MockDbTransaction();

            connectionFactory
            .Setup(f => f.OpenConnection())
            .Returns(connection);
            connection.Setup(c => c.BeginTransaction(It.IsAny <IsolationLevel>())).Returns(transaction);

            await repository.DeleteCarAsync("Vauxhall");

            connection.Verify(c => c.ExecuteAsync(It.IsAny <string>(), It.IsAny <object>(), transaction, null, null));
        }
Esempio n. 3
0
        public async Task ItWillProcessCaptureAndOptionallyInsertPaymentTransaction(int initialPaymentTransactionId)
        {
            using (AutoMock mock = AutoMock.GetLoose())
            {
                var mockDbTransaction  = new MockDbTransaction();
                var paymentMethod      = PaymentMethod.CreditCard;
                var paymentTransaction = GetPaymentTransaction();
                paymentTransaction.PaymentTransactionId = initialPaymentTransactionId;
                var paymentProfile = GetPaymentProfile();

                mock.Mock <IPaymentTransactionRepository>().Setup(x => x.GetOpenDbTransaction())
                .Returns(mockDbTransaction);

                mock.Mock <IExternalPaymentService>()
                .Setup(x => x.IsAutomatedProcessingEnabled(It.IsAny <PaymentMethod>()))
                .Returns(true);

                mock.Mock <IExternalPaymentService>().Setup(x => x.CaptureTransaction(It.IsAny <PaymentMethod>(),
                                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <PaymentProfile>()))
                .ReturnsAsync((PaymentMethod pm, PaymentTransaction pt, PaymentProfile pp) =>
                {
                    pt.IsApproved = true;
                    return(pt);
                });

                mock.Mock <IPaymentTransactionRepository>().Setup(x => x.UpdatePaymentTransaction(
                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <IDbTransaction>()))
                .ReturnsAsync((PaymentTransaction pt, IDbTransaction dbt) => pt);

                mock.Mock <IPaymentTransactionRepository>().Setup(x => x.InsertPaymentTransaction(
                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <IDbTransaction>()))
                .ReturnsAsync((PaymentTransaction pt, IDbTransaction dbt) =>
                {
                    pt.PaymentTransactionId++;
                    return(pt);
                });

                var paymentTransactionService = mock.Create <PaymentTransactionService>();
                var result = await paymentTransactionService.CaptureTransaction(paymentMethod,
                                                                                paymentTransaction, paymentProfile);

                Assert.NotNull(result);
                Assert.True(result.PaymentTransactionId > 0);
                Assert.True(result.IsApproved);
                Assert.Equal(_dateComparison, result.DateCaptureAttempted.Value.ToShortDateString());
                Assert.Equal(_dateComparison, result.DateCapturedFunds.Value.ToShortDateString());

                mock.Mock <IPaymentTransactionRepository>().Verify(x => x.GetOpenDbTransaction(), Times.Once);

                mock.Mock <IExternalPaymentService>().Verify(x => x.IsAutomatedProcessingEnabled(
                                                                 It.Is <PaymentMethod>(p => p == paymentMethod)), Times.Once);

                mock.Mock <IExternalPaymentService>().Verify(x => x.CaptureTransaction(
                                                                 It.Is <PaymentMethod>(p => p == paymentMethod),
                                                                 It.Is <PaymentTransaction>(pt => pt.PaymentTransactionId == paymentTransaction.PaymentTransactionId),
                                                                 It.Is <PaymentProfile>(pp => pp.AccountId == paymentProfile.AccountId)), Times.Once);

                if (initialPaymentTransactionId == 0)
                {
                    mock.Mock <IPaymentTransactionRepository>().Verify(x => x.InsertPaymentTransaction(
                                                                           It.Is <PaymentTransaction>(pt => pt.TransactionReference == paymentTransaction.TransactionReference),
                                                                           It.Is <IDbTransaction>(t => t != null)), Times.Once);
                }
                else
                {
                    mock.Mock <IPaymentTransactionRepository>().Verify(x => x.InsertPaymentTransaction(
                                                                           It.IsAny <PaymentTransaction>(),
                                                                           It.IsAny <IDbTransaction>()), Times.Never);
                }

                mock.Mock <IPaymentTransactionRepository>().Verify(x => x.UpdatePaymentTransaction(
                                                                       It.Is <PaymentTransaction>(pt => pt.PaymentTransactionId > 0 &&
                                                                                                  pt.DateCaptureAttempted.Value.ToShortDateString() == _dateComparison &&
                                                                                                  pt.IsApproved &&
                                                                                                  paymentTransaction.DateCapturedFunds.Value.ToShortDateString() == _dateComparison),
                                                                       It.Is <IDbTransaction>(t => t != null)), Times.Once);

                mock.Mock <IExternalPaymentService>().Verify(x => x.SendManualProcessingEmail(It.IsAny <PaymentMethod>(),
                                                                                              It.IsAny <PaymentTransaction>(), It.IsAny <PaymentProfile>()), Times.Never);

                mock.Mock <IExternalPaymentService>().Verify(x => x.RefundTransaction(It.IsAny <PaymentMethod>(),
                                                                                      It.IsAny <PaymentTransaction>(), It.IsAny <PaymentProfile>()), Times.Never);

                mockDbTransaction.VerifyCommit();
            }
        }