public async Task ApiError_AreCorrectlySerialized_WithCorrectAmountOfDataAdded() { var client = new HttpClient(); var paymentRequest = new PaymentRequestBuilder().WithCreditcardTestValues(this.payeeId, Operation.Verify).BuildCreditardPaymentRequest(); var uri = new Uri("https://api.externalintegration.payex.com/psp/paymentorders/2d35afaa-4e5a-4930-0de5-08d7da0988bc"); var error = await Assert.ThrowsAsync <HttpResponseException>(() => client.SendAndProcessAsync <object>(HttpMethod.Post, uri, paymentRequest)); Assert.Equal(1, error.Data.Count); }
protected override void Observe() { var paymentRequestBuilder = new PaymentRequestBuilder() .WithDebtorAccountNumber(accountNumber) .WithAmount(1000m) .WithPaymentDate(DateTime.Now) .WithPaymentScheme(PaymentScheme.FasterPayments) .Build(); makePaymentResult = paymentService.MakePayment(paymentRequestBuilder); }
public async Task Given_request_which_fails_payment_gateway_validation_when_process_payment_should_return_4xx_and_status_code() { var request = PaymentRequestBuilder.BuildPaymentRequestToFailPaymentGatewayValidation(); var processPaymentResponse = await _client.ProcessPayment(request); Assert.That(processPaymentResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.UnprocessableEntity)); Assert.That(processPaymentResponse.Content.StatusCode, Is.EqualTo(ValidationFailed.ToString())); var getResponse = await _client.Get(processPaymentResponse.Content.PaymentId); Assert.That(getResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.NotFound)); }
public async Task When_process_payment_and_bank_cannot_process_payment_should_return_4xx_and_status_code() { var request = PaymentRequestBuilder.BuildPaymentRequestToSimulateErrorMessageFromBank(); var processPaymentResponse = await _client.ProcessPayment(request); Assert.That(processPaymentResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(processPaymentResponse.Content.StatusCode, Is.EqualTo(AcquiringBankFailureCode2.ToString())); var getResponse = await _client.Get(processPaymentResponse.Content.PaymentId); Assert.That(getResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(getResponse.Content.StatusCode, Is.EqualTo(AcquiringBankFailureCode2.ToString())); }
public async Task Given_request_which_fails_bank_validation_when_process_payment_should_return_4xx_and_status_code() { var request = PaymentRequestBuilder.BuildPaymentRequestToFailBankValidation(); var processPaymentResponse = await _client.ProcessPayment(request); Assert.That(processPaymentResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(processPaymentResponse.Content.StatusCode, Is.EqualTo(AcquiringBankFailureCode1.ToString())); var getResponse = await _client.Get(processPaymentResponse.Content.PaymentId); Assert.That(getResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(getResponse.Content.StatusCode, Is.EqualTo(AcquiringBankFailureCode1.ToString())); }
public async Task Given_valid_request_when_process_payment_and_get_details_then_details_are_correct() { var request = PaymentRequestBuilder.BuildValidPaymentRequest(); var processPaymentResponse = await _client.ProcessPayment(request); Assert.That(processPaymentResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(processPaymentResponse.Content.StatusCode, Is.EqualTo(Success.ToString())); var getResponse = await _client.Get(processPaymentResponse.Content.PaymentId); Assert.That(getResponse.HttpStatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(getResponse.Content.StatusCode, Is.EqualTo(Success.ToString())); AssertThatPaymentDetailsAreCorrect(request, getResponse.Content); }
public async Task Given_valid_request_when_ProcessPayment_and_bank_returns_500_then_returns_400() { _paymentRepositoryMock.Setup(x => x.Save(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _paymentRepositoryMock.Setup(x => x.Update(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <BankPaymentRequest>())) .ReturnsAsync(GetErrorResponseFromBank(HttpStatusCode.InternalServerError)); var request = PaymentRequestBuilder.BuildValidPaymentRequest(); var response = await _client.Post <ProcessPaymentRequest>("/payments", request); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); }
public async Task Given_valid_request_when_ProcessPayment_and_repository_throws_exception_before_calling_bank_then_returns_500() { _paymentRepositoryMock.Setup(x => x.Save(It.IsAny <PaymentEntity>())) .Throws(new System.Exception()); _paymentRepositoryMock.Setup(x => x.Update(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <BankPaymentRequest>())) .ReturnsAsync(GetSuccessfulResponseFromBank()); var request = PaymentRequestBuilder.BuildValidPaymentRequest(); var response = await _client.Post <ProcessPaymentRequest>("/payments", request); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError)); }
public async Task Given_valid_request_when_ProcessPayment_and_bank_returns_200_then_returns_200() { _paymentRepositoryMock.Setup(x => x.Save(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _paymentRepositoryMock.Setup(x => x.Update(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <BankPaymentRequest>())) .ReturnsAsync(GetSuccessfulResponseFromBank()); var request = PaymentRequestBuilder.BuildValidPaymentRequest(); var response = await _client.Post <ProcessPaymentRequest, ProcessPaymentResponse>("/payments", request); Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); Assert.That(response.ResponseBody.StatusCode, Is.EqualTo(PaymentStatusCode.Success.ToString())); Assert.That(response.ResponseBody.PaymentId, Is.Not.Null.And.Not.Empty); }
/// <summary> /// Redirects to '/{PaymentMethodName}/{PaymentGuid}/PaymentRequest.axd', and lets the current page execution finish. /// </summary> /// <param name="paymentRequest">Information used to generate the URL to redirect to.</param> /// <returns></returns> public override Payment RequestPayment(PaymentRequest paymentRequest) { if (paymentRequest.Payment == null) { paymentRequest.Payment = CreatePayment(paymentRequest); } string xmlRequestString = PaymentRequestBuilder.BuildRequest(paymentRequest); XmlElement xmlElement = HttpRequester.Request(xmlRequestString, paymentRequest.PaymentMethod); string result = xmlElement.Attributes.GetNamedItem("result").Value; if (result.ToLower() != "ok") { _loggingService.Log <MultiSafepayPaymentMethodService>("Failing xml request: " + xmlRequestString); GuardAgainstIncorrectResponse(xmlElement); } XmlNode transactionIdXmlNode = xmlElement.SelectSingleNode("/redirecttransaction/transaction/id"); if (transactionIdXmlNode == null) { throw new NullReferenceException("Xml response didn't contain a transaction ID as expected. Try sending a new request."); } XmlNode paymentUrlXmlNode = xmlElement.SelectSingleNode("/redirecttransaction/transaction/payment_url"); if (paymentUrlXmlNode == null) { throw new NullReferenceException("Xml response didn't contain a payment url as expected. Try sending a new request."); } if (transactionIdXmlNode.InnerText != paymentRequest.Payment.ReferenceId) { throw new SecurityException("Transaction ID doesn't match internal reference id."); } HttpContext.Current.Items["UCommerceRedirectUrlForPayment"] = paymentUrlXmlNode.InnerText; return(paymentRequest.Payment); }
public async Task Given_valid_request_when_ProcessPayment_then_passes_correct_request_to_bank() { BankPaymentRequest requestSentToBank = null; _paymentRepositoryMock.Setup(x => x.Save(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _paymentRepositoryMock.Setup(x => x.Update(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <BankPaymentRequest>())) .Callback((BankPaymentRequest request) => requestSentToBank = request) .ReturnsAsync(GetSuccessfulResponseFromBank()); var request = PaymentRequestBuilder.BuildValidPaymentRequest(); var response = await _client.Post <ProcessPaymentRequest, ProcessPaymentResponse>("/payments", request); AssertThatBankPaymentRequetIsCorrect(requestSentToBank, request); // Alternative solution is to use Verify command which compares properties of the bank request passed as an argument with the expected values }
public async Task Given_valid_request_when_ProcessPayment_and_bank_returns_200_then_updates_database_correctly() { string bankPaymentId = Guid.NewGuid().ToString(); PaymentEntity paymentEntitySavedToDb = null; _paymentRepositoryMock.Setup(x => x.Save(It.IsAny <PaymentEntity>())) .Returns(Task.CompletedTask); _paymentRepositoryMock.Setup(x => x.Update(It.IsAny <PaymentEntity>())) .Callback((PaymentEntity pe) => paymentEntitySavedToDb = pe) .Returns(Task.CompletedTask); _bankClientMock.Setup(x => x.ProcessPayment(It.IsAny <BankPaymentRequest>())) .ReturnsAsync(GetSuccessfulResponseFromBank(bankPaymentId)); var request = PaymentRequestBuilder.BuildValidPaymentRequest(); var response = await _client.Post <ProcessPaymentRequest, ProcessPaymentResponse>("/payments", request); AssertThatPaymentEntityIsCorrect(paymentEntitySavedToDb, request, bankPaymentId, PaymentStatusCode.Success); // Alternative solution is to use Verify command which compares properties of the entity passed as an argument with the expected values }