Skip to content

Commit db0f9df

Browse files
committed
Add some changelog and update some integrationtests
1 parent d5052f0 commit db0f9df

3 files changed

Lines changed: 51 additions & 41 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
77
## [0.12] - unplanned
88
### Deprecated
99
- The methods `WithRequestHeader` and `WithContentHeader` are deprecated, please use `WithHeader` instead.
10-
- The `WithFilter` method is deprecated and will be made internal or be removed. If there is a specific assertion that is missing, please open an issue.
10+
- The `WithFilter` method is deprecated and will be removed. If there is a specific assertion that is missing, please open an issue.
1111

1212
### Removed
1313
- .NET 6.0 target, since it is no longer supported
1414
- .NET Framework 4.6.2, 4.7.0 and 4.7.2, since these can't be tested using xUnit v3
15-
- automatic nuget updates by dependabot, since we want to test against the lowest supported nuget version and most of the time dependabot does not choose the right package.
15+
- Automatic nuget updates by dependabot, since we want to test against the lowest supported nuget version and most of the time dependabot does not choose the right package.
1616

1717
### Added
1818
- Support for .NET 9.0
1919
- Support for .NET 10.0
20+
- The class `RequestBuilder` to 'build' requests for assertion
21+
- The methods `TestableHttpClient.ShouldHaveMadeRequests(Action<RequestBuilder>)` and `TestableHttpClient.ShouldHaveMadeRequests(int, Action<RequestBuilder>)` as the new assertion mechanism
2022

2123
### Changed
2224
- The TestableHttpMessageHandler now makes a clone of the original request, so that the original request can be disposed.

src/TestableHttpClient/IHttpRequestMessagesCheck.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public interface IHttpRequestMessagesCheck
1616
/// <param name="requestFilter">The filter to filter requests with before asserting.</param>
1717
/// <param name="condition">The name of the condition, used in the exception message.</param>
1818
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
19-
[Obsolete("WithFilter will be made internal, since it should no longer be necesary to use.")]
19+
[Obsolete("WithFilter will be made removed, since it should no longer be necesary to use.")]
2020
public IHttpRequestMessagesCheck WithFilter(Func<HttpRequestMessage, bool> requestFilter, string condition);
2121

2222
/// <summary>
@@ -26,7 +26,7 @@ public interface IHttpRequestMessagesCheck
2626
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
2727
/// <param name="condition">The name of the condition, used in the exception message.</param>
2828
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
29-
[Obsolete("WithFilter will be made internal, since it should no longer be necesary to use.")]
29+
[Obsolete("WithFilter will be made removed, since it should no longer be necesary to use.")]
3030
public IHttpRequestMessagesCheck WithFilter(Func<HttpRequestMessage, bool> requestFilter, int expectedNumberOfRequests, string condition);
3131

3232
/// <summary>
@@ -36,7 +36,7 @@ public interface IHttpRequestMessagesCheck
3636
/// <param name="expectedNumberOfRequests">The expected number of requests, when null is passed "at least one" is presumed.</param>
3737
/// <param name="condition">The name of the condition, used in the exception message.</param>
3838
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
39-
[Obsolete("WithFilter will be made internal, since it should no longer be necesary to use.")]
39+
[Obsolete("WithFilter will be made removed, since it should no longer be necesary to use.")]
4040
public IHttpRequestMessagesCheck WithFilter(Func<HttpRequestMessage, bool> requestFilter, int? expectedNumberOfRequests, string condition);
4141

4242
/// <summary>

test/TestableHttpClient.IntegrationTests/AssertingRequests.cs

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public async Task AssertingCallsAreNotMadeToSpecificUri()
3232

3333
_ = await client.GetAsync("https://httpbin.org/get", TestContext.Current.CancellationToken);
3434

35+
testHandler.ShouldHaveMadeRequests(0, x => x.WithRequestUri("https://example.org"));
36+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(0, x => x.WithRequestUri("https://httpbin.org/get")));
37+
3538
testHandler.ShouldHaveMadeRequestsTo("https://example.org", 0);
3639
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequestsTo("https://httpbin.org/get", 0));
3740
}
@@ -63,15 +66,15 @@ public async Task AssertingCallsUsingUriPattern()
6366

6467
_ = await client.GetAsync("https://httpbin.org/get", TestContext.Current.CancellationToken);
6568

66-
testHandler.ShouldHaveMadeRequests().WithRequestUri("https://*");
67-
testHandler.ShouldHaveMadeRequests().WithRequestUri("https://*.org/get");
68-
testHandler.ShouldHaveMadeRequests().WithRequestUri("https://httpbin.org/*");
69-
testHandler.ShouldHaveMadeRequests().WithRequestUri("*://httpbin.org/get");
70-
testHandler.ShouldHaveMadeRequests().WithRequestUri("https://httpbin.org/get");
71-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestUri("http://httpbin.org/get"));
72-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestUri("https://httpbin.org/"));
73-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestUri("https://*/post"));
74-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestUri("https://example.org/"));
69+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://*"));
70+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://*.org/get"));
71+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://httpbin.org/*"));
72+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("*://httpbin.org/get"));
73+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://httpbin.org/get"));
74+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("http://httpbin.org/get")));
75+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://httpbin.org/")));
76+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://*/post")));
77+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("https://example.org/")));
7578
}
7679

7780
[Fact]
@@ -95,9 +98,9 @@ public async Task AssertingCallWithQueryParameters()
9598

9699
_ = await client.GetAsync("https://httpbin.org/get?email=admin@example.com", TestContext.Current.CancellationToken);
97100

