public async Task ProcessPaymentAsync_ForValidRequestHavingAmountGreaterThan20AndLessThan500_ExpensiveGatewayIsCalledAndReturnsProcessedStatusAsync()
        {
            //Arrange
            var model = GetPaymentRequestModel(25);

            _expensivePaymentGateway.IsAvailableAsync()
            .Returns(Task.FromResult(true));

            _expensivePaymentGateway.ProcessPaymentAsync(Arg.Any <PaymentRequestModel>())
            .Returns(Task.FromResult(PaymentStatus.Processed));

            _unitOfWork.PaymentsRepository.When(x => x.AddAsync(Arg.Any <PaymentEntities.Entities.Payment>())).Do(x => { });
            _unitOfWork.PaymentsRepository.When(x => x.AddAsync(Arg.Any <PaymentEntities.Entities.Payment>())).Do(x => { });
            _unitOfWork.When(x => x.Complete()).Do(x => { });

            //Act
            var actual = await _paymentBusiness.ProcessPaymentAsync(model);

            //Assert

            Assert.AreEqual(PaymentStatus.Processed, actual);

            _serviceAccessor.Received(1).Invoke(Arg.Any <string>());
            await _cheapPaymentGateway.Received(0).ProcessPaymentAsync(Arg.Any <PaymentRequestModel>());

            await _expensivePaymentGateway.Received(1).IsAvailableAsync();

            await _expensivePaymentGateway.Received(1).ProcessPaymentAsync(Arg.Any <PaymentRequestModel>());

            await _unitOfWork.PaymentsRepository.Received(1).AddAsync(Arg.Any <PaymentEntities.Entities.Payment>());

            _unitOfWork.Received(1).Complete();
        }