aweXpect.Web 
Expectations for HttpClient
.
HttpRequestMessage
Method
You can verify, the method of the HttpRequestMessage
:
var request = new HttpRequestMessage(HttpMethod.Get, "https://github.com/aweXpect/aweXpect.Web");
await Expect.That(request).HasMethod(HttpMethod.Get);
Request URI
You can verify, the request URI of the HttpRequestMessage
:
var request = new HttpRequestMessage(HttpMethod.Get, "https://github.com/aweXpect/aweXpect.Web");
await Expect.That(request).HasRequestUri("https://github.com/aweXpect/aweXpect.Web");
await Expect.That(request).HasRequestUri(new Uri("https://github.com/aweXpect/aweXpect.Web"));
Header
You can verify the headers of the HttpRequestMessage
:
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://github.com/aweXpect/aweXpect.Web");
// Add headers
await Expect.That(request).HasHeader("X-GitHub-Request-Id");
await Expect.That(request).HasHeader("Cache-Control")
.WithValue("must-revalidate, max-age=0, private");
await Expect.That(request).DoesNotHaveHeader("X-My-Header");
You can also add additional expectations on the header value(s):
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://github.com/aweXpect/aweXpect.Web");
// Add headers
await Expect.That(request).HasHeader("X-GitHub-Request-Id")
.WhoseValue(value => value.IsNotEmpty());
await Expect.That(request).HasHeader("Vary")
.WhoseValues(values => values.Contains("Turbo-Frame"));
Content
You can verify, the content of the HttpRequestMessage
:
var request = new HttpRequestMessage(HttpMethod.Post, "https://github.com/aweXpect/aweXpect.Web")
{
Content = new StringContent("my aweXpect content")
};
await Expect.That(request).HasContent("*aweXpect*").AsWildcard();
You can use the same configuration options as when comparing strings.
HttpResponseMessage
Status
You can verify the status code of the HttpResponseMessage
:
HttpResponseMessage response = await httpClient.GetAsync("https://github.com/aweXpect/aweXpect.Web");
await Expect.That(response).HasStatusCode().Success();
await Expect.That(response).HasStatusCode(HttpStatusCode.OK);
response = await httpClient.PostAsync("https://github.com/aweXpect/aweXpect.Web", new StringContent(""));
await Expect.That(response).HasStatusCode().ClientError().Or.HasStatusCode().ServerError().Or.HasStatusCode().Redirection();
Header
You can verify the headers of the HttpResponseMessage
:
HttpResponseMessage response = await httpClient.GetAsync("https://github.com/aweXpect/aweXpect.Web");
await Expect.That(response).HasHeader("X-GitHub-Request-Id");
await Expect.That(response).HasHeader("Cache-Control")
.WithValue("must-revalidate, max-age=0, private");
await Expect.That(response).DoesNotHaveHeader("X-My-Header");
You can also add additional expectations on the header value(s):
HttpResponseMessage response = await httpClient.GetAsync("https://github.com/aweXpect/aweXpect.Web");
await Expect.That(response).HasHeader("X-GitHub-Request-Id")
.WhoseValue(value => value.IsNotEmpty());
await Expect.That(response).HasHeader("Vary")
.WhoseValues(values => values.Contains("Turbo-Frame"));
Content
You can verify, the content of the HttpResponseMessage
:
HttpResponseMessage response = await httpClient.GetAsync("https://github.com/aweXpect/aweXpect");
await Expect.That(response).HasContent("*aweXpect*").AsWildcard();
You can use the same configuration options as when comparing strings.
Great care was taken to provide as much information as possible, when a status verification failed.
The response could look similar to:
Expected that response
has success status code (2xx),
but it was 404 NotFound
HTTP-Request:
GET https://github.com/aweXpect/missing-repo HTTP/1.1
HTTP-Response:
404 NotFound HTTP/1.1
Server: GitHub.com
Date: Fri, 29 Nov 2024 07:55:47 GMT
Cache-Control: no-cache
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
X-GitHub-Request-Id: DB30:24038B:287F716:29D98BD:67497384
Content is binary
Problem Details
You can verify that the content contains a valid ProblemDetails object:
HttpResponseMessage response = // a call that returns a problem details object
await Expect.That(response)
.HasProblemDetailsContent("https://httpstatuses.com/404")
.WithTitle("Error: Not Found")
.WithStatus(404)
.WithInstance("93c8f977-7ff7-46ed-900f-7b6264624a31");
For all string values you can use the same configuration options as when comparing strings.