public async Task Payment_WhenNull_MustReturnCorrespondentErrorMessage() { var validator = new PaymentValidator(); var result = await validator.ValidateAsync((Payment)null); result.Errors.Should().Contain(e => e.ErrorCode.Equals($"Null{typeof(Payment).Name}")); }
public async Task Payment_WhenValueNegative_MustReturnCorrespondentErrorMessage() { var validator = new PaymentValidator(); var payment = this.Fixture.Build <Payment>().With(p => p.Value, this.Fixture.Create <decimal>() * -1).Create(); var result = await validator.ValidateAsync(payment); result.Errors.Should().Contain(e => e.ErrorCode.Equals("PaymentValueNotPositive")); }
public async Task Payment_WhenISOCurrencyCodeEmpty_MustReturnCorrespondentErrorMessage() { var validator = new PaymentValidator(); var payment = this.Fixture.Build <Payment>().With(p => p.ISOCurrencyCode, string.Empty).Create(); var result = await validator.ValidateAsync(payment); result.Errors.Should().Contain(e => e.ErrorCode.Equals("PaymentISOCurrencyInvalid")).And.NotContain(e => e.ErrorCode.Equals("PaymentISOCurrencyInvalidLength")); }
public async Task Payment_WhenIdEmpty_MustReturnCorrespondentErrorMessage() { var validator = new PaymentValidator(); var payment = this.Fixture.Build <Payment>().With(p => p.Id, Guid.Empty).Create(); var result = await validator.ValidateAsync(payment); result.Errors.Should().Contain(e => e.ErrorCode.Equals("PaymentIdEmpty")); }
public async Task Payment_WhenValid_MustReturnValid() { var validator = new PaymentValidator(); var payment = this.Fixture.Create <Payment>(); var result = await validator.ValidateAsync(payment); result.IsValid.Should().BeTrue(); }
public async Task Payment_WhenISOCurrencyCodeTooLong_MustReturnCorrespondentErrorMessage() { var validator = new PaymentValidator(); var payment = this.Fixture.Create <Payment>(); payment.ISOCurrencyCode = payment.ISOCurrencyCode.PadRight(10, '0'); var result = await validator.ValidateAsync(payment); result.Errors.Should().Contain(e => e.ErrorCode.Equals("PaymentISOCurrencyInvalidLength")).And.NotContain(e => e.ErrorCode.Equals("PaymentISOCurrencyInvalid")); }
public async Task <IActionResult> ProcessPayment([FromBody] PaymentDto paymentDto) { //return await NoContent(); paymentDto.CreditCardNumber = Regex.Replace(paymentDto.CreditCardNumber, @"[^\d]", ""); var validator = new PaymentValidator(); var validate = await validator.ValidateAsync(paymentDto); if (!validate.IsValid) { var errors = validator.GetErrorList(validate.Errors); return(BadRequest(new { message = "Bad request", errors })); } AppPayment payment; try { payment = _mapper.Map <AppPayment>(paymentDto); if (paymentDto.Amount < 20) { await _cheapPaymentGateway.ProcessPayment(payment); } else if (paymentDto.Amount >= 20 && paymentDto.Amount <= 500) { try { await _expensivePaymentGateway.ProcessPayment(payment); } catch (Exception) { await _cheapPaymentGateway.ProcessPayment(payment); } } else { try { await _premiumPaymentService.ProcessPayment(payment); } catch (Exception) { int i = 1; do { var response = await _cheapPaymentGateway.ProcessPayment(payment); if (response) { break; } i++; }while (i < 4); } } } catch (Exception e) { _logger.LogError(e.Message); return(StatusCode(500, new { message = "Internal error", errors = "Data access processing error" })); } try { var result = await _unitOfWork.appPaymentStatusRepository.GetPaymentStatusById(payment.Id); return(Ok(new { message = "Success", data = result })); } catch (Exception e) { _logger.LogError(e.Message); return(StatusCode(500, new { message = "Internal error", errors = "Data access processing error" })); } }
public async Task <IActionResult> ProcessPayment([FromBody] PaymentToCreateDTO model) { model.CreditCardNumber = Regex.Replace(model.CreditCardNumber, @"[^\d]", ""); var validator = new PaymentValidator(); var validate = await validator.ValidateAsync(model); if (!validate.IsValid) { var errors = validator.GetErrorMessage(validate.Errors); return(BadRequest(new { message = "Bad request", errors })); } Payment payment; try { payment = _mapper.Map <Payment>(model); if (model.Amount < 21) { await _cheapPayment.ProcessPayment(payment); } else if (model.Amount < 501) { try { await _expensivePayment.ProcessPayment(payment); } catch (Exception) { await _cheapPayment.ProcessPayment(payment); } } else { try { await _premiumPayment.ProcessPayment(payment); } catch (Exception) { int i = 1; do { var response = await _cheapPayment.ProcessPayment(payment); if (response) { break; } i++; }while (i < 4); } } } catch (Exception e) { _logger.LogError(e.Message); return(StatusCode(500, new { message = "Internal error", errors = "Data access processing error" })); } try { var result = await _transactionRepository.GetByPaymentId(payment.Id); return(Ok(new { message = "Success", data = result })); } catch (Exception e) { _logger.LogError(e.Message); return(StatusCode(500, new { message = "Internal error", errors = "Data access processing error" })); } }