98-
testHandler.ShouldHaveMadeRequests().WithRequestUri("?email=admin@example.com");
99-
testHandler.ShouldHaveMadeRequests().WithRequestUri("?email=*");
100-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestUri("?email=admin%40example.com"));
101+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("?email=admin@example.com"));
102+
testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("?email=*"));
103+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithRequestUri("?email=admin%40example.com")));
101104
}
102105

103106
[Fact]
@@ -110,6 +113,11 @@ public async Task AssertingHttpMethods()
110113
using StringContent content = new("");
111114
_ = await client.PostAsync("https://httpbin.org/post", content, TestContext.Current.CancellationToken);
112115

116+
testHandler.ShouldHaveMadeRequests(x => x.WithMethod(HttpMethod.Get).WithRequestUri("*/get"));
117+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithMethod(HttpMethod.Post).WithRequestUri("*/get")));
118+
testHandler.ShouldHaveMadeRequests(x => x.WithMethod(HttpMethod.Post).WithRequestUri("*/post"));
119+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithMethod(HttpMethod.Get).WithRequestUri("*/post")));
120+
113121
testHandler.ShouldHaveMadeRequestsTo("*/get").WithHttpMethod(HttpMethod.Get);
114122
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequestsTo("*/get").WithHttpMethod(HttpMethod.Post));
115123
testHandler.ShouldHaveMadeRequestsTo("*/post").WithHttpMethod(HttpMethod.Post);
@@ -124,13 +132,13 @@ public async Task AssertingHeaders()
124132
client.DefaultRequestHeaders.Add("api-version", "1.0");
125133
_ = await client.GetAsync("https://httpbin.org/get", TestContext.Current.CancellationToken);
126134

127-
testHandler.ShouldHaveMadeRequests().WithHeader("api-version");
128-
testHandler.ShouldHaveMadeRequests().WithHeader("api-version", "1.0");
129-
testHandler.ShouldHaveMadeRequests().WithHeader("api-version", "1*");
135+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("api-version"));
136+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("api-version", "1.0"));
137+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("api-version", "1*"));
130138

131-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithHeader("my-version"));
132-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithHeader("api-version", "1"));
133-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithHeader("api-version", "2*"));
139+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithHeader("my-version")));
140+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithHeader("api-version", "1")));
141+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithHeader("api-version", "2*")));
134142
}
135143

136144
[Fact]
@@ -142,15 +150,15 @@ public async Task AssertingContentHeaders()
142150
using StringContent content = new("", Encoding.UTF8, "application/json");
143151
_ = await client.PostAsync("https://httpbin.org/post", content, TestContext.Current.CancellationToken);
144152

145-
testHandler.ShouldHaveMadeRequests().WithHeader("content-type");
146-
testHandler.ShouldHaveMadeRequests().WithHeader("Content-Type");
147-
testHandler.ShouldHaveMadeRequests().WithHeader("Content-Type", "application/json; charset=utf-8");
148-
testHandler.ShouldHaveMadeRequests().WithHeader("Content-Type", "application/json*");
149-
testHandler.ShouldHaveMadeRequests().WithHeader("Content-Type", "*charset=utf-8");
153+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("content-type"));
154+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Type"));
155+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Type", "application/json; charset=utf-8"));
156+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Type", "application/json*"));
157+
testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Type", "*charset=utf-8"));
150158

151-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithHeader("Content-Disposition"));
152-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithHeader("Content-Type", "application/json"));
153-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithHeader("Content-Type", "*=utf-16"));
159+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Disposition")));
160+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Type", "application/json")));
161+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithHeader("Content-Type", "*=utf-16")));
154162
}
155163

156164
[Fact]
@@ -162,12 +170,12 @@ public async Task AssertingContent()
162170
using StringContent content = new("my special content");
163171
_ = await client.PostAsync("https://httpbin.org/post", content, TestContext.Current.CancellationToken);
164172

165-
testHandler.ShouldHaveMadeRequests().WithContent("my special content");
166-
testHandler.ShouldHaveMadeRequests().WithContent("my*content");
167-
testHandler.ShouldHaveMadeRequests().WithContent("*");
173+
testHandler.ShouldHaveMadeRequests(x => x.WithContent("my special content"));
174+
testHandler.ShouldHaveMadeRequests(x => x.WithContent("my*content"));
175+
testHandler.ShouldHaveMadeRequests(x => x.WithContent("*"));
168176

169-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContent(""));
170-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContent("my"));
177+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithContent("")));
178+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithContent("my")));
171179
}
172180

173181
[Fact]
@@ -181,12 +189,12 @@ public async Task AssertingContent_WhenOriginalContentIsDisposed()
181189
_ = await client.PostAsync("https://httpbin.org/post", content, TestContext.Current.CancellationToken);
182190
}
183191

184-
testHandler.ShouldHaveMadeRequests().WithContent("my special content");
185-
testHandler.ShouldHaveMadeRequests().WithContent("my*content");
186-
testHandler.ShouldHaveMadeRequests().WithContent("*");
192+
testHandler.ShouldHaveMadeRequests(x => x.WithContent("my special content"));
193+
testHandler.ShouldHaveMadeRequests(x => x.WithContent("my*content"));
194+
testHandler.ShouldHaveMadeRequests(x => x.WithContent("*"));
187195

188-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContent(""));
189-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContent("my"));
196+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithContent("")));
197+
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests(x => x.WithContent("my")));
190198
}
191199

192200
[Fact]

0 commit comments

Comments
 (0)