private static void MakePayment(BankPaymentResult paymentResult) { var randomNumber = new Random(); var isPaymentSuccessful = randomNumber.NextDouble() >= 0.5d; if (!isPaymentSuccessful) { paymentResult.Status = BankPaymentStatus.Failed; } }
public async Task <BankPaymentResult> ProcessPayment(BankPayment payment) { var paymentResult = new BankPaymentResult { Id = Guid.NewGuid(), Status = BankPaymentStatus.Succcessful }; MakePayment(paymentResult); return(await Task.FromResult(paymentResult)); }
public async Task ProcessPaymentAsync_ShouldReturnsFailedResponse_WhenBankPaymentApiReturnSuccessResponse() { // Arrange _paymentValidatorMock.Setup(x => x.Validate(It.IsAny <PaymentRequest>())).Returns(new ValidationResult()); var bankPaymentResult = new BankPaymentResult { Status = true, PaymentReferenceId = "1234567890" }; _bankPaymentClientMock.Setup(x => x.ProcessPaymentAsync(It.IsAny <PaymentRequest>())).ReturnsAsync(bankPaymentResult); // Act var clientResponse = await _subject.ProcessPaymentAsync(new PaymentRequest()); //Assert Assert.True(clientResponse.Success); Assert.Null(clientResponse.ErrorMessage); }
public async Task ProcessPaymentAsync_ShouldReturnsFailedResponse_WhenBankPaymentApiReturnFailedResponse() { // Arrange _paymentValidatorMock.Setup(x => x.Validate(It.IsAny <PaymentRequest>())).Returns(new ValidationResult()); var bankPaymentResult = new BankPaymentResult { Status = false }; _bankPaymentClientMock.Setup(x => x.ProcessPaymentAsync(It.IsAny <PaymentRequest>())).ReturnsAsync(bankPaymentResult); // Act var clientResponse = await _subject.ProcessPaymentAsync(new PaymentRequest()); //Assert Assert.False(clientResponse.Success); Assert.Equal("Payment was unsuccessful.The bank returns unsuccessful response.", clientResponse.ErrorMessage); }
public async Task ProcessPaymentAsync_ShouldReturnsFailedResponse_WhenBankPaymentApiReturnSuccessResponseAndErrorHappendInSavingPayment() { // Arrange _paymentValidatorMock.Setup(x => x.Validate(It.IsAny <PaymentRequest>())).Returns(new ValidationResult()); var bankPaymentResult = new BankPaymentResult { Status = true, PaymentReferenceId = "123456789012345" }; _bankPaymentClientMock.Setup(x => x.ProcessPaymentAsync(It.IsAny <PaymentRequest>())).ReturnsAsync(bankPaymentResult); _paymentStoreMock.SetupSequence(x => x.SavePaymentAsync(It.IsAny <Payment>())).Returns(Task.CompletedTask).Throws(new Exception()); // Act var clientResponse = await _subject.ProcessPaymentAsync(new PaymentRequest()); //Assert _loggerMock.VerifyLog(LogLevel.Error, "Error in saving payment", Times.Once()); Assert.False(clientResponse.Success); Assert.Equal("Payment was unsuccessful.", clientResponse.ErrorMessage); Assert.NotEmpty(clientResponse.Payload.PaymentReferenceId); }
public async Task ProcessPaymentAsync_ValidRequestAndSuccessfulPayment_ReturnCreatedPaymentWithIdAndSuccesfulAsync() { var existingCurrency = new Currency { Id = Guid.NewGuid(), Name = "EUR" }; _unitOfWork.Setup(u => u.Currencies.GetByIdAsync(It.IsAny <Guid>())) .ReturnsAsync(existingCurrency); _unitOfWork.Setup(u => u.Payments.AddAsync(It.IsAny <Payment>())); var bankPaymentResult = new BankPaymentResult { Id = Guid.NewGuid(), Status = BankPaymentStatus.Succcessful }; _bankService.Setup(b => b.ProcessPayment(It.IsAny <BankPayment>())) .ReturnsAsync(bankPaymentResult); var payment = new Payment { Amount = 100.00m, CardNumber = "0000000000000000", CurrencyId = existingCurrency.Id, Cvv = 111, ExpirationMonth = 10, ExpirationYear = 2030, }; var userId = Guid.NewGuid(); var result = await _paymentService.ProcessPaymentAsync(payment, userId); Assert.True(result.IsSuccessful); Assert.Equal(bankPaymentResult.Id, result.Id); Assert.Equal(userId, result.UserId); Assert.NotNull(result.CreatedAt); ResetMocks(); }