Skip to content

Commit c86aa34

Browse files
committed
Deprecate HasRequestHeader and HasResponseHeader and move tests for WithHeader to HttpRequestMessageAsserter;
1 parent 7557d0c commit c86aa34

File tree

14 files changed

+381
-274
lines changed

14 files changed

+381
-274
lines changed

src/TestableHttpClient/HttpRequestMessageExtensions.cs

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,24 @@ internal static bool HasHttpMethod(this HttpRequestMessage httpRequestMessage, H
3333
return httpRequestMessage.Method == httpMethod;
3434
}
3535

36-
/// <summary>
37-
/// Determines whether a specific header is set on a request.
38-
/// </summary>
39-
/// <remarks>This method only checks headers in <see cref="HttpRequestHeaders"/></remarks>
40-
/// <param name="httpRequestMessage">A <see cref="HttpRequestMessage"/> to check the request header on.</param>
41-
/// <param name="headerName">The name of the header to locate on the request.</param>
42-
/// <returns>true when the request contains a header with the specified name; otherwise, false.</returns>
36+
internal static bool HasHeader(this HttpRequestMessage httpRequestMessage, string headerName)
37+
{
38+
Guard.ThrowIfNull(httpRequestMessage);
39+
Guard.ThrowIfNullOrEmpty(headerName);
40+
41+
return httpRequestMessage.Headers.HasHeader(headerName) || (httpRequestMessage.Content is not null && httpRequestMessage.Content.Headers.HasHeader(headerName));
42+
}
43+
44+
internal static bool HasHeader(this HttpRequestMessage httpRequestMessage, string headerName, string headerValue)
45+
{
46+
Guard.ThrowIfNull(httpRequestMessage);
47+
Guard.ThrowIfNullOrEmpty(headerName);
48+
Guard.ThrowIfNullOrEmpty(headerValue);
49+
50+
return httpRequestMessage.Headers.HasHeader(headerName, headerValue) || (httpRequestMessage.Content is not null && httpRequestMessage.Content.Headers.HasHeader(headerName, headerValue));
51+
}
52+
53+
[Obsolete("Use HasHeader instead.")]
4354
internal static bool HasRequestHeader(this HttpRequestMessage httpRequestMessage, string headerName)
4455
{
4556
Guard.ThrowIfNull(httpRequestMessage);
@@ -48,14 +59,7 @@ internal static bool HasRequestHeader(this HttpRequestMessage httpRequestMessage
4859
return httpRequestMessage.Headers.HasHeader(headerName);
4960
}
5061

51-
/// <summary>
52-
/// Determines whether a specific header with a specific value is set on a request.
53-
/// </summary>
54-
/// <remarks>This method only checks headers in <see cref="HttpRequestHeaders"/></remarks>
55-
/// <param name="httpRequestMessage">A <see cref="HttpRequestMessage"/> to check the request header on.</param>
56-
/// <param name="headerName">The name of the header to locate on the request.</param>
57-
/// <param name="headerValue">The value the header should have. Wildcard is supported.</param>
58-
/// <returns>true when the request contains a header with the specified name and value; otherwise, false.</returns>
62+
[Obsolete("Use HasHeader instead.")]
5963
internal static bool HasRequestHeader(this HttpRequestMessage httpRequestMessage, string headerName, string headerValue)
6064
{
6165
Guard.ThrowIfNull(httpRequestMessage);
@@ -65,13 +69,7 @@ internal static bool HasRequestHeader(this HttpRequestMessage httpRequestMessage
6569
return httpRequestMessage.Headers.HasHeader(headerName, headerValue);
6670
}
6771

68-
/// <summary>
69-
/// Determines whether a specific header is set on a request.
70-
/// </summary>
71-
/// <remarks>This method only checks headers in <see cref="HttpContentHeaders"/></remarks>
72-
/// <param name="httpRequestMessage">A <see cref="HttpRequestMessage"/> to check the content header on.</param>
73-
/// <param name="headerName">The name of the header to locate on the request content.</param>
74-
/// <returns>true when the request contains a header with the specified name; otherwise, false.</returns>
72+
[Obsolete("Use HasHeader instead.")]
7573
internal static bool HasContentHeader(this HttpRequestMessage httpRequestMessage, string headerName)
7674
{
7775
Guard.ThrowIfNull(httpRequestMessage);
@@ -85,14 +83,7 @@ internal static bool HasContentHeader(this HttpRequestMessage httpRequestMessage
8583
return httpRequestMessage.Content.Headers.HasHeader(headerName);
8684
}
8785

88-
/// <summary>
89-
/// Determines whether a specific header with a specific value is set on a request.
90-
/// </summary>
91-
/// <remarks>This method only checks headers in <see cref="HttpContentHeaders"/></remarks>
92-
/// <param name="httpRequestMessage">A <see cref="HttpRequestMessage"/> to check the content header on.</param>
93-
/// <param name="headerName">The name of the header to locate on the request content.</param>
94-
/// <param name="headerValue">The value the header should have. Wildcard is supported.</param>
95-
/// <returns>true when the request contains a header with the specified name and value; otherwise, false.</returns>
86+
[Obsolete("Use HasHeader instead.")]
9687
internal static bool HasContentHeader(this HttpRequestMessage httpRequestMessage, string headerName, string headerValue)
9788
{
9889
Guard.ThrowIfNull(httpRequestMessage);

src/TestableHttpClient/HttpRequestMessagesCheckExtensions.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ private static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessag
9292
/// <param name="check">The implementation that hold all the request messages.</param>
9393
/// <param name="headerName">The name of the header that is expected.</param>
9494
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
95+
[Obsolete("Use WithHeader instead.")]
9596
public static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMessagesCheck check, string headerName) => WithRequestHeader(check, headerName, (int?)null);
9697

9798
/// <summary>
@@ -102,8 +103,10 @@ private static IHttpRequestMessagesCheck WithHttpVersion(this IHttpRequestMessag
102103
/// <param name="headerName">The name of the header that is expected.</param>
103104
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
104105
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
106+
[Obsolete("Use WithHeader instead.")]
105107
public static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMessagesCheck check, string headerName, int expectedNumberOfRequests) => WithRequestHeader(check, headerName, (int?)expectedNumberOfRequests);
106108

109+
[Obsolete("Use WithHeader instead.")]
107110
private static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMessagesCheck check, string headerName, int? expectedNumberOfRequests)
108111
{
109112
Guard.ThrowIfNull(check);
@@ -120,6 +123,7 @@ private static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMess
120123
/// <param name="headerName">The name of the header that is expected.</param>
121124
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
122125
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
126+
[Obsolete("Use WithHeader instead.")]
123127
public static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue) => WithRequestHeader(check, headerName, headerValue, null);
124128

125129
/// <summary>
@@ -131,8 +135,10 @@ private static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMess
131135
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
132136
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
133137
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
138+
[Obsolete("Use WithHeader instead.")]
134139
public static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int expectedNumberOfRequests) => WithRequestHeader(check, headerName, headerValue, (int?)expectedNumberOfRequests);
135140

141+
[Obsolete("Use WithHeader instead.")]
136142
private static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int? expectedNumberOfRequests)
137143
{
138144
Guard.ThrowIfNull(check);
@@ -149,6 +155,7 @@ private static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMess
149155
/// <param name="check">The implementation that hold all the request messages.</param>
150156
/// <param name="headerName">The name of the header that is expected.</param>
151157
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
158+
[Obsolete("Use WithHeader instead.")]
152159
public static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMessagesCheck check, string headerName) => WithContentHeader(check, headerName, (int?)null);
153160

