public void TestRefund()
        {
            var gw       = PaymentGatewayFactory.CreateInstance("PayDollar");
            var settings = new PaymentGatewaySettings();

            gw.Init(settings);
            gw.Test();
            //keep confidential info else where in purpose
            var o    = System.IO.File.ReadAllText(@"D:\TestCase\PayDollar\trans1.json");
            var card = System.IO.File.ReadAllText(@"D:\TestCase\PayDollar\card.json");

            var m = new Money();

            m.Currency = "344";//hkd
            m.Amount   = 1;
            var cc      = JsonConvert.DeserializeObject <CreditCard>(card);
            var options = JsonConvert.DeserializeObject <PayDollarPaymentOptions>(o);
            var r       = gw.Purchase(m, cc, options);
            PayDollarPaymentResult result = (PayDollarPaymentResult)r;

            Assert.AreEqual(result.SuccessCode, "0", "payDollar Purchase failed");

            var cr = gw.Refund(m, result.GatewayRef, options);
            PayDollarPaymentResult refundResult = (PayDollarPaymentResult)cr;

            Assert.AreEqual(refundResult.SuccessCode, "0", "payDollar Refund failed");
        }
        public void PreparePayment(Invoice invoice)
        {
            PaymentGatewayFactory factory = new PaymentGatewayFactory();

            this.gateway = factory.CreatePaymentGateway(invoice);
            this.gateway.PaymentGranularity(invoice);
        }
        public void MakePayment(PaymentMethod method, Order product, PaymentPayload paymentpayload)
        {
            PaymentGatewayFactory factory = new PaymentGatewayFactory();
            // this.gateway = factory.CreatePaymentGateway(method);

            //this.gateway.MakePayment(product,paymentpayload);
        }
Esempio n. 4
0
        public void ExpensivePayment_MakePayment_ReturnBool()
        {
            // Arrange
            var retval = new PaymentGatewayFactory().CheapPayments.MakePayment();

            // Assert
            retval.GetType().Should().BeSameAs(typeof(bool));
        }
Esempio n. 5
0
        public void ExpensivePayment_CheckValidity_ReturnBool()
        {
            // Arrange
            var retval = new PaymentGatewayFactory().ExpensivePayments.CheckAvailability();

            // Assert
            retval.GetType().Should().BeSameAs(typeof(bool));
        }
Esempio n. 6
0
        public void MakePayment(PaymentMethod method, Product product)
        {
            PaymentGatewayFactory factory = new PaymentGatewayFactory();

            gateway = factory.CreatePaymentGateway(method, product);

            gateway.MakePayment(product);
        }
Esempio n. 7
0
 public Payment(IPaymentGateway paymentGateway, PaymentContext paymentContext)
 {
     _PaymentContext        = paymentContext;
     _Encryption            = new RSAEncryption();
     _PaymentGatewayFactory = new PaymentGatewayFactory();
     _PeopleRepo            = new GenericRepository <Person>(paymentGateway, paymentContext);
     _CardInfoRepo          = new GenericRepository <CardInformation>(paymentGateway, paymentContext);
     _TransactionRepo       = new GenericRepository <Transactions>(paymentGateway, paymentContext);
 }
        public async Task <bool> ProcessPayment(ProcessPaymentModel model)
        {
            try
            {
                //Adding Payment
                var payment = new Payment
                {
                    CreditCardNumber = model.CreditCardNumber,
                    CardHolder       = model.CardHolder,
                    ExpirationDate   = model.ExpirationDate,
                    SecurityCode     = model.SecurityCode,
                    Amount           = model.Amount
                };
                _uow.Add(payment);
                await _uow.CommitAsync();

                //Adding Payment Status as Initial - Pending
                var paymentStatus = new PaymentStatus
                {
                    PaymentId = payment.Id,
                    StatusId  = (int)TransactionStatus.Pending
                };
                _uow.Add(paymentStatus);

                paymentStatus = new PaymentStatus()
                {
                    PaymentId = payment.Id
                };

                var             factory        = new PaymentGatewayFactory();
                IPaymentGateway paymentGateway = factory.GetPaymentGateway(model.Amount);

                if (await paymentGateway.ProcessPayment())
                {
                    paymentStatus.StatusId = (int)TransactionStatus.Processed;
                }
                else
                {
                    paymentStatus.StatusId = (int)TransactionStatus.Failed;
                }

                _uow.Add(paymentStatus);
                await _uow.CommitAsync();

                return(true);
            }
            catch (Exception ex)
            {
                throw new BadRequestException(ex.Message);
            }
        }
        public void GetPaymentGateway_VerifyMethodCallOfCheapGateway(decimal amount, string status)
        {
            PaymentStatus expected;

            Enum.TryParse <PaymentStatus>(status, out expected);

            mockCheapGateway.Setup(x => x.ProceessAmount(amount)).Returns(expected);
            mockExpensiveGateway.Setup(x => x.ProceessAmount(amount)).Returns(expected);
            mockPremiumGateway.Setup(x => x.ProceessAmount(amount)).Returns(expected);

            sut = new PaymentGatewayFactory(mockCheapGateway.Object, mockExpensiveGateway.Object, mockPremiumGateway.Object);

            sut.GetPaymentGateway(amount);

            mockCheapGateway.Verify(x => x.ProceessAmount(amount), Times.Once);
        }
        public void GetPaymentGateway_WithStatus(decimal amount, string status)
        {
            PaymentStatus expected;

            Enum.TryParse <PaymentStatus>(status, out expected);

            mockCheapGateway.Setup(x => x.ProceessAmount(amount)).Returns(expected);
            mockExpensiveGateway.Setup(x => x.ProceessAmount(amount)).Returns(expected);
            mockPremiumGateway.Setup(x => x.ProceessAmount(amount)).Returns(expected);

            sut = new PaymentGatewayFactory(mockCheapGateway.Object, mockExpensiveGateway.Object, mockPremiumGateway.Object);

            var result = sut.GetPaymentGateway(amount);

            Assert.Equal(expected, result);
        }
