public async Task WhenResponseContentTypeContainsCharsetThenCanDeserialize(string contentType, string content) { var expectedResponse = new HttpConnectResponse <TestType>(HttpStatusCode.OK); expectedResponse.Content = new HttpConnectResponseContent(); expectedResponse.Content.Headers.ContentType = new ContentTypeHeader(contentType); expectedResponse.Content.Content = content; expectedResponse.Data = new TestType { Name = "openwrks" }; expectedResponse.Status = HttpConnectResponseStatus.Completed; var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.GetAsync <TestType>(new Uri("https://www.example.com"), CancellationToken.None); actualResponse.Should().BeEquivalentTo(expectedResponse); }
public async Task WhenDeserializationThrowsThenCapturedInResponseException(string contentType, string content) { var expectedResponse = new HttpConnectResponse <TestType>(HttpStatusCode.OK); expectedResponse.Content = new HttpConnectResponseContent(); expectedResponse.Content.Headers.ContentType = new ContentTypeHeader(contentType); expectedResponse.Content.Content = content; expectedResponse.Status = HttpConnectResponseStatus.Completed; var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.SendAsync <TestType>( new HttpConnectRequest(HttpMethod.Get, new Uri("https://www.example.com")), CancellationToken.None); actualResponse.IsSuccess.Should().BeFalse(); actualResponse.Exception.Should().NotBeNull(); actualResponse.Data.Should().BeNull(); }
public async Task DoesNotSetContentInTheResponseWhenNoContentReturned() { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = null }; HttpConnectResponse httpConnectResponse = await _middleware.BuildHttpConnectResponseTester(httpResponseMessage); httpConnectResponse.Content.Should().BeNull(); }
public async Task SetsContentInTheResponseWhenContentIsPresent() { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new System.Net.Http.StringContent("{}", Encoding.UTF8, "application/json") }; HttpConnectResponse httpConnectResponse = await _middleware.BuildHttpConnectResponseTester(httpResponseMessage); httpConnectResponse.Content.Should().NotBeNull(); httpConnectResponse.Content.Content.Should().Be("{}"); }
public async Task SetsTheContentInTheResponseWhenTheResponseIsGZipped() { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new System.Net.Http.ByteArrayContent(TestZip("testData")) }; httpResponseMessage.Content.Headers.TryAddWithoutValidation("Content-Encoding", "application/gzip"); httpResponseMessage.Content.Headers.Add("Content-Type", "application/json"); HttpConnectResponse httpConnectResponse = await _middleware.BuildHttpConnectResponseTester(httpResponseMessage); httpConnectResponse.Content.Should().NotBeNull(); httpConnectResponse.Content.Content.Should().Be("testData"); }
public async Task SetsStatusCodeInTheResponse(HttpStatusCode statusCode) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(statusCode) { Content = new System.Net.Http.StringContent("{}"), Headers = { { "peanut", "butter" }, { "ele", "phant" } } }; HttpConnectResponse httpConnectResponse = await _middleware.BuildHttpConnectResponseTester(httpResponseMessage); httpConnectResponse.StatusCode.Should().Be(statusCode); }
public async Task WhenBuiltWithSimpleMiddlewareThenReturnsExpectedResponse() { var expectedResponse = new HttpConnectResponse(HttpStatusCode.OK); var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.GetAsync(new Uri("https://www.example.com"), CancellationToken.None); actualResponse.Should().Be(expectedResponse); }
public async Task SetsHeadersInTheResponse() { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Headers = { { "peanut", "butter" }, { "ele", "phant" } } }; HttpConnectResponse httpConnectResponse = await _middleware.BuildHttpConnectResponseTester(httpResponseMessage); httpConnectResponse.Headers.Should().HaveCount(2); httpConnectResponse.Headers.Single(h => h.Name == "peanut" && h.Value == "butter"); httpConnectResponse.Headers.Single(h => h.Name == "ele" && h.Value == "phant"); }
public async Task WhenMiddlewareReturnsNonSuccessStatusCodeThenResponseIsNotSuccessful(HttpStatusCode statusCode) { var expectedResponse = new HttpConnectResponse <int>(statusCode); var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.GetAsync <int>(new Uri("https://www.example.com"), CancellationToken.None); actualResponse.IsSuccess.Should().BeFalse(); }
public async Task WhenBuiltWithMiddlewareThatThrowsExceptionAfterResponseHasBeenSetThenOriginalResponseReturnedWithError() { HttpConnectResponse expectedResponse = new HttpConnectResponse(HttpStatusCode.Unauthorized); Exception expectedException = new Exception("test exception"); var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(next(ctx)); }); pipline.Use(next => ctx => { throw expectedException; }); }); var actualResponse = await client.GetAsync(new Uri("https://www.example.com"), CancellationToken.None); actualResponse.Should().BeEquivalentTo(expectedResponse); actualResponse.Status.Should().Be(HttpConnectResponseStatus.Error); }
public async Task WhenMiddlewareReturnsNonSuccessResponseThenDoesNotDeserializeResponse(HttpStatusCode statusCode) { var expectedResponse = new HttpConnectResponse <int>(statusCode); expectedResponse.Content = new HttpConnectResponseContent(); expectedResponse.Content.Headers.ContentType = new ContentTypeHeader("application/json"); expectedResponse.Content.Content = "{\"error\":\"test_error\""; expectedResponse.Data = default; expectedResponse.Status = HttpConnectResponseStatus.Completed; var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.GetAsync <int>(new Uri("https://www.example.com"), CancellationToken.None); actualResponse.Should().BeEquivalentTo(expectedResponse); }
public async Task WhenBuiltWithSimpleMiddlewareThenReturnsExpectedResponse() { var expectedResponse = new HttpConnectResponse <int>(HttpStatusCode.OK); expectedResponse.Content = new HttpConnectResponseContent(); expectedResponse.Content.Headers.ContentType = new ContentTypeHeader("application/json"); expectedResponse.Content.Content = "1"; expectedResponse.Data = 1; expectedResponse.Status = HttpConnectResponseStatus.Completed; var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.GetAsync <int>(new Uri("https://www.example.com"), CancellationToken.None); actualResponse.Should().BeEquivalentTo(expectedResponse); }
public async Task WhenResponseContentTypeCannotBeDeserializedThenReturnsDefault(string contentType, string content) { var expectedResponse = new HttpConnectResponse <string>(HttpStatusCode.OK); expectedResponse.Content = new HttpConnectResponseContent(); expectedResponse.Content.Headers.ContentType = new ContentTypeHeader(contentType); expectedResponse.Content.Content = content; expectedResponse.Data = null; expectedResponse.Status = HttpConnectResponseStatus.Completed; var client = new HttpConnectClient((pipline) => { pipline.Use(next => ctx => { ctx.Response = expectedResponse; return(Task.CompletedTask); }); }); var actualResponse = await client.SendAsync <string>(new HttpConnectRequest(HttpMethod.Get, new Uri("https://www.example.com")), CancellationToken.None); actualResponse.Should().BeEquivalentTo(expectedResponse); }