154161
/// <summary>
@@ -159,8 +166,10 @@ private static IHttpRequestMessagesCheck WithRequestHeader(this IHttpRequestMess
159166
/// <param name="headerName">The name of the header that is expected.</param>
160167
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
161168
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
169+
[Obsolete("Use WithHeader instead.")]
162170
public static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMessagesCheck check, string headerName, int expectedNumberOfRequests) => WithContentHeader(check, headerName, (int?)expectedNumberOfRequests);
163171

172+
[Obsolete("Use WithHeader instead.")]
164173
private static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMessagesCheck check, string headerName, int? expectedNumberOfRequests)
165174
{
166175
Guard.ThrowIfNull(check);
@@ -177,6 +186,7 @@ private static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMess
177186
/// <param name="headerName">The name of the header that is expected.</param>
178187
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
179188
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
189+
[Obsolete("Use WithHeader instead.")]
180190
public static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue) => WithContentHeader(check, headerName, headerValue, null);
181191

182192
/// <summary>
@@ -188,8 +198,10 @@ private static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMess
188198
/// <param name="headerValue">The value of the expected header, supports wildcards.</param>
189199
/// <param name="expectedNumberOfRequests">The expected number of requests.</param>
190200
/// <returns>The <seealso cref="IHttpRequestMessagesCheck"/> for further assertions.</returns>
201+
[Obsolete("Use WithHeader instead.")]
191202
public static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int expectedNumberOfRequests) => WithContentHeader(check, headerName, headerValue, (int?)expectedNumberOfRequests);
192203

204+
[Obsolete("Use WithHeader instead.")]
193205
private static IHttpRequestMessagesCheck WithContentHeader(this IHttpRequestMessagesCheck check, string headerName, string headerValue, int? expectedNumberOfRequests)
194206
{
195207
Guard.ThrowIfNull(check);
@@ -221,7 +233,7 @@ private static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesChe
221233
Guard.ThrowIfNull(check);
222234
Guard.ThrowIfNullOrEmpty(headerName);
223235

224-
return check.WithFilter(x => x.HasRequestHeader(headerName) || x.HasContentHeader(headerName), expectedNumberOfRequests, $"header '{headerName}'");
236+
return check.WithFilter(x => x.HasHeader(headerName), expectedNumberOfRequests, $"header '{headerName}'");
225237
}
226238

