Skip to content

Commit 9c8762f

Browse files
committed
Adds asserter for HttpVersion.
1 parent e0d429e commit 9c8762f

File tree

3 files changed

+88
-7
lines changed

3 files changed

+88
-7
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
# httpclienttesthelpers
2-
A simple library to make testing with HttpClient and related classes easier
2+
Using HttpClient in code that is unittested is seen as rather difficult, this library aims to make it easier to assert the calls that are made via an HttpClient.
3+
4+
This library is largly based on the HttpTest functionality from [Flurl](https://flurl.dev), but is focused around the use of HttpClient directly. Since I intend to replace my usage of Flurl.Http with this library, I kept the interface very similar.
5+

src/HttpClientTestHelpers/HttpRequestMessageAsserter.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ public HttpRequestMessageAsserter With(Func<HttpRequestMessage, bool> requestFil
106106
/// <returns>The <seealso cref="HttpRequestMessageAsserter"/> for further assertions.</returns>
107107
public HttpRequestMessageAsserter WithUriPattern(string pattern)
108108
{
109+
if(string.IsNullOrEmpty(pattern))
110+
{
111+
throw new ArgumentNullException(nameof(pattern));
112+
}
113+
109114
string condition = string.Empty;
110115
if (pattern != "*")
111116
{
@@ -128,5 +133,20 @@ public HttpRequestMessageAsserter WithHttpMethod(HttpMethod httpMethod)
128133

129134
return With(x => x.HasHttpMethod(httpMethod), $"HTTP Method '{httpMethod}'");
130135
}
136+
137+
/// <summary>
138+
/// Asserts wheter requests were made using a specific HTTP Version.
139+
/// </summary>
140+
/// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
141+
/// <returns>The <seealso cref="HttpRequestMessageAsserter"/> for further assertions.</returns>
142+
public HttpRequestMessageAsserter WithHttpVersion(Version httpVersion)
143+
{
144+
if(httpVersion == null)
145+
{
146+
throw new ArgumentNullException(nameof(httpVersion));
147+
}
148+
149+
return With(x => x.HasHttpVersion(httpVersion), $"HTTP Version '{httpVersion}'");
150+
}
131151
}
132152
}

test/HttpClientTestHelpers.Tests/HttpRequestMessageAsserterTests.cs

Lines changed: 64 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using System.Net;
34
using System.Net.Http;
45

56
using Xunit;
@@ -8,11 +9,25 @@ namespace HttpClientTestHelpers.Tests
89
{
910
public class HttpRequestMessageAsserterTests
1011
{
11-
#nullable disable
1212
[Fact]
1313
public void Constructor_NullRequestList_ThrowsArgumentNullException()
1414
{
15+
#nullable disable
1516
Assert.Throws<ArgumentNullException>(() => new HttpRequestMessageAsserter(null));
17+
#nullable restore
18+
}
19+
20+
#nullable disable
21+
[Theory]
22+
[InlineData(null)]
23+
[InlineData("")]
24+
public void WithUriPattern_NullOrEmptyPattern_ThrowsArgumentNullException(string pattern)
25+
{
26+
var sut = new HttpRequestMessageAsserter(Enumerable.Empty<HttpRequestMessage>());
27+
28+
var exception = Assert.Throws<ArgumentNullException>(() => sut.WithUriPattern(pattern));
29+
30+
Assert.Equal("pattern", exception.ParamName);
1631
}
1732
#nullable restore
1833

@@ -51,20 +66,20 @@ public void WithUriPattern_RequestWithStarPatternAndNoRequests_ThrowsHttpRequest
5166
Assert.Equal("Expected at least one request to be made, but no requests were made.", exception.Message);
5267
}
5368

54-
#nullable disable
5569
[Fact]
56-
public void WithHttpmethod_NullHttpMethod_ThrowsArgumentNullException()
70+
public void WithHttpMethod_NullHttpMethod_ThrowsArgumentNullException()
5771
{
5872
var sut = new HttpRequestMessageAsserter(Enumerable.Empty<HttpRequestMessage>());
5973

74+
#nullable disable
6075
var exception = Assert.Throws<ArgumentNullException>(() => sut.WithHttpMethod(null));
76+
#nullable restore
6177

6278
Assert.Equal("httpMethod", exception.ParamName);
6379
}
64-
#nullable restore
6580

6681
[Fact]
67-
public void WithHttpmethod_NoRequests_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
82+
public void WithHttpMethod_NoRequests_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
6883
{
6984
var sut = new HttpRequestMessageAsserter(Enumerable.Empty<HttpRequestMessage>());
7085

@@ -74,7 +89,7 @@ public void WithHttpmethod_NoRequests_ThrowsHttpRequestMessageAssertionException
7489
}
7590

7691
[Fact]
77-
public void WithHttpmethod_RequestsWithIncorrectHttpMethod_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
92+
public void WithHttpMethod_RequestsWithIncorrectHttpMethod_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
7893
{
7994
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Post, new Uri("https://example.com")) });
8095

@@ -93,5 +108,48 @@ public void WithHttpMethod_RequestsWithCorrectMethod_ReturnsHttpRequestMessageAs
93108
Assert.NotNull(result);
94109
Assert.IsType<HttpRequestMessageAsserter>(result);
95110
}
111+
112+
[Fact]
113+
public void WithHttpVersion_NullHttpVersion_ThrowsArgumentNullException()
114+
{
115+
var sut = new HttpRequestMessageAsserter(Enumerable.Empty<HttpRequestMessage>());
116+
117+
#nullable disable
118+
var exception = Assert.Throws<ArgumentNullException>(() => sut.WithHttpVersion(null));
119+
#nullable restore
120+
121+
Assert.Equal("httpVersion", exception.ParamName);
122+
}
123+
124+
[Fact]
125+
public void WithHttpVersion_NoRequests_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
126+
{
127+
var sut = new HttpRequestMessageAsserter(Enumerable.Empty<HttpRequestMessage>());
128+
129+
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithHttpVersion(HttpVersion.Version11));
130+
131+
Assert.Equal("Expected at least one request to be made with HTTP Version '1.1', but no requests were made.", exception.Message);
132+
}
133+
134+
[Fact]
135+
public void WithHttpVersion_RequestsWithIncorrectHttpVersion_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
136+
{
137+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage { Version = HttpVersion.Version20 } });
138+
139+
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithHttpVersion(HttpVersion.Version11));
140+
141+
Assert.Equal("Expected at least one request to be made with HTTP Version '1.1', but no requests were made.", exception.Message);
142+
}
143+
144+
[Fact]
145+
public void WithHttpVersion_RequestsWithCorrectVersion_ReturnsHttpRequestMessageAsserter()
146+
{
147+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage { Version = HttpVersion.Version11 } });
148+
149+
var result = sut.WithHttpVersion(HttpVersion.Version11);
150+
151+
Assert.NotNull(result);
152+
Assert.IsType<HttpRequestMessageAsserter>(result);
153+
}
96154
}
97155
}

0 commit comments

Comments
 (0)