Example #1
0
        public void Should_Have_Validation_Error_For_Invalid_Amount()
        {
            var validator = new PaymentRequestValidator();

            validator.ShouldHaveValidationErrorFor(request => request.Amount, -0.003m);
            validator.ShouldHaveValidationErrorFor(request => request.Amount, -1);
        }
 public void Validate_RequestIsNull_ThrowsException()
 {
     ExceptionAssert.ThrowsArgumentNullException("request", () =>
     {
         PaymentRequestValidator.Validate(null);
     });
 }
Example #3
0
        public void Should_Have_Validation_Error_For_Invalid_Cvv()
        {
            var validator = new PaymentRequestValidator();

            validator.ShouldHaveValidationErrorFor(request => request.Cvv, null as string);
            validator.ShouldHaveValidationErrorFor(request => request.Cvv, "");
            validator.ShouldHaveValidationErrorFor(request => request.Cvv, "abc1");
        }
        public void Setup()
        {
            testCardNumber        = "1234567890123456";
            testExpiryDate        = DateTime.Now.AddDays(1);
            testCurrency          = "GBP";
            testAmount            = new decimal(123.45);
            testCvv               = "123";
            testPaymentRequestDto = new PaymentRequestDto(testCardNumber, testExpiryDate, testCurrency, testAmount, testCvv);

            sut = new PaymentRequestValidator();
        }
        public void Validate_TransactionReferenceIsThanMaxLength_NoException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "12345678901234567890123456789012"
            };

            PaymentRequestValidator.Validate(request);
        }
Example #6
0
 public PaymentService(PaymentRequestValidator paymentRequestValidator,
                       ICardPaymentProvider cardPaymentProvider,
                       IPaymentRepo repo,
                       IMapper mapper,
                       ILogger <PaymentService> logger)
 {
     _paymentRequestValidator = paymentRequestValidator;
     _cardPaymentProvider     = cardPaymentProvider;
     _repo   = repo;
     _mapper = mapper;
     _logger = logger;
 }
Example #7
0
        private IPaymentPostData CreatePostData(IPaymentRequest request)
        {
            PaymentRequestValidator.Validate(request);

            string data = DataString.Create(Configuration, request);
            string seal = Seal.Create(data, Configuration.SecretKey);

            return(new PaymentPostData()
            {
                Data = data,
                Seal = seal,
            });
        }
        public void Validate_CurrencyCodeIsNotSet_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234",
            };

            ExceptionAssert.Throws <InvalidOperationException>("The CurrencyCode should be set.", () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_AmountIsZero_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 0,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234"
            };

            ExceptionAssert.ThrowsHigherThanValidationException(nameof(request.Amount), 0, () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_AmountInYenIsLessThanIntMinValue_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = ((decimal)int.MaxValue) + 1,
                CurrencyCode         = CurrencyCode.JapaneseYen,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234"
            };

            ExceptionAssert.ThrowsOverflowException(() =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
Example #11
0
 public PaymentService(
     IPaymentsRepository repository,
     IUnitOfWork unitOfWork,
     IMapper mapper,
     IBus bus,
     PaymentRequestValidator validator,
     ClaimsPrincipal currentUser)
 {
     _repository  = repository;
     _unitOfWork  = unitOfWork;
     _mapper      = mapper;
     _bus         = bus;
     _validator   = validator;
     _currentUser = currentUser;
 }
        public void Validate_AmountIsMoreThanMaxMaxValue_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = (int.MinValue / 100.0m) - 1,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234"
            };

            ExceptionAssert.ThrowsOverflowException(() =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_ReturnUrlIsNull_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = null,
                TransactionReference = "1234"
            };

            ExceptionAssert.ThrowsNullValidationException(nameof(request.ReturnUrl), () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_TransactionReferenceHasNonAlphanumericCharacter_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "&"
            };

            ExceptionAssert.ThrowsAlphanumericValidationException(nameof(request.TransactionReference), () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_TransactionReferenceIsLongerThanMaxLength_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "123456789012345678901234567890123"
            };

            ExceptionAssert.ThrowsLengthValidationException(nameof(request.TransactionReference), 32, () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_ReturnUrlIsLongerThanMaxLength_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com/" + new string('x', 490)),
                TransactionReference = "1234",
            };

            ExceptionAssert.ThrowsLengthValidationException(nameof(request.ReturnUrl), 512, () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_TransactionReferenceIsWhitespace_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "    "
            };

            ExceptionAssert.ThrowsWhitespaceValidationException(nameof(request.TransactionReference), () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_ReturnUrlContainsSeparator_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://github.com/?a=|"),
                TransactionReference = "1234"
            };

            ExceptionAssert.ThrowsSeparatorValidationException(nameof(request.ReturnUrl), () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_PaymentBrandsContainsUnknown_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234",
                PaymentBrands        = new PaymentBrand[] { PaymentBrand.VISA, PaymentBrand.Unknown }
            };

            ExceptionAssert.Throws <InvalidOperationException>($"The value for {nameof(request.PaymentBrands)} should not contain an unknown payment brand.", () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_ExpirationDateIsInThePast_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234",
                ExpirationDate       = DateTime.UtcNow.AddSeconds(-1)
            };

            ExceptionAssert.Throws <InvalidOperationException>("The value for ExpirationDate should be in the future.", () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_ExpirationDateIsNotUTC_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234",
                ExpirationDate       = DateTime.Now
            };

            ExceptionAssert.Throws <InvalidOperationException>("The value for ExpirationDate should use UTC.", () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_CaptureDayIsMoreThan99_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234",
                CaptureDay           = 100
            };

            ExceptionAssert.ThrowsLowerThanValidationException(nameof(request.CaptureDay), 100, () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_AutomaticResponseUrlIsLongerThanMaxLength_ThrowsException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount = 15.95m,
                AutomaticResponseUrl = new Uri("https://foor.bar/" + new string('x', 496)),
                CurrencyCode         = CurrencyCode.Euro,
                ReturnUrl            = new Uri("https://www.github.com"),
                TransactionReference = "1234",
                CaptureDay           = 0
            };

            ExceptionAssert.ThrowsLengthValidationException(nameof(request.AutomaticResponseUrl), 512, () =>
            {
                PaymentRequestValidator.Validate(request);
            });
        }
        public void Validate_IsValid_NoException()
        {
            PaymentRequest request = new PaymentRequest()
            {
                Amount               = 15.95m,
                CaptureDay           = 2,
                CaptureMode          = "MODE",
                CurrencyCode         = CurrencyCode.Euro,
                ExpirationDate       = DateTime.UtcNow.AddDays(1),
                PaymentBrands        = new PaymentBrand[] { PaymentBrand.IDEAL },
                ReturnUrl            = new Uri("https://www.github.com"),
                AutomaticResponseUrl = new Uri("https://www.github.com"),
                TransactionReference = "1234"
            };

            PaymentRequestValidator.Validate(request);
        }
        public void Setup()
        {
            _validator           = new PaymentRequestValidator();
            _cardPaymentProvider = new Mock <ICardPaymentProvider>();
            _paymentRepo         = new Mock <IPaymentRepo>();
            _log = new Mock <ILogger <PaymentService> >();

            var mapperConfig = new MapperConfiguration(x => x.AddProfile(new PaymentProfile()));

            _mapper = new Mapper(mapperConfig);

            _paymentService = new PaymentService(
                _validator,
                _cardPaymentProvider.Object,
                _paymentRepo.Object,
                _mapper,
                _log.Object);
        }
