public async Task CreatingACaptureRequest_Serailizes_AsExepceted()
        {
            var handler = new FakeDelegatingHandler();
            var client  = new HttpClient(handler)
            {
                BaseAddress = GetUri()
            };

            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(PaymentOrderResponse)
            });

            PaymentOrderRequest paymentOrderRequest = GetPaymentOrderRequest();

            var sut = await new PaymentOrdersResource(client).Create(paymentOrderRequest);

            Assert.NotNull(sut.PaymentOrder);
            Assert.NotNull(sut.Operations);
            Assert.NotNull(sut.Operations.Abort);
            Assert.NotNull(sut.Operations.Cancel);
            Assert.NotNull(sut.Operations.Capture);
            Assert.NotNull(sut.Operations.Reverse);
            Assert.NotNull(sut.Operations.Update);
            Assert.NotNull(sut.Operations.View);
        }
예제 #2
0
        public void should_add_delegating_handlers()
        {
            var fakeOne = new FakeDelegatingHandler(0);
            var fakeTwo = new FakeDelegatingHandler(1);

            this.Given(x => WhenISetUpOcelotServices())
            .When(x => AddDelegate(fakeOne))
            .And(x => AddDelegate(fakeTwo))
            .Then(x => ThenTheProviderIsRegisteredAndReturnsHandlers())
            .BDDfy();
        }
        public async Task SendAsync_NoTrace()
        {
            var mockTracer   = new Mock <IManagedTracer>();
            var fakeHandler  = new FakeDelegatingHandler();
            var traceHandler = new TraceHeaderPropagatingHandler(() => mockTracer.Object, fakeHandler);

            using (var httpClient = new HttpClient(traceHandler))
            {
                await httpClient.GetAsync("https://www.google.com");
            }

            mockTracer.Verify(t => t.StartSpan(It.IsAny <string>(), null), Times.Never());
        }
        public async Task WhenSendingACapture_TheConverter_HasZeroErrors()
        {
            var handler = new FakeDelegatingHandler();

            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(PaymentCompletedReponse)
            });
            var uri = new Uri("http://api.externalintegration.payex.com");

            var sut = new HttpClient(handler);
            await sut.SendAndProcessAsync <CaptureTransactionResponseDto>(HttpMethod.Get, uri, GetPaymentOrderCaptureRequest());
        }
        public async Task ProblemResponse_CorrectlySerializes_WithNoAdditionalErrors()
        {
            var handler = new FakeDelegatingHandler();

            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.BadRequest,
                Content    = new StringContent(PaymentOrderInputValidationFailedReponse)
            });
            var uri = new Uri("http://api.externalintegration.payex.com");
            var sut = new HttpClient(handler);

            var error = await Assert.ThrowsAsync <HttpResponseException>(() => sut.SendAndProcessAsync <Problem>(HttpMethod.Get, uri, null));

            Assert.Equal(1, error.Data.Count);
        }
        public async Task SendAndPrcoess_DoesNotFail_WhenNotExpectingError()
        {
            var handler = new FakeDelegatingHandler();

            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.BadRequest,
                Content    = new StringContent(PaymentOrderInputValidationFailedReponse)
            });
            var uri = new Uri("http://api.externalintegration.payex.com");
            var sut = new HttpClient(handler);

            var result = await Assert.ThrowsAsync <HttpResponseException>(() => sut.SendAndProcessAsync <CaptureResponse>(HttpMethod.Get, uri, new object()));

            Assert.Equal(1, result.Data.Count);
        }
예제 #7
0
        public async Task SendAsync_Trace()
        {
            var mockTracer   = GetSetUpTracer();
            var fakeHandler  = new FakeDelegatingHandler(headerContext);
            var traceHandler = TraceHeaderPropagatingHandler.Create(mockTracer.Object, fakeHandler);

            var requestUri = new Uri("https://www.google.com");

            using (var httpClient = new HttpClient(traceHandler))
            {
                await httpClient.GetAsync(requestUri);
            }

            mockTracer.Verify(t => t.StartSpan(requestUri.ToString(), null), Times.Once());
            mockTracer.Verify(t => t.EndSpan(), Times.Once());
        }
