Skip to content

Commit 4595dc4

Browse files
authored
Use an exact match for the pattern matching.
Fixes #8
1 parent 8219547 commit 4595dc4

File tree

4 files changed

+34
-33
lines changed

4 files changed

+34
-33
lines changed

src/HttpClientTestHelpers/HttpRequestMessageExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ private static bool Matches(string value, string pattern)
246246
{
247247
var regex = Regex.Escape(pattern).Replace("\\*", "(.*)");
248248

249-
return Regex.IsMatch(value, regex);
249+
return Regex.IsMatch(value, $"^{regex}$");
250250
}
251251
}
252252
}

test/HttpClientTestHelpers.Tests/HttpRequestMessageAsserterTests.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,27 @@ public void WithUriPattern_NullOrEmptyPattern_ThrowsArgumentNullException(string
3434
[Fact]
3535
public void WithUriPattern_RequestWithMatchingUri_DoesNotThrowException()
3636
{
37-
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com")) });
37+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com/")) });
3838

39-
sut.WithUriPattern("https://example.com");
39+
sut.WithUriPattern("https://example.com/");
4040
}
4141

4242
[Fact]
4343
public void WithUriPattern_RequestWithMatchingUriAndNegationTurnedOn_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
4444
{
45-
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com")) }, true);
45+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com/")) }, true);
4646

47-
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithUriPattern("https://example.com"));
48-
Assert.Equal("Expected no requests to be made with uri pattern 'https://example.com', but one request was made.", exception.Message);
47+
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithUriPattern("https://example.com/"));
48+
Assert.Equal("Expected no requests to be made with uri pattern 'https://example.com/', but one request was made.", exception.Message);
4949
}
5050

5151
[Fact]
5252
public void WithUriPattern_RequestWithNotMatchingUri_ThrowsHttpRequestMessageassertionExceptionWithSpecificMessage()
5353
{
54-
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com")) });
54+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com/")) });
5555

56-
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithUriPattern("https://test.org"));
57-
Assert.Equal("Expected at least one request to be made with uri pattern 'https://test.org', but no requests were made.", exception.Message);
56+
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithUriPattern("https://test.org/"));
57+
Assert.Equal("Expected at least one request to be made with uri pattern 'https://test.org/', but no requests were made.", exception.Message);
5858
}
5959

6060
[Fact]
@@ -91,7 +91,7 @@ public void WithHttpMethod_NoRequests_ThrowsHttpRequestMessageAssertionException
9191
[Fact]
9292
public void WithHttpMethod_RequestsWithIncorrectHttpMethod_ThrowsHttpRequestMessageAssertionExceptionWithSpecificMessage()
9393
{
94-
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Post, new Uri("https://example.com")) });
94+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Post, new Uri("https://example.com/")) });
9595

9696
var exception = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.WithHttpMethod(HttpMethod.Get));
9797

@@ -101,7 +101,7 @@ public void WithHttpMethod_RequestsWithIncorrectHttpMethod_ThrowsHttpRequestMess
101101
[Fact]
102102
public void WithHttpMethod_RequestsWithCorrectMethod_ReturnsHttpRequestMessageAsserter()
103103
{
104-
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com")) });
104+
var sut = new HttpRequestMessageAsserter(new[] { new HttpRequestMessage(HttpMethod.Get, new Uri("https://example.com/")) });
105105

106106
var result = sut.WithHttpMethod(HttpMethod.Get);
107107

@@ -402,13 +402,13 @@ public void WithContentHeaderNameAndValue_RequestWithNotMatchingHeaderValue_Thro
402402
}
403403

404404
[Fact]
405-
public void WithContentHeaderNameAndValue_RequestWithMatchinHeader_ReturnsHttpRequestMessageAssert()
405+
public void WithContentHeaderNameAndValue_RequestWithMatchingHeader_ReturnsHttpRequestMessageAssert()
406406
{
407407
var request = new HttpRequestMessage();
408408
request.Content = new StringContent("", Encoding.UTF8, "application/json");
409409
var sut = new HttpRequestMessageAsserter(new[] { request });
410410

411-
var result = sut.WithContentHeader("Content-Type", "application/json");
411+
var result = sut.WithContentHeader("Content-Type", "application/json; charset=utf-8");
412412

413413
Assert.NotNull(result);
414414
Assert.IsType<HttpRequestMessageAsserter>(result);
@@ -540,7 +540,7 @@ public void WithHeaderNameAndValue_RequestWithNotMatchingHeaderValue_ThrowsHttpR
540540
}
541541

