public async Task <PaymentResult> CreateCardPayment(CardPayment cardPayment)
        {
            var result = new PaymentResult();

            try
            {
                await _paymentsRepository.CreatePaymentRequest(cardPayment);

                result = await _foobarBankClient.CreatePayment(cardPayment);

                return(result);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Exception occurred creating card payment Reference={cardPayment.Reference}");
                result = new PaymentResult()
                {
                    PaymentStatus = PaymentStatus.Error,
                    Reference     = cardPayment.Reference
                };
                return(result);
            }
            finally
            {
                await _paymentsRepository.UpdatePaymentResult(result);
            }
        }
Example #2
0
        public async Task ShouldProcessPaymentWhenPartnerBankRespondsForAllStatuses(PaymentStatus paymentStatus)
        {
            var cardPayment       = new CardPaymentBuilder().Build();
            var successfulPayment = new PaymentResult()
            {
                PaymentStatus       = paymentStatus,
                Reference           = cardPayment.Reference,
                ThirdPartyReference = "12345"
            };

            _foobarBankClient.CreatePayment(cardPayment).Returns(successfulPayment);

            var result = await _cardPaymentService.CreateCardPayment(cardPayment);

            await _paymentsRepository.Received(1).CreatePaymentRequest(cardPayment);

            await _paymentsRepository.Received(1).UpdatePaymentResult(successfulPayment);

            Assert.Equal(successfulPayment, result, _paymentResultComparer);
        }