예제 #1
0
        public void ExtraHeadersAreSent(CardPaymentModel payment, string responseData, string receiptId)
        {
            const string EXTRA_HEADER_NAME = "X-Extra-Request-Header";

            var httpClient = Substitute.For<IHttpClient>();
            var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(responseData) };
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var responseTask = new TaskCompletionSource<HttpResponseMessage>();
            responseTask.SetResult(response);

            httpClient.SendAsync(Arg.Is<HttpRequestMessage>(r => r.Headers.Contains(EXTRA_HEADER_NAME)))
                .Returns(responseTask.Task);

            var client = new Client(new Connection(httpClient,
                                                    DotNetLoggerFactory.Create,
                                                    "http://something.com"));

            var judo = new JudoPayApi(DotNetLoggerFactory.Create, client);

            payment.HttpHeaders.Add(EXTRA_HEADER_NAME, "some random value");

             IResult<ITransactionResult> paymentReceiptResult = judo.Payments.Create(payment).Result;

            Assert.NotNull(paymentReceiptResult);
            Assert.IsFalse(paymentReceiptResult.HasError);
            Assert.NotNull(paymentReceiptResult.Response);
            Assert.That(paymentReceiptResult.Response.ReceiptId, Is.EqualTo(134567));
        }
예제 #2
0
        public void RegisterCardWithError(CardPaymentModel registerCard, string responseData, JudoApiError errorType)
        {
            var httpClient = Substitute.For<IHttpClient>();
            var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
            {
                Content = new StringContent(responseData)
            };
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var responseTask = new TaskCompletionSource<HttpResponseMessage>();
            responseTask.SetResult(response);

            httpClient.SendAsync(Arg.Any<HttpRequestMessage>()).Returns(responseTask.Task);

            var client = new Client(new Connection(httpClient,
                                                    DotNetLoggerFactory.Create,
                                                    "http://something.com"));

            var judo = new JudoPayApi(DotNetLoggerFactory.Create, client);

            IResult<ITransactionResult> paymentReceiptResult = null;

            // ReSharper disable CanBeReplacedWithTryCastAndCheckForNull
            paymentReceiptResult = judo.RegisterCards.Create(registerCard).Result;
            // ReSharper restore CanBeReplacedWithTryCastAndCheckForNull

            Assert.NotNull(paymentReceiptResult);
            Assert.IsTrue(paymentReceiptResult.HasError);
            Assert.IsNull(paymentReceiptResult.Response);
            Assert.IsNotNull(paymentReceiptResult.Error);
            Assert.AreEqual((int)errorType, paymentReceiptResult.Error.Code);
        }
예제 #3
0
		public void CycleSession()
		{
			_sessionPaymentModel = new CardPaymentModel();
			_sessionTokenPaymentModel = new TokenPaymentModel();
			_sessionPKPaymentModel = new PKPaymentModel();
			_sessionAndroidPaymentModel = new AndroidPaymentModel();
		}
예제 #4
0
        public void ValidateCardPaymentWithoutErrors()
        {
            var payment = new CardPaymentModel
            {
                Amount = 2.0m,
                CardAddress = new CardAddressModel
                {
                    Line1 = "Test Street",
                    Line2 = "Test Street",
                    Line3 = "Test Street",
                    PostCode = "W40 9AU",
                    Town = "Town"
                },
                CardNumber = "348417606737499",
                ConsumerLocation = new ConsumerLocationModel
                {
                    Latitude = 40m,
                    Longitude = 14m
                },
                CV2 = "420",
                EmailAddress = "*****@*****.**",
                ExpiryDate = "120615",
                JudoId = "12356",
                MobileNumber = "07745352515",
                YourConsumerReference = "User10"
            };

            var validator = new CardPaymentValidator();

            var result = validator.Validate(payment);

            Assert.IsNotNull(result);
            Assert.IsTrue(result.IsValid);
        }
예제 #5
0
        public void ValidateCardPaymentWithErrorOnPaymentValidation()
        {
            var payment = new CardPaymentModel
            {
                Amount = 2.0m,
                CardAddress = new CardAddressModel
                {
                    Line1 = "Test Street",
                    PostCode = "W40 9AU",
                    Town = "Town"
                },
                CardNumber = "348417606737499",
                ConsumerLocation = new ConsumerLocationModel
                {
                    Latitude = 40m,
                    Longitude = 14m
                },
                CV2 = "420",
                EmailAddress = "*****@*****.**",
                ExpiryDate = "120615",
                MobileNumber = "07745352515",
                YourConsumerReference = "User10"
            };

            var validator = new CardPaymentValidator();

            validator.ShouldHaveValidationErrorFor(model => model.JudoId, payment);
        }
예제 #6
0
        public void ValidateCardPaymentWithErrorOnSpecificCardPaymentInformation()
        {
            var payment = new CardPaymentModel();

            var validator = new CardPaymentValidator();

            validator.ShouldHaveValidationErrorFor(model => model.CardNumber, payment);
        }