227239
/// <summary>
@@ -249,7 +261,7 @@ private static IHttpRequestMessagesCheck WithHeader(this IHttpRequestMessagesChe
249261
Guard.ThrowIfNullOrEmpty(headerName);
250262
Guard.ThrowIfNullOrEmpty(headerValue);
251263

252-
return check.WithFilter(x => x.HasRequestHeader(headerName, headerValue) || x.HasContentHeader(headerName, headerValue), expectedNumberOfRequests, $"header '{headerName}' and value '{headerValue}'");
264+
return check.WithFilter(x => x.HasHeader(headerName, headerValue), expectedNumberOfRequests, $"header '{headerName}' and value '{headerValue}'");
253265
}
254266

255267
/// <summary>
@@ -319,7 +331,7 @@ private static IHttpRequestMessagesCheck WithJsonContent(this IHttpRequestMessag
319331

320332
var jsonString = JsonSerializer.Serialize(jsonObject, jsonSerializerOptions ?? check.Options.JsonSerializerOptions);
321333

322-
return check.WithFilter(x => x.HasContent(jsonString) && x.HasContentHeader("Content-Type", "application/json*"), expectedNumberOfRequests, $"json content '{jsonString}'");
334+
return check.WithFilter(x => x.HasContent(jsonString) && x.HasHeader("Content-Type", "application/json*"), expectedNumberOfRequests, $"json content '{jsonString}'");
323335
}
324336

325337
/// <summary>
@@ -347,6 +359,6 @@ private static IHttpRequestMessagesCheck WithFormUrlEncodedContent(this IHttpReq
347359
using var content = new FormUrlEncodedContent(nameValueCollection);
348360
var contentString = content.ReadAsStringAsync().Result;
349361

350-
return check.WithFilter(x => x.HasContent(contentString) && x.HasContentHeader("Content-Type", "application/x-www-form-urlencoded*"), expectedNumberOfRequests, $"form url encoded content '{contentString}'");
362+
return check.WithFilter(x => x.HasContent(contentString) && x.HasHeader("Content-Type", "application/x-www-form-urlencoded*"), expectedNumberOfRequests, $"form url encoded content '{contentString}'");
351363
}
352364
}

test/TestableHttpClient.IntegrationTests/AssertingRequests.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -117,20 +117,20 @@ public async Task AssertingHttpMethods()
117117
}
118118

119119
[Fact]
120-
public async Task AssertingRequestHeaders()
120+
public async Task AssertingHeaders()
121121
{
122122
using TestableHttpMessageHandler testHandler = new();
123123
using HttpClient client = new(testHandler);
124124
client.DefaultRequestHeaders.Add("api-version", "1.0");
125125
_ = await client.GetAsync("https://httpbin.org/get", TestContext.Current.CancellationToken);
126126

127-
testHandler.ShouldHaveMadeRequests().WithRequestHeader("api-version");
128-
testHandler.ShouldHaveMadeRequests().WithRequestHeader("api-version", "1.0");
129-
testHandler.ShouldHaveMadeRequests().WithRequestHeader("api-version", "1*");
127+
testHandler.ShouldHaveMadeRequests().WithHeader("api-version");
128+
testHandler.ShouldHaveMadeRequests().WithHeader("api-version", "1.0");
129+
testHandler.ShouldHaveMadeRequests().WithHeader("api-version", "1*");
130130

131-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestHeader("my-version"));
132-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestHeader("api-version", "1"));
133-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithRequestHeader("api-version", "2*"));
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*"));
134134
}
135135

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

145-
testHandler.ShouldHaveMadeRequests().WithContentHeader("content-type");
146-
testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Type");
147-
testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Type", "application/json; charset=utf-8");
148-
testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Type", "application/json*");
149-
testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Type", "*charset=utf-8");
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");
150150

151-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Disposition"));
152-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Type", "application/json"));
153-
Assert.Throws<HttpRequestMessageAssertionException>(() => testHandler.ShouldHaveMadeRequests().WithContentHeader("Content-Type", "*=utf-16"));
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"));
154154
}
155155

156156
[Fact]

test/TestableHttpClient.IntegrationTests/CreatingClients.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public async Task CreateClientWithConfiguration()
2323

2424
await client.GetAsync("https://httpbin.org/get", TestContext.Current.CancellationToken);
2525

26-
testableHttpMessageHandler.ShouldHaveMadeRequests().WithRequestHeader("test", "test");
26+
testableHttpMessageHandler.ShouldHaveMadeRequests().WithHeader("test", "test");
2727
}
2828

2929
[Fact]

0 commit comments

Comments
 (0)