542542
[Theory]
543-
[InlineData("Content-Type", "application/json")]
543+
[InlineData("Content-Type", "application/json; charset=utf-8")]
544544
[InlineData("Host", "Test")]
545545
public void WithHeaderNameAndValue_RequestWithMatchinHeader_ReturnsHttpRequestMessageAssert(string name, string value)
546546
{

test/HttpClientTestHelpers.Tests/HttpRequestMessageExtensionsTests.MatchesUri.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void HasMatchingUri_EmptyPattern_ReturnsFalse()
3535

3636
[Theory]
3737
[InlineData("*")]
38-
[InlineData("https://example.com")]
38+
[InlineData("https://example.com*")]
3939
[InlineData("https://example.com/")]
4040
[InlineData("https://example.com/*")]
4141
[InlineData("https://*/")]
@@ -58,6 +58,7 @@ public void HasMatchingUri_PatternWithMultipleWildCards_ReturnsTrue()
5858
[Theory]
5959
[InlineData("")]
6060
[InlineData("http://example.com")]
61+
[InlineData("https://example.com")] // Missing slash at the end.
6162
[InlineData("http://*")]
6263
[InlineData("https://*/api/test")]
6364
public void HasMatchingUri_WithPatternThatDoesnotMatch_ReturnsFalse(string pattern)

test/HttpClientTestHelpers.Tests/TestableHttpMessageHandlerTests.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public async Task SendAsync_WhenRequestsAreMade_LogsRequests()
1414
{
1515
using var sut = new TestableHttpMessageHandler();
1616
using var client = new HttpClient(sut);
17-
using var request = new HttpRequestMessage(HttpMethod.Get, "https://example.com");
17+
using var request = new HttpRequestMessage(HttpMethod.Get, "https://example.com/");
1818

1919
_ = await client.SendAsync(request);
2020

@@ -26,10 +26,10 @@ public async Task SendAsync_WhenMultipleRequestsAreMade_AllRequestsAreLogged()
2626
{
2727
using var sut = new TestableHttpMessageHandler();
2828
using var client = new HttpClient(sut);
29-
using var request1 = new HttpRequestMessage(HttpMethod.Get, "https://example1.com");
30-
using var request2 = new HttpRequestMessage(HttpMethod.Post, "https://example2.com");
31-
using var request3 = new HttpRequestMessage(HttpMethod.Delete, "https://example3.com");
32-
using var request4 = new HttpRequestMessage(HttpMethod.Head, "https://example4.com");
29+
using var request1 = new HttpRequestMessage(HttpMethod.Get, "https://example1.com/");
30+
using var request2 = new HttpRequestMessage(HttpMethod.Post, "https://example2.com/");
31+
using var request3 = new HttpRequestMessage(HttpMethod.Delete, "https://example3.com/");
32+
using var request4 = new HttpRequestMessage(HttpMethod.Head, "https://example4.com/");
3333

3434
_ = await client.SendAsync(request1);
3535
_ = await client.SendAsync(request2);
@@ -45,7 +45,7 @@ public async Task SendAsync_ByDefault_ReturnsHttpStatusCodeOK()
4545
using var sut = new TestableHttpMessageHandler();
4646
using var client = new HttpClient(sut);
4747

48-
var result = await client.GetAsync(new Uri("https://example.com"));
48+
var result = await client.GetAsync(new Uri("https://example.com/"));
4949

5050
Assert.Equal(HttpStatusCode.OK, result.StatusCode);
5151
}
@@ -58,7 +58,7 @@ public async Task SendAsync_WhenRespondWithIsSet_SetRespondIsUsed()
5858
sut.RespondWith(response);
5959
using var client = new HttpClient(sut);
6060

61-
var result = await client.GetAsync(new Uri("https://example.com"));
61+
var result = await client.GetAsync(new Uri("https://example.com/"));
6262

6363
Assert.Equal(HttpStatusCode.NotFound, result.StatusCode);
6464
Assert.Same(response, result);
@@ -78,7 +78,7 @@ public async Task ShouldHaveMadeRequests_WhenRequestsWereMade_DoesNotThrowExcept
7878
using var sut = new TestableHttpMessageHandler();
7979
using var client = new HttpClient(sut);
8080

81-
_ = await client.GetAsync(new Uri("https://example.com"));
81+
_ = await client.GetAsync(new Uri("https://example.com/"));
8282

8383
sut.ShouldHaveMadeRequests();
8484
}
@@ -88,7 +88,7 @@ public void ShouldHaveMadeRequestsTo_WhenNoRequestsWereMade_ThrowsHttpRequestMes
8888
{
8989
using var sut = new TestableHttpMessageHandler();
9090

91-
Assert.Throws<HttpRequestMessageAssertionException>(() => sut.ShouldHaveMadeRequestsTo("https://example.com"));
91+
Assert.Throws<HttpRequestMessageAssertionException>(() => sut.ShouldHaveMadeRequestsTo("https://example.com/"));
9292
}
9393

9494
[Fact]
@@ -97,9 +97,9 @@ public async Task ShouldHaveMadeRequestsTo_WhenMatchinRequestsWereMade_ReturnsHt
9797
using var sut = new TestableHttpMessageHandler();
9898
using var client = new HttpClient(sut);
9999

100-
_ = await client.GetAsync(new Uri("https://example.com"));
100+
_ = await client.GetAsync(new Uri("https://example.com/"));
101101

102-
var result = sut.ShouldHaveMadeRequestsTo("https://example.com");
102+
var result = sut.ShouldHaveMadeRequestsTo("https://example.com/");
103103

104104
Assert.NotNull(result);
105105
Assert.IsType<HttpRequestMessageAsserter>(result);
@@ -119,7 +119,7 @@ public async Task ShouldNotHaveMadeRequests_WhenASingleRequestWasMade_ThrowsHttp
119119
using var sut = new TestableHttpMessageHandler();
120120
using var client = new HttpClient(sut);
121121

122-
_ = await client.GetAsync(new Uri("https://example.com"));
122+
_ = await client.GetAsync(new Uri("https://example.com/"));
123123

124124
var result = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.ShouldNotHaveMadeRequests());
125125
Assert.Equal("Expected no requests to be made, but one request was made.", result.Message);
@@ -131,8 +131,8 @@ public async Task ShouldNotHaveMadeRequests_WhenMultipleRequestsWereMade_ThrowsH
131131
using var sut = new TestableHttpMessageHandler();
132132
using var client = new HttpClient(sut);
133133