예제 #7
0
        public override void MakeCardPayment()
        {
            var cardNumber = cardEntryView.GetCardNumber();
            var expiryDate = cardEntryView.GetCardExpiry();
            var cv2 = cardEntryView.GetCardCV2();

            CardAddressModel cardAddress = new CardAddressModel();

            if (JudoSDKManager.Configuration.IsAVSEnabled)
            {
                var country = avsEntryView.GetCountry();
                cardAddress.PostCode = avsEntryView.GetPostCode();
            }

            string startDate = null;
            string issueNumber = null;

            if (JudoSDKManager.Configuration.IsMaestroEnabled)
            {
                issueNumber = startDateEntryView.GetIssueNumber();
                startDate = startDateEntryView.GetStartDate();
            }

            var cardPayment = new CardPaymentModel()
            {
                JudoId = judoId,
                Currency = judoCurrency,
                Amount = judoAmount,
                YourPaymentReference = judoPaymentRef,
                YourConsumerReference = judoConsumer.YourConsumerReference,
                YourPaymentMetaData = judoMetaData.Metadata,
                CardNumber = cardNumber,
                CardAddress = cardAddress,
                StartDate = startDate,
                ExpiryDate = expiryDate,
                CV2 = cv2,
                ClientDetails = JudoSDKManager.GetClientDetails(this)
            };

            ShowLoadingSpinner(true);


            var judoPay = JudoSDKManager.JudoClient;

            judoPay.PreAuths.Create(cardPayment).ContinueWith(HandleServerResponse, TaskScheduler.FromCurrentSynchronizationContext());
        }
예제 #8
0
        public Task<IResult<ITransactionResult>> Payment(Context context, string judoId, string currency, decimal amount, string paymentReference,
            string consumerReference, IDictionary<string, string> metaData, string cardNumber,
            string postCode, string startDate, string expiryDate, string cv2)
        {
            var cardPayment = new CardPaymentModel()
            {
                JudoId = judoId,
                Currency = currency,
                Amount = amount,
                YourPaymentReference = paymentReference,
                YourConsumerReference = consumerReference,
                YourPaymentMetaData = metaData,
                CardNumber = cardNumber,
                CardAddress = new CardAddressModel { PostCode = postCode },
                StartDate = startDate,
                ExpiryDate = expiryDate,
                CV2 = cv2,
                ClientDetails = JudoSDKManager.GetClientDetails(context)
            };

            return JudoSDKManager.JudoClient.Payments.Create(cardPayment);
        }
예제 #9
0
 public Task<IResult<ITransactionResult>> Create(CardPaymentModel cardPayment)
 {
     var validationError = Validate<CardPaymentModel, ITransactionResult>(CardPaymentValidator, cardPayment);
     return validationError ?? PostInternal<CardPaymentModel, ITransactionResult>(_createAddress, cardPayment);
 }
예제 #10
0
        public async Task ExplicitUserAgentSendsExplicitValue()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent((@"{
                            results : [{
                                receiptId : '134567',
                                type : 'Create',
                                judoId : '12456',
                                originalAmount : 20,
                                amount : 20,
                                netAmount : 20,
                                cardDetails :
                                    {
                                        cardLastfour : '1345',
                                        endDate : '1214',
                                        cardToken : 'ASb345AE',
                                        cardType : 'VISA'
                                    },
                                currency : 'GBP',
                                consumer : 
                                    {
                                        consumerToken : 'B245SEB',
                                        yourConsumerReference : 'Consumer1'
                                    }
                             }]}")) };

            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var responseTask = new TaskCompletionSource<HttpResponseMessage>();
            responseTask.SetResult(response);
            httpClient.SendAsync(Arg.Any<HttpRequestMessage>()).Returns(responseTask.Task);

            var connection = new Connection(httpClient, DotNetLoggerFactory.Create, "http://test.com");
            var paymentModel = new CardPaymentModel { UserAgent = "SomeText" };

            await connection.Send(HttpMethod.Post, "http://foo", null, null, paymentModel);

            await httpClient.Received().SendAsync(Arg.Is<HttpRequestMessage>(r => r.Headers.UserAgent.First().Product.Name == paymentModel.UserAgent));
        }
예제 #11
0
        public Task<IResult<JudoApiErrorModel>> Validate(CardPaymentModel cardPreAuth)
        {
            var validationError = Validate<CardPaymentModel, JudoApiErrorModel>(CardPaymentValidator, cardPreAuth);

            return validationError ?? PostInternal<CardPaymentModel, JudoApiErrorModel>(_validatePreAuthAddress, cardPreAuth);
        }
예제 #12
0
 public Task<IResult<ITransactionResult>> Create(CardPaymentModel registerCard)
 {
     var validationError = Validate<CardPaymentModel, ITransactionResult>(RegisterCardValidator, registerCard);
     return validationError ?? PostInternal<CardPaymentModel, ITransactionResult>(_createAddress, registerCard);
 }