Skip to content

Commit b0a987d

Browse files
committed
Move several HttpRequestMessagesCheckExtensions to HttpRequestMessageAsserter and specify them on IHttpRequestMessagesCheck interface
1 parent d635e8a commit b0a987d

File tree

6 files changed

+250
-174
lines changed

6 files changed

+250
-174
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
2020
### Changed
2121
- The TestableHttpMessageHandler now makes a clone of the original request, so that the original request can be disposed.
2222
This change also makes it possible to assert the content on .NET Framework.
23+
- Moved `WithHttpMethod`, `WithRequestUri`, `WithHttpVersion`, `WithHeader` and `WithContent` from `HttpRequestMessagesCheckExtensions` to `HttpRequestMessageAsserter` and specify them on the `IHttpRequestMessagesCheck` interface.
2324

2425
## [0.11] - 2024-06-15
2526
### Removed

src/TestableHttpClient/HttpRequestMessageAsserter.cs

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,148 @@ public IHttpRequestMessagesCheck WithFilter(Func<HttpRequestMessage, bool> reque
8181
}
8282
return this;
8383
}
84+
85+
/// <summary>
86+
/// Asserts whether requests were made to a given URI based on a pattern.
87+
/// </summary>
88+
/// <param name="pattern">The uri pattern that is expected.</param>
89+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
90+
public IHttpRequestMessagesCheck WithRequestUri(string pattern) => WithRequestUri(pattern, null);
91+
92+
/// <summary>
93+
/// Asserts whether requests were made to a given URI based on a pattern.
94+
/// </summary>
95+
/// <param name="pattern">The uri pattern that is expected.</param>
96+
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
97+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
98+
public IHttpRequestMessagesCheck WithRequestUri(string pattern, int expectedNumberOfRequests) => WithRequestUri(pattern, (int?)expectedNumberOfRequests);
99+
100+
private IHttpRequestMessagesCheck WithRequestUri(string pattern, int? expectedNumberOfRequests)
101+
{
102+
Guard.ThrowIfNullOrEmpty(pattern);
103+
104+
var condition = string.Empty;
105+
if (pattern != "*")
106+
{
107+
condition = $"uri pattern '{pattern}'";
108+
}
109+
110+
UriPattern uriPattern = UriPatternParser.Parse(pattern);
111+
112+
return WithFilter(x => x.RequestUri is not null && uriPattern.Matches(x.RequestUri, Options.UriPatternMatchingOptions), expectedNumberOfRequests, condition);
113+
}
114+
115+
/// <summary>
116+
/// Asserts whether requests were made with a given HTTP Method.
117+
/// </summary>
118+
/// <param name="httpMethod">The <seealso cref="HttpMethod"/> that is expected.</param>
119+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
120+
public IHttpRequestMessagesCheck WithHttpMethod(HttpMethod httpMethod) => WithHttpMethod(httpMethod, null);
121+
122+
/// <summary>
123+
/// Asserts whether requests were made with a given HTTP Method.
124+
/// </summary>
125+
/// <param name="httpMethod">The <seealso cref="HttpMethod"/> that is expected.</param>
126+
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
127+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
128+
public IHttpRequestMessagesCheck WithHttpMethod(HttpMethod httpMethod, int expectedNumberOfRequests) => WithHttpMethod(httpMethod, (int?)expectedNumberOfRequests);
129+
130+
private IHttpRequestMessagesCheck WithHttpMethod(HttpMethod httpMethod, int? expectedNumberOfRequests)
131+
{
132+
Guard.ThrowIfNull(httpMethod);
133+
134+
return WithFilter(x => x.HasHttpMethod(httpMethod), expectedNumberOfRequests, $"HTTP Method '{httpMethod}'");
135+
}
136+
137+
/// <summary>
138+
/// Asserts whether requests were made using a specific HTTP Version.
139+
/// </summary>
140+
/// <param name="check">The implementation that hold all the request messages.</param>
141+
/// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
142+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
143+
public IHttpRequestMessagesCheck WithHttpVersion(Version httpVersion) => WithHttpVersion(httpVersion, null);
144+
145+
/// <summary>
146+
/// Asserts whether requests were made using a specific HTTP Version.
147+
/// </summary>
148+
/// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
149+
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
150+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
151+
public IHttpRequestMessagesCheck WithHttpVersion(Version httpVersion, int expectedNumberOfRequests) => WithHttpVersion(httpVersion, (int?)expectedNumberOfRequests);
152+
153+
private IHttpRequestMessagesCheck WithHttpVersion(Version httpVersion, int? expectedNumberOfRequests)
154+
{
155+
Guard.ThrowIfNull(httpVersion);
156+
157+
return WithFilter(x => x.HasHttpVersion(httpVersion), expectedNumberOfRequests, $"HTTP Version '{httpVersion}'");
158+
}
159+
160+
/// <summary>
161+
/// Asserts whether requests were made with a specific header name. Values are ignored.
162+
/// </summary>
163+
/// <param name="headerName">The name of the header that is expected.</param>
164+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
165+
public IHttpRequestMessagesCheck WithHeader(string headerName) => WithHeader(headerName, (int?)null);
166+
167+
/// <summary>
168+
/// Asserts whether requests were made with a specific header name. Values are ignored.
169+
/// </summary>
170+
/// <param name="headerName">The name of the header that is expected.</param>
171+
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
172+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
173+
public IHttpRequestMessagesCheck WithHeader(string headerName, int expectedNumberOfRequests) => WithHeader(headerName, (int?)expectedNumberOfRequests);
174+
175+
private IHttpRequestMessagesCheck WithHeader(string headerName, int? expectedNumberOfRequests)
176+
{
177+
Guard.ThrowIfNullOrEmpty(headerName);
178+
179+
return WithFilter(x => x.HasHeader(headerName), expectedNumberOfRequests, $"header '{headerName}'");
180+
}
181+
182+
/// <summary>
183+
/// Asserts whether requests were made with a specific header name and value.
184+
/// </summary>
185+
/// <param name="headerName">The name of the header that is expected.</param>
186+
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
187+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
188+
public IHttpRequestMessagesCheck WithHeader(string headerName, string headerValue) => WithHeader(headerName, headerValue, null);
189+
190+
/// <summary>
191+
/// Asserts whether requests were made with a specific header name and value.
192+
/// </summary>
193+
/// <param name="headerName">The name of the header that is expected.</param>
194+
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
195+
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
196+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
197+
public IHttpRequestMessagesCheck WithHeader(string headerName, string headerValue, int expectedNumberOfRequests) => WithHeader(headerName, headerValue, (int?)expectedNumberOfRequests);
198+
199+
private IHttpRequestMessagesCheck WithHeader(string headerName, string headerValue, int? expectedNumberOfRequests)
200+
{
201+
Guard.ThrowIfNullOrEmpty(headerName);
202+
Guard.ThrowIfNullOrEmpty(headerValue);
203+
204+
return WithFilter(x => x.HasHeader(headerName, headerValue), expectedNumberOfRequests, $"header '{headerName}' and value '{headerValue}'");
205+
}
206+
207+
/// <summary>
208+
/// Asserts whether requests were made with specific content.
209+
/// </summary>
210+
/// <param name="pattern">The expected content, supports wildcards.</param>
211+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
212+
public IHttpRequestMessagesCheck WithContent(string pattern) => WithContent(pattern, null);
213+
214+
/// <summary>
215+
/// Asserts whether requests were made with specific content.
216+
/// </summary>
217+
/// <param name="pattern">The expected content, supports wildcards.</param>
218+
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
219+
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
220+
public IHttpRequestMessagesCheck WithContent(string pattern, int expectedNumberOfRequests) => WithContent(pattern, (int?)expectedNumberOfRequests);
221+
222+
private IHttpRequestMessagesCheck WithContent(string pattern, int? expectedNumberOfRequests)
223+
{
224+
Guard.ThrowIfNull(pattern);
225+
226+
return WithFilter(x => x.HasContent(pattern), expectedNumberOfRequests, $"content '{pattern}'");
227+
}
84228
}

