Skip to main content
net8.0.NETStandard2.0

Web extensions for aweXpect.

Published
Mar 15, 2025
1y ago
Total Downloads
2.9K
2,933

Install

dotnet add package aweXpect.Web --version 1.0.0-pre.1
ProductVersions
.NET
net8.0
.NET Standard
netstandard2.0

README

aweXpect.Web

Changelog

Nuget Coverage Mutation testing badge

Web extensions for aweXpect.

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.

Changes from Previous Version

No structural changes between v0.6.0 and v1.0.0-pre.1.

Adoption Assessment

A verified publisher signal is available. Assess fit from the package's supported frameworks, license and dependency graph rather than popularity alone.

This version is marked prerelease. Validate its API and upgrade path before production use.Compatibility metadata lists 2 target frameworks; confirm the exact target used by your application.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.