public async Task ReturnPaymentDetails()
        {
            //Arrange
            var controller     = new PaymentDetailsController(_paymentService);
            var paymentId      = Guid.NewGuid();
            var bankResponseId = Guid.NewGuid();
            var paymentResult  = new PaymentDetails()
            {
                Id = paymentId, BankResponseId = bankResponseId, PaymentMethod = new PaymentMethod()
                {
                    CardExpiry = "12/22",
                    CardNumber = "1000200030004000",
                    Cvv        = "000"
                }
            };
            await _dbRepository.AddNewItem(paymentResult);

            //Act
            var response = await controller.Get(bankResponseId);

            var result          = response as OkObjectResult;
            var paymentResponse = (PaymentResponse)result.Value;

            //Assert
            result.Should().NotBeNull();
            paymentResponse.BankResponseId.Should().Be(bankResponseId);
        }
Esempio n. 2
0
 public static void CreateExistingPayment(Guid idemKey, PaymentDetails paymentDetails)
 {
     _idempotentencyRespository.AddNewItem(new IdempotencyKey()
     {
         Id        = idemKey,
         PaymentId = paymentDetails.Id
     });
     _paymentRespository.AddNewItem(paymentDetails);
 }
        public async Task <PaymentResponse> SubmitPaymentRequest(Guid idempotencyKey, PaymentRequest paymentRequest)
        {
            var idemKey = await _idempotencyRepository.GetItem(x => x.Id == idempotencyKey);

            if (idemKey != null)
            {
                return(await GetExistingPaymentResponse(idemKey.PaymentId));
            }

            var paymentId = Guid.NewGuid();
            await _idempotencyRepository.AddNewItem(new IdempotencyKey()
            {
                Id        = idempotencyKey,
                PaymentId = paymentId
            });

            //Better done with a Mapper
            var payment = new PaymentDetails()
            {
                Amount        = paymentRequest.Amount,
                Currency      = paymentRequest.Currency,
                Id            = paymentId,
                PaymentMethod = paymentRequest.PaymentMethod
            };

            //Want to add encryption
            await _paymentsRepository.AddNewItem(payment);

            var response = await _bankService.InitiatePayment(paymentRequest);

            payment.Status         = response.Status;
            payment.BankResponseId = response.BankResponseId;
            await _paymentsRepository.UpdateItem(payment);

            return(await GetExistingPaymentResponse(payment.Id));
        }