public void TestSuccessfulEftPayment()
        {
            //Arrange
            IPaymentsDao         paymentsDao         = new PaymentsDao();
            ICreditCardProcessor creditCardProcessor = new CreditCardProcessor();
            IEftProcessor        eftProcessor        = new EftProcessor();

            PaymentProcessor.PaymentProcessor paymentProcessor =
                new PaymentProcessor.PaymentProcessor(creditCardProcessor, eftProcessor, paymentsDao);

            EftPaymentData eftPaymentData = new EftPaymentData()
            {
                CustomerAccountNumber = "00012345",
                PaymentDate           = DateTime.Today,
                PaymentType           = PaymentType.EFT,
                Amount            = 100.00m,
                RoutingNumber     = SampleData.BANK_ROUTING_ONE,
                BankAccountNumber = SampleData.BANK_ACCOUNT_ONE,
                AccountType       = BankAccountType.CHECKING
            };

            // Act
            PaymentResult result = paymentProcessor.ProcessPayment(eftPaymentData);

            // Assert
            Assert.True(result.Success);
            Assert.Equal(20, result.ReferenceNumber);
        }
Exemple #2
0
        public void TestFailingEftPayment()
        {
            //Arrange
            IPaymentsDao paymentsDao = new PaymentsDao();

            var creditCardHandler = new CreditCardPaymentTypeHandler(new CreditCardService(), paymentsDao);
            var eftHandler        = new EftPaymentTypeHandler(new EftProcessor(), paymentsDao);
            var checkHandler      = new CheckPaymentTypeHandler(paymentsDao);

            creditCardHandler.NextPaymentHandler = eftHandler;
            eftHandler.NextPaymentHandler        = checkHandler;

            var paymentProcessor = new PaymentProcessor(creditCardHandler);

            EftPaymentData eftPaymentData = new EftPaymentData()
            {
                CustomerAccountNumber = "00012345",
                PaymentDate           = DateTime.Today,
                PaymentType           = PaymentType.EFT,
                Amount            = 100.00m,
                RoutingNumber     = SampleData.BANK_ROUTING_ONE,
                BankAccountNumber = SampleData.BANK_ACCOUNT_TWO,
                AccountType       = BankAccountType.CHECKING
            };

            // Act
            PaymentResult result = paymentProcessor.ProcessPayment(eftPaymentData);

            // Assert
            Assert.False(result.Success);
            Assert.Equal(25, result.ReferenceNumber);
        }
        public PaymentResult ProcessPayment(PaymentDataBase paymentData)
        {
            EftPaymentData eftPaymentData = paymentData as EftPaymentData;

            EftAuthorization eftResult = this.eftProcessor.AuthorizeEftPayment(eftPaymentData.RoutingNumber,
                                                                               eftPaymentData.BankAccountNumber, eftPaymentData.AccountType, eftPaymentData.Amount);

            if (eftResult.Authorized)
            {
                int referenceNumber = paymentsDao.SaveSuccessfulEftPayment(eftPaymentData, eftResult);

                PaymentResult paymentResult = new PaymentResult()
                {
                    CustomerAccountNumber = eftPaymentData.CustomerAccountNumber,
                    PaymentDate           = eftPaymentData.PaymentDate,
                    Success         = eftResult.Authorized,
                    ReferenceNumber = referenceNumber
                };

                return(paymentResult);
            }
            else
            {
                int referenceNumber = paymentsDao.SaveFailedEftPayment(eftPaymentData, eftResult);

                PaymentResult paymentResult = new PaymentResult()
                {
                    CustomerAccountNumber = eftPaymentData.CustomerAccountNumber,
                    PaymentDate           = eftPaymentData.PaymentDate,
                    Success         = eftResult.Authorized,
                    ReferenceNumber = referenceNumber
                };
                return(paymentResult);
            }
        }
Exemple #4
0
        public override PaymentResult TryProcessPayment(PaymentDataBase paymentData)
        {
            if (paymentData.PaymentType == PaymentType.EFT)
            {
                EftPaymentData eftPaymentData = paymentData as EftPaymentData;

                EftAuthorization eftResult = this.eftProcessor.AuthorizeEftPayment(eftPaymentData.RoutingNumber,
                                                                                   eftPaymentData.BankAccountNumber, eftPaymentData.AccountType, eftPaymentData.Amount);

                if (eftResult.Authorized)
                {
                    int referenceNumber = paymentsDao.SaveSuccessfulEftPayment(eftPaymentData, eftResult);

                    PaymentResult paymentResult = new PaymentResult()
                    {
                        CustomerAccountNumber = eftPaymentData.CustomerAccountNumber,
                        PaymentDate           = eftPaymentData.PaymentDate,
                        Success         = eftResult.Authorized,
                        ReferenceNumber = referenceNumber
                    };

                    return(paymentResult);
                }
                else
                {
                    int referenceNumber = paymentsDao.SaveFailedEftPayment(eftPaymentData, eftResult);

                    PaymentResult paymentResult = new PaymentResult()
                    {
                        CustomerAccountNumber = eftPaymentData.CustomerAccountNumber,
                        PaymentDate           = eftPaymentData.PaymentDate,
                        Success         = eftResult.Authorized,
                        ReferenceNumber = referenceNumber
                    };
                    return(paymentResult);
                }
            }
            else if (this.NextPaymentTypeHandler != null)
            {
                return(this.NextPaymentTypeHandler.TryProcessPayment(paymentData));
            }
            else
            {
                throw new ApplicationException("Unknown payment type");
            }
        }
        public void TestFailingEftPayment()
        {
            //Arrange
            PaymentProcessor paymentProcessor = this.CreatePaymentProcessor();
            EftPaymentData   eftPaymentData   = new EftPaymentData()
            {
                CustomerAccountNumber = "00012345",
                PaymentDate           = DateTime.Today,
                Amount            = 100.00m,
                RoutingNumber     = SampleData.BANK_ROUTING_ONE,
                BankAccountNumber = SampleData.BANK_ACCOUNT_TWO,
                AccountType       = BankAccountType.CHECKING
            };

            // Act
            PaymentResult result = paymentProcessor.ProcessPayment(eftPaymentData);

            // Assert
            Assert.False(result.Success);
            Assert.Equal(25, result.ReferenceNumber);
        }
 public int SaveFailedEftPayment(EftPaymentData eftData, EftAuthorization result)
 {
     // This would save to a database
     return(25);
 }
        public int SaveSuccessfulEftPayment(EftPaymentData eftData, EftAuthorization result)
        {
            // This would save to a database

            return(20);
        }