Esempio n. 11
0
        private static Dictionary <int, Lazy <b::PaymentGateway> > CreateProductPaymentGatewayDictionary()
        {
            var dict = new Dictionary <int, Lazy <b::PaymentGateway> >();

            using (var context = new DOMEntities())
            {
                foreach (var ppg in context.ProductPaymentGateways)
                {
                    Func <b::PaymentGateway> func = () => PaymentGatewayFactory.Create(ppg.PaymentGatewayId);

                    dict.Add(ppg.ProductId, new Lazy <b::PaymentGateway>(func));
                }
            }

            return(dict);
        }
        public async Task ProcessPendingPayments()
        {
            IList <PaymentProcess> pendingPayment = await GetPendingPayments();

            IPaymentGatewayFactory _paymentFactory = new PaymentGatewayFactory();


            foreach (PaymentProcess _payment in pendingPayment)
            {
                // Payment Condition
                if (_payment.Amount > 500)
                {
                    // IPremium Payment Gateway
                    if (_paymentFactory.PremiumPayments.MakePayment())
                    {
                        _payment.Status = PaymentStatus.PROCESSED;
                        _payment.Tries  = _payment.Tries + 1;
                        _ = await this.UpdateAsync(_payment);
                    }
                    else
                    {
                        _payment.Status = PaymentStatus.PENDING;
                        _payment.Tries  = _payment.Tries + 1;

                        if (_payment.Tries == 3)
                        {
                            _payment.Status = PaymentStatus.FAILED;
                        }
                        _ = await this.UpdateAsync(_payment);
                    }
                    _ = _context.SaveChangesAsync();
                    continue;
                }

                if (_payment.Amount < 21)
                {
                    // ICheap Payment Gateway
                    if (_paymentFactory.CheapPayments.MakePayment())
                    {
                        _payment.Status = PaymentStatus.PROCESSED;
                        _payment.Tries  = _payment.Tries + 1;
                        _ = await this.UpdateAsync(_payment);
                    }
                    else
                    {
                        _payment.Status = PaymentStatus.FAILED;
                        _payment.Tries  = _payment.Tries + 1;
                        _ = await this.UpdateAsync(_payment);
                    }
                    _ = _context.SaveChangesAsync();
                    continue;
                }

                if (_payment.Amount <= 500)
                {
                    // Check Expensive payment availability
                    if (_paymentFactory.ExpensivePayments.CheckAvailability() && _paymentFactory.ExpensivePayments.MakePayment())
                    {
                        _payment.Status = PaymentStatus.PROCESSED;
                        _payment.Tries  = _payment.Tries + 1;
                        _ = await this.UpdateAsync(_payment);
                    }
                    // Try ICheap Payment Gateway
                    else if (_paymentFactory.CheapPayments.MakePayment())
                    {
                        _payment.Status = PaymentStatus.PROCESSED;
                        _payment.Tries  = _payment.Tries + 1;
                        _ = await this.UpdateAsync(_payment);
                    }
                    else
                    {
                        _payment.Status = PaymentStatus.FAILED;
                        _payment.Tries  = _payment.Tries + 1;
                        _ = await this.UpdateAsync(_payment);
                    }
                    _ = _context.SaveChangesAsync();
                    continue;
                }
            }
        }