예제 #8
0
        public async Task SendAsync_TraceException()
        {
            var mockTracer   = GetSetUpTracer();
            var fakeHandler  = new FakeDelegatingHandler(headerContext, throwException: true);
            var traceHandler = TraceHeaderPropagatingHandler.Create(mockTracer.Object, fakeHandler);

            var requestUri = new Uri("https://www.google.com");

            using (var httpClient = new HttpClient(traceHandler))
            {
                await Assert.ThrowsAsync <DivideByZeroException>(() => httpClient.GetAsync(requestUri));
            }

            mockTracer.Verify(t => t.StartSpan(requestUri.ToString(), null), Times.Once());
            mockTracer.Verify(t => t.SetStackTrace(It.IsAny <StackTrace>()), Times.Once());
            mockTracer.Verify(t => t.EndSpan(), Times.Once());
        }
        public async Task ProblemResponse_CorrectlySerialzes_WhenApiReturnsWrongStatusCode()
        {
            var handler = new FakeDelegatingHandler();

            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(PaymentOrderInputValidationFailedReponse)
            });
            var uri = new Uri("http://api.externalintegration.payex.com");
            var sut = new HttpClient(handler);

            var resultDto = await sut.SendAndProcessAsync <ProblemDto>(HttpMethod.Get, uri, null);

            var result = resultDto.Map();

            Assert.IsType <Problem>(result);
        }
        public async Task WhenSendingACaptureRequest_WeDoNotCrash_AndGiveAReasonableError()
        {
            var handler = new FakeDelegatingHandler();
            var client  = new HttpClient(handler)
            {
                BaseAddress = GetUri()
            };

            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(PaymentOrderResponse)
            });
            handler.FakeResponseList.Add(new HttpResponseMessage
            {
                StatusCode = System.Net.HttpStatusCode.BadRequest,
                Content    = new StringContent(@"
{
    ""sessionId"": ""27146bc5-269e-4b69-a25b-16308f4b481f"",
    ""type"": ""https://api.payex.com/psp/errordetail/forbidden"",
    ""title"": ""Operation not allowed"",
    ""status"": 403,
    ""instance"": ""http://api.externalintegration.payex.com/psp/paymentorders/74fa6203-e59a-43e0-0f44-08d7da0988bc/captures"",
    ""detail"": ""Payment check failed, description in problems node!"",
    ""problems"": [
        {
            ""name"": ""Capture"",
            ""description"": ""Capture amount too high.""
        }
    ]
}
")
            });
            PaymentOrderCaptureRequest captureRequest      = GetTestPaymentOrderCaptureRequest();
            PaymentOrderRequest        paymentOrderRequest = GetPaymentOrderRequest();

            var sut = await new PaymentOrdersResource(client).Create(paymentOrderRequest);

            var result = await Assert.ThrowsAsync <HttpResponseException>(() => sut.Operations.Capture(captureRequest));

            Assert.Equal(1, result.Data.Count);
        }
        public async Task SendAsync_Trace()
        {
            var mockTracer   = GetSetUpTracer();
            var fakeHandler  = new FakeDelegatingHandler(headerContext);
            var traceHandler = new TraceHeaderPropagatingHandler(() => mockTracer.Object, fakeHandler);

            var requestUri       = new Uri("https://www.google.com");
            var requestUriString = requestUri.ToString();

            mockTracer.Setup(t => t.RunInSpanAsync(
                                 It.IsAny <Func <Task <HttpResponseMessage> > >(), requestUri.ToString(), null))
            .Returns(Task.FromResult(new HttpResponseMessage()));

            using (var httpClient = new HttpClient(traceHandler))
            {
                await httpClient.GetAsync(requestUri);
            }

            mockTracer.VerifyAll();
        }