Exemplo n.º 1
0
 /// <summary>
 /// Handle the next handler if it has been specified. Override for custom behaviour.
 /// </summary>
 /// <param name="next"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 protected virtual async Task OnHandleNextAsync(IApiHttpRequestHandler next, HttpRequestMessage request)
 {
     if (_next != null)
     {
         await _next.HandleAsync(request);
     }
 }
Exemplo n.º 2
0
        public async Task GetAsync_ApiCall_ReturnsList()
        {
            // Arrange
            IApiHttpRequestHandler handlerMock = Substitute.For <IApiHttpRequestHandler>();
            var apiClient = CreatClient(handlerMock);

            // Act
            var response = await apiClient.GetAsync("/Test/");

            // Assert
            Assert.NotNull(response);
            Assert.True(response.IsSuccessStatusCode);

            var json = await response.Content.ReadAsStringAsync();

            Assert.NotEmpty(json);

            var result = JsonConvert.DeserializeObject <IList <Test> >(json);

            Assert.NotNull(result);
            Assert.NotEmpty(result);
            Assert.Equal(10, result.Count);

            Assert.All(result, test => Assert.NotNull(TestFactory.Instance.GetCreated(test.Id)));

            await handlerMock.Received(1).HandleAsync(Arg.Any <HttpRequestMessage>());
        }
Exemplo n.º 3
0
        public async Task GetAsync_ApiCallWithId_ReturnsObject()
        {
            // Arrange
            IApiHttpRequestHandler handlerMock = Substitute.For <IApiHttpRequestHandler>();
            var apiClient = CreatClient(handlerMock);

            int id = new Random().Next(-100000, -1);

            // Act
            var response = await apiClient.GetAsync($"/Test/{id}");

            // Assert
            Assert.NotNull(response);
            Assert.True(response.IsSuccessStatusCode);

            var json = await response.Content.ReadAsStringAsync();

            Assert.NotEmpty(json);

            var result = JsonConvert.DeserializeObject <Test>(json);

            Assert.NotNull(result);
            Assert.NotNull(TestFactory.Instance.GetCreated(result.Id));
            Assert.Equal(id, result.Id);

            await handlerMock.Received(1).HandleAsync(Arg.Any <HttpRequestMessage>());
        }
Exemplo n.º 4
0
        private ApiHttpClient CreatClient(IApiHttpRequestHandler handlerMock)
        {
            handlerMock.HandleAsync(Arg.Any <HttpRequestMessage>()).Returns(Task.CompletedTask);
            var httpClient = _factory.CreateClient();

            return(new ApiHttpClient(httpClient, handlerMock));
        }
        private static Action ArrangeHandlers(IApiHttpRequestHandler handlerMock, ApiHttpRequestHandlerBinding binding)
        {
            var handlerBinding1 = Substitute.For <IApiHttpRequestHandlerBinding>();
            var handlerBinding2 = Substitute.For <IApiHttpRequestHandlerBinding>();
            var handlerBinding3 = Substitute.For <IApiHttpRequestHandlerBinding>();

            var handler1 = Substitute.For <IApiHttpRequestHandler>();
            var handler2 = Substitute.For <IApiHttpRequestHandler>();
            var handler3 = Substitute.For <IApiHttpRequestHandler>();

            handlerBinding1.Build().Returns(handler1);
            handlerBinding2.Build().Returns(handler2);
            handlerBinding3.Build().Returns(handler3);

            binding.Bindings.Add(handlerBinding1);
            binding.Bindings.Add(handlerBinding2);
            binding.Bindings.Add(handlerBinding3);

            return(() =>
            {
                handlerBinding1.Received(1).Build();
                handlerBinding2.Received(1).Build();
                handlerBinding3.Received(1).Build();

                handlerMock.Received(3).AppendHandler(Arg.Any <IApiHttpRequestHandler>());
                handlerMock.Received(1).AppendHandler(handler1);
                handlerMock.Received(1).AppendHandler(handler2);
                handlerMock.Received(1).AppendHandler(handler3);
            });
        }
        private static Action ArrangeNext(IApiHttpRequestHandler handlerMock, ApiHttpRequestHandlerBinding binding)
        {
            var handlerBinding = Substitute.For <IApiHttpRequestHandlerBinding>();
            var handler        = Substitute.For <IApiHttpRequestHandler>();

            handlerBinding.Build().Returns(handler);

            binding.Next = handlerBinding;

            return(() =>
            {
                handlerBinding.Received(1).Build();

                handlerMock.Received(1).SetNextHandler(Arg.Any <IApiHttpRequestHandler>());
                handlerMock.Received(1).SetNextHandler(handler);
            });
        }
Exemplo n.º 7
0
        public async Task DeleteAsync_ApiCall_ExpectedBehaviour()
        {
            // Arrange
            IApiHttpRequestHandler handlerMock = Substitute.For <IApiHttpRequestHandler>();
            var apiClient = CreatClient(handlerMock);

            int id = new Random().Next(-100000, 100000);

            // Act
            var response = await apiClient.DeleteAsync($"/Test/{id}");

            // Assert
            Assert.NotNull(response);
            Assert.True(response.IsSuccessStatusCode);

            var json = await response.Content.ReadAsStringAsync();

            Assert.Empty(json);
            Assert.True(TestFactory.Instance.IsDeleted(id));

            await handlerMock.Received(1).HandleAsync(Arg.Any <HttpRequestMessage>());
        }
        protected override Task OnHandleNextAsync(IApiHttpRequestHandler next, HttpRequestMessage request)
        {
            Next = next;

            return(base.OnHandleNextAsync(next, request));
        }
Exemplo n.º 9
0
 /// <summary>
 /// Set the next handler that will be execute after all other handlers have been executed.
 /// </summary>
 /// <param name="handler">The handler that will be execute next.</param>
 public void SetNextHandler(IApiHttpRequestHandler handler)
 {
     _next = handler;
 }
Exemplo n.º 10
0
 /// <summary>
 /// Append a handler to this handler. You can add multiple and they will be executed after
 /// the current handler has been executed.
 /// </summary>
 /// <param name="handler">The handler to append.</param>
 public void AppendHandler(IApiHttpRequestHandler handler)
 {
     _handlers.Add(handler);
 }
Exemplo n.º 11
0
 public ApiHttpClient(HttpClient httpClient, IApiHttpRequestHandler requestHandler = null)
 {
     _httpClient     = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
     _requestHandler = requestHandler;
 }