Example #26
0
            public void SetUp()
            {
                //setup valid _request
                var card = new Card
                {
                    CardNumber = Valid16DigitCardNumber,
                    Cvv        = "123",
                    ExpiryDate = "0220",
                    Name       = "Mr J Bloggs"
                };

                _request = new PaymentRequest
                {
                    Card     = card,
                    Amount   = 100,
                    Currency = "GBP"
                };

                _sut = new PaymentRequestValidator();
            }
Example #27
0
        public void Validate_ValidPaymentRequest_ReturnsNoValidationErrors()
        {
            // Arrange
            PaymentRequest request = new PaymentRequest
            {
                Amount            = 100,
                CardholderName    = "Testy McTester",
                CardNumber        = "1111 2222 3333 4444",
                CurrencyIsoAlpha3 = "GBP",
                Cvv = "123"
            };

            var sut = new PaymentRequestValidator();

            // Act
            var result = sut.Validate(request);

            // Assert
            Assert.IsEmpty(result);
        }
Example #28
0
        public static async Task <DomesticPaymentFluentResponse> SubmitAsync(this DomesticPaymentContext context)
        {
            context.ArgNotNull(nameof(context));
            try
            {
                DomesticPayment domesticPayment = context.Data ?? new DomesticPayment(
                    context.ConsentId.ArgNotNullElseInvalidOp("ConsentId not specified"));

                IList <FluentResponseMessage> validationErrors = new PaymentRequestValidator()
                                                                 .Validate(domesticPayment)
                                                                 .GetOpenBankingResponses();
                if (validationErrors.Count > 0)
                {
                    return(new DomesticPaymentFluentResponse(validationErrors));
                }

                CreateDomesticPayment i = new CreateDomesticPayment(
                    apiClient: context.Context.ApiClient,
                    mapper: context.Context.EntityMapper,
                    openBankingClientRepo: context.Context.ClientProfileRepository,
                    domesticConsentRepo: context.Context.DomesticConsentRepository,
                    apiProfileRepo: context.Context.ApiProfileRepository,
                    softwareStatementProfileService: context.Context.SoftwareStatementProfileService);

                OBWriteDomesticResponse4 resp = await i.CreateAsync(domesticPayment.ConsentId);

                return(new DomesticPaymentFluentResponse(resp.Data));
            }
            catch (AggregateException ex)
            {
                context.Context.Instrumentation.Exception(ex);

                return(new DomesticPaymentFluentResponse(ex.CreateErrorMessages()));
            }
            catch (Exception ex)
            {
                context.Context.Instrumentation.Exception(ex);

                return(new DomesticPaymentFluentResponse(ex.CreateErrorMessage()));
            }
        }
Example #29
0
        public void Validate_InvalidCardNumber_ReturnsValidationError(string testCardNumber)
        {
            // Arrange
            PaymentRequest request = new PaymentRequest
            {
                Amount            = 100,
                CardholderName    = "Valid Name",
                CardNumber        = testCardNumber,
                CurrencyIsoAlpha3 = "GBP",
                Cvv = "123"
            };

            var sut = new PaymentRequestValidator();

            // Act
            var result = sut.Validate(request);

            // Assert
            Assert.AreEqual(1, result.Count);
            Assert.Contains("Card number must be 16 digits long, and contain only numbers", result);
        }
Example #30
0
        public void Validate_InvalidCurrency_ReturnsValidationError(string testCurrency)
        {
            // Arrange
            PaymentRequest request = new PaymentRequest
            {
                Amount            = 100,
                CardholderName    = "Valid Name",
                CardNumber        = "1111 2222 3333 4444",
                CurrencyIsoAlpha3 = testCurrency,
                Cvv = "123"
            };

            var sut = new PaymentRequestValidator();

            // Act
            var result = sut.Validate(request);

            // Assert
            Assert.AreEqual(1, result.Count);
            Assert.Contains("Currency must be in ISO 4217 Alpha 3 format", result);
        }