src/TestableHttpClient/HttpRequestMessagesCheckExtensions.cs

Lines changed: 0 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -2,89 +2,6 @@
22

33
public static class HttpRequestMessagesCheckExtensions
44
{
5-
/// <summary>
6-
/// Asserts whether requests were made to a given URI based on a pattern.
7-
/// </summary>
8-
/// <param name="check">The implementation that hold all the request messages.</param>
9-
/// <param name="pattern">The uri pattern that is expected.</param>
10-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
11-
public static IHttpRequestMessagesCheck WithRequestUri(this IHttpRequestMessagesCheck check, string pattern) => WithRequestUri(check, pattern, null);
12-
13-
/// <summary>
14-
/// Asserts whether requests were made to a given URI based on a pattern.
15-
/// </summary>
16-
/// <param name="check">The implementation that hold all the request messages.</param>
17-
/// <param name="pattern">The uri pattern that is expected.</param>
18-
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
19-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
20-
public static IHttpRequestMessagesCheck WithRequestUri(this IHttpRequestMessagesCheck check, string pattern, int expectedNumberOfRequests) => WithRequestUri(check, pattern, (int?)expectedNumberOfRequests);
21-
22-
private static IHttpRequestMessagesCheck WithRequestUri(this IHttpRequestMessagesCheck check, string pattern, int? expectedNumberOfRequests)
23-
{
24-
Guard.ThrowIfNull(check);
25-
Guard.ThrowIfNullOrEmpty(pattern);
26-
27-
var condition = string.Empty;
28-
if (pattern != "*")
29-
{
30-
condition = $"uri pattern '{pattern}'";
31-
}
32-
33-
UriPattern uriPattern = UriPatternParser.Parse(pattern);
34-
35-
return check.WithFilter(x => x.RequestUri is not null && uriPattern.Matches(x.RequestUri, check.Options.UriPatternMatchingOptions), expectedNumberOfRequests, condition);
36-
}
37-
38-
/// <summary>
39-
/// Asserts whether requests were made with a given HTTP Method.
40-
/// </summary>
41-
/// <param name="check">The implementation that hold all the request messages.</param>
42-
/// <param name="httpMethod">The <seealso cref="HttpMethod"/> that is expected.</param>
43-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
44-
public static IHttpRequestMessagesCheck WithHttpMethod(this IHttpRequestMessagesCheck check, HttpMethod httpMethod) => WithHttpMethod(check, httpMethod, null);
45-
46-
/// <summary>
47-
/// Asserts whether requests were made with a given HTTP Method.
48-
/// </summary>
49-
/// <param name="check">The implementation that hold all the request messages.</param>
50-
/// <param name="httpMethod">The <seealso cref="HttpMethod"/> that is expected.</param>
51-
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
52-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
53-
public static IHttpRequestMessagesCheck WithHttpMethod(this IHttpRequestMessagesCheck check, HttpMethod httpMethod, int expectedNumberOfRequests) => WithHttpMethod(check, httpMethod, (int?)expectedNumberOfRequests);
54-
55-
private static IHttpRequestMessagesCheck WithHttpMethod(this IHttpRequestMessagesCheck check, HttpMethod httpMethod, int? expectedNumberOfRequests)
56-
{
57-
Guard.ThrowIfNull(check);
58-
Guard.ThrowIfNull(httpMethod);
59-
60-
return check.WithFilter(x => x.HasHttpMethod(httpMethod), expectedNumberOfRequests, $"HTTP Method '{httpMethod}'");
61-
}
62-
63-
/// <summary>
64-
/// Asserts whether requests were made using a specific HTTP Version.
65-
/// </summary>
66-
/// <param name="check">The implementation that hold all the request messages.</param>
67-
/// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
68-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
69-
public static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessagesCheck check, Version httpVersion) => WithHttpVersion(check, httpVersion, null);
70-
71-
/// <summary>
72-
/// Asserts whether requests were made using a specific HTTP Version.
73-
/// </summary>
74-
/// <param name="check">The implementation that hold all the request messages.</param>
75-
/// <param name="httpVersion">The <seealso cref="System.Net.HttpVersion"/> that is expected.</param>
76-
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
77-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
78-
public static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessagesCheck check, Version httpVersion, int expectedNumberOfRequests) => WithHttpVersion(check, httpVersion, (int?)expectedNumberOfRequests);
79-
80-
private static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessagesCheck check, Version httpVersion, int? expectedNumberOfRequests)
81-
{
82-
Guard.ThrowIfNull(check);
83-
Guard.ThrowIfNull(httpVersion);
84-
85-
return check.WithFilter(x => x.HasHttpVersion(httpVersion), expectedNumberOfRequests, $"HTTP Version '{httpVersion}'");
86-
}
87-
885
/// <summary>
896
/// Asserts whether requests were made with a specific header name. Values are ignored.
907
/// </summary>
@@ -211,84 +128,6 @@ private static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMess
211128
return check.WithFilter(x => x.HasContentHeader(headerName, headerValue), expectedNumberOfRequests, $"content header '{headerName}' and value '{headerValue}'");
212129
}
213130

