From 524b4189695b349d8714a310509fc214361a39c3 Mon Sep 17 00:00:00 2001 From: Robert Marshall Date: Fri, 10 Apr 2020 22:24:24 +0100 Subject: [PATCH] Add builder for HttpClient --- Website.Tests/Data/ApiClientTests.cs | 23 +++++-------------- Website.Tests/HttpClientBuilder.cs | 34 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 Website.Tests/HttpClientBuilder.cs diff --git a/Website.Tests/Data/ApiClientTests.cs b/Website.Tests/Data/ApiClientTests.cs index fdd56b9..959ebef 100644 --- a/Website.Tests/Data/ApiClientTests.cs +++ b/Website.Tests/Data/ApiClientTests.cs @@ -1,8 +1,6 @@ -using System; -using System.Net.Http; +using System.Net.Http; using System.Threading.Tasks; using FluentAssertions; -using RichardSzalay.MockHttp; using Website.Data; using Xunit; @@ -21,18 +19,9 @@ namespace Website.Tests.Data { public int TestProperty { get; set; } } - private static HttpClient MakeHttpClient(HttpMethod method, string url, string response) { - var httpMessageHandler = new MockHttpMessageHandler(); - httpMessageHandler.When(method, url).Respond("application/json", response); - - var httpClient = httpMessageHandler.ToHttpClient(); - httpClient.BaseAddress = new Uri("http://example.com"); - return httpClient; - } - [Fact] public async Task Get_WithUrl_ReturnsResult() { - var httpClient = MakeHttpClient(HttpMethod.Get, "/test", @"{""TestProperty"":1}"); + var httpClient = new HttpClientBuilder().WithMethod(HttpMethod.Get).WithUrl("/test").WithResponse(@"{""TestProperty"":1}").Build(); var expected = new TestObject {TestProperty = 1}; @@ -42,7 +31,7 @@ namespace Website.Tests.Data { [Fact] public async Task Get_WithUrlAndQuery_ReturnsResult() { - var httpClient = MakeHttpClient(HttpMethod.Get, "/test?query1=1&query2=2", @"{""TestProperty"":1}"); + var httpClient = new HttpClientBuilder().WithMethod(HttpMethod.Get).WithUrl("/test?query1=1&query2=2").WithResponse(@"{""TestProperty"":1}").Build(); var expected = new TestObject {TestProperty = 1}; @@ -52,7 +41,7 @@ namespace Website.Tests.Data { [Fact] public void Get_WithUrlThatReturns404_ThrowsException() { - var httpClient = MakeHttpClient(HttpMethod.Get, "/test", ""); + var httpClient = new HttpClientBuilder().WithMethod(HttpMethod.Get).WithUrl("/test").WithResponse("").Build(); var client = new TestApiClient(httpClient); @@ -62,7 +51,7 @@ namespace Website.Tests.Data { [Fact] public async Task Post_WithUrlAndValue_ReturnsResult() { - var httpClient = MakeHttpClient(HttpMethod.Post, "/test", @"{""TestProperty"":1}"); + var httpClient = new HttpClientBuilder().WithMethod(HttpMethod.Post).WithUrl("/test").WithResponse(@"{""TestProperty"":1}").Build(); var expected = new TestObject {TestProperty = 1}; @@ -72,7 +61,7 @@ namespace Website.Tests.Data { [Fact] public async Task Post_WithUrlAndValueAndQuery_ReturnsResult() { - var httpClient = MakeHttpClient(HttpMethod.Post, "/test?query1=1&query2=2", @"{""TestProperty"":1}"); + var httpClient = new HttpClientBuilder().WithMethod(HttpMethod.Post).WithUrl("/test?query1=1&query2=2").WithResponse(@"{""TestProperty"":1}").Build(); var expected = new TestObject {TestProperty = 1}; diff --git a/Website.Tests/HttpClientBuilder.cs b/Website.Tests/HttpClientBuilder.cs new file mode 100644 index 0000000..21de3c5 --- /dev/null +++ b/Website.Tests/HttpClientBuilder.cs @@ -0,0 +1,34 @@ +using System; +using System.Net.Http; +using RichardSzalay.MockHttp; + +namespace Website.Tests { + public class HttpClientBuilder { + private string _url, _response; + private HttpMethod _method; + + public HttpClientBuilder WithUrl(string url) { + _url = url; + return this; + } + + public HttpClientBuilder WithResponse(string response) { + _response = response; + return this; + } + + public HttpClientBuilder WithMethod(HttpMethod method) { + _method = method; + return this; + } + + public HttpClient Build() { + var httpMessageHandler = new MockHttpMessageHandler(); + httpMessageHandler.When(_method, _url).Respond("application/json", _response); + + var httpClient = httpMessageHandler.ToHttpClient(); + httpClient.BaseAddress = new Uri("http://example.com"); + return httpClient; + } + } +}