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);
        }
Пример #7
0
        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));
        }
Пример #8
0
        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));
        }
Пример #9
0
        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);
        }
Пример #11
0
        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
        }
Пример #12
0
        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
        }