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); }); }
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); }
public PaymentService(PaymentRequestValidator paymentRequestValidator, ICardPaymentProvider cardPaymentProvider, IPaymentRepo repo, IMapper mapper, ILogger <PaymentService> logger) { _paymentRequestValidator = paymentRequestValidator; _cardPaymentProvider = cardPaymentProvider; _repo = repo; _mapper = mapper; _logger = logger; }
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); }); }
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); }
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(); }
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); }
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())); } }
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); }
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); }