Пример #1
0
        public void GivenADuplicatePaymentRequest_ShouldNotTalkToBank_AndShouldThrowBadRequestException()
        {
            // arrange
            _paymentHistoryRepo.IsDuplicate(Arg.Any <string>()).Returns(true);

            var handler        = new ProcessPaymentHandler(_paymentHistoryRepo, _bankApi);
            var paymentRequest = BuildValidTestPaymentRequest();

            // act
            var ex = Assert.Throws <BadRequestException>(() => handler.Handle(paymentRequest));

            // assert
            Assert.Equal("Duplicate request.", ex.Message);
        }
        public bool Handle(PaymentRequest paymentRequest)
        {
            if (_paymentHistoryRepo.IsDuplicate(paymentRequest.RequestId))
            {
                throw new BadRequestException("Duplicate request.");
            }

            var isSuccessfulPayment = _bankApi.MakePayment(paymentRequest);

            //(assume response bool for simplicity although in reality will prob be http)

            if (isSuccessfulPayment)
            {
                _paymentHistoryRepo.LogPayment(Utils.MapToLoggedPaymentRequest(paymentRequest, true));
                return(true);
            }

            _paymentHistoryRepo.LogPayment(Utils.MapToLoggedPaymentRequest(paymentRequest, false));
            return(false);
        }