예제 #1
0
        private static void MakePayment(BankPaymentResult paymentResult)
        {
            var randomNumber = new Random();

            var isPaymentSuccessful = randomNumber.NextDouble() >= 0.5d;

            if (!isPaymentSuccessful)
            {
                paymentResult.Status = BankPaymentStatus.Failed;
            }
        }
예제 #2
0
        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);
        }
예제 #6
0
        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();
        }