214-
/// <summary>
215-
/// Asserts whether requests were made with a specific header name. Values are ignored.
216-
/// </summary>
217-
/// <param name="check">The implementation that hold all the request messages.</param>
218-
/// <param name="headerName">The name of the header that is expected.</param>
219-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
220-
public static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName) => WithHeader(check, headerName, (int?)null);
221-
222-
/// <summary>
223-
/// Asserts whether requests were made with a specific header name. Values are ignored.
224-
/// </summary>
225-
/// <param name="check">The implementation that hold all the request messages.</param>
226-
/// <param name="headerName">The name of the header that is expected.</param>
227-
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
228-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
229-
public static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, int expectedNumberOfRequests) => WithHeader(check, headerName, (int?)expectedNumberOfRequests);
230-
231-
private static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, int? expectedNumberOfRequests)
232-
{
233-
Guard.ThrowIfNull(check);
234-
Guard.ThrowIfNullOrEmpty(headerName);
235-
236-
return check.WithFilter(x => x.HasHeader(headerName), expectedNumberOfRequests, $"header '{headerName}'");
237-
}
238-
239-
/// <summary>
240-
/// Asserts whether requests were made with a specific header name and value.
241-
/// </summary>
242-
/// <param name="check">The implementation that hold all the request messages.</param>
243-
/// <param name="headerName">The name of the header that is expected.</param>
244-
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
245-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
246-
public static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue) => WithHeader(check, headerName, headerValue, null);
247-
248-
/// <summary>
249-
/// Asserts whether requests were made with a specific header name and value.
250-
/// </summary>
251-
/// <param name="check">The implementation that hold all the request messages.</param>
252-
/// <param name="headerName">The name of the header that is expected.</param>
253-
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
254-
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
255-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
256-
public static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int expectedNumberOfRequests) => WithHeader(check, headerName, headerValue, (int?)expectedNumberOfRequests);
257-
258-
private static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int? expectedNumberOfRequests)
259-
{
260-
Guard.ThrowIfNull(check);
261-
Guard.ThrowIfNullOrEmpty(headerName);
262-
Guard.ThrowIfNullOrEmpty(headerValue);
263-
264-
return check.WithFilter(x => x.HasHeader(headerName, headerValue), expectedNumberOfRequests, $"header '{headerName}' and value '{headerValue}'");
265-
}
266-
267-
/// <summary>
268-
/// Asserts whether requests were made with specific content.
269-
/// </summary>
270-
/// <param name="check">The implementation that hold all the request messages.</param>
271-
/// <param name="pattern">The expected content, supports wildcards.</param>
272-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
273-
public static IHttpRequestMessagesCheck WithContent(this IHttpRequestMessagesCheck check, string pattern) => WithContent(check, pattern, null);
274-
275-
/// <summary>
276-
/// Asserts whether requests were made with specific content.
277-
/// </summary>
278-
/// <param name="check">The implementation that hold all the request messages.</param>
279-
/// <param name="pattern">The expected content, supports wildcards.</param>
280-
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
281-
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
282-
public static IHttpRequestMessagesCheck WithContent(this IHttpRequestMessagesCheck check, string pattern, int expectedNumberOfRequests) => WithContent(check, pattern, (int?)expectedNumberOfRequests);
283-
284-
private static IHttpRequestMessagesCheck WithContent(this IHttpRequestMessagesCheck check, string pattern, int? expectedNumberOfRequests)
285-
{
286-
Guard.ThrowIfNull(check);
287-
Guard.ThrowIfNull(pattern);
288-
289-
return check.WithFilter(x => x.HasContent(pattern), expectedNumberOfRequests, $"content '{pattern}'");
290-
}
291-
292131
/// <summary>
293132
/// Asserts whether requests are made with specific json content.
294133
/// </summary>

0 commit comments

Comments
 (0)