134-
_ = await client.GetAsync(new Uri("https://example.com"));
135-
_ = await client.GetAsync(new Uri("https://example.com"));
134+
_ = await client.GetAsync(new Uri("https://example.com/"));
135+
_ = await client.GetAsync(new Uri("https://example.com/"));
136136

137137
var result = Assert.Throws<HttpRequestMessageAssertionException>(() => sut.ShouldNotHaveMadeRequests());
138138
Assert.Equal("Expected no requests to be made, but 2 requests were made.", result.Message);
@@ -143,7 +143,7 @@ public void ShouldNotHaveMadeRequestsTo_WhenNoRequestsWereMade_ReturnsHttpReques
143143
{
144144
using var sut = new TestableHttpMessageHandler();
145145

146-
var result = sut.ShouldNotHaveMadeRequestsTo("https://example.com");
146+
var result = sut.ShouldNotHaveMadeRequestsTo("https://example.com/");
147147

148148
Assert.NotNull(result);
149149
Assert.IsType<HttpRequestMessageAsserter>(result);
@@ -155,9 +155,9 @@ public async Task ShouldNotHaveMadeRequestsTo_WhenMatchinRequestsWereMade_Throws
155155
using var sut = new TestableHttpMessageHandler();
156156
using var client = new HttpClient(sut);
157157

158-
_ = await client.GetAsync(new Uri("https://example.com"));
158+
_ = await client.GetAsync(new Uri("https://example.com/"));
159159

160-
Assert.Throws<HttpRequestMessageAssertionException>(() => sut.ShouldNotHaveMadeRequestsTo("https://example.com"));
160+
Assert.Throws<HttpRequestMessageAssertionException>(() => sut.ShouldNotHaveMadeRequestsTo("https://example.com/"));
161161
}
162162

163163
#nullable disable
@@ -193,7 +193,7 @@ public async Task SimulateTimout_WhenRequestIsMade_ThrowsTaskCancelationExceptio
193193
sut.SimulateTimeout();
194194
using var client = new HttpClient(sut);
195195

196-
var exception = await Assert.ThrowsAsync<TaskCanceledException>(() => client.GetAsync(new Uri("https://example.com")));
196+
var exception = await Assert.ThrowsAsync<TaskCanceledException>(() => client.GetAsync(new Uri("https://example.com/")));
197197
Assert.Equal(new OperationCanceledException().Message, exception.Message);
198198
}
199199
}

0 commit comments

Comments
 (0)