Skip to content

Latest commit

 

History

History
166 lines (118 loc) · 5.79 KB

File metadata and controls

166 lines (118 loc) · 5.79 KB

aweXpect.Web

Nuget Build Quality Gate Status 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/Testably/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/Testably/aweXpect.Web");

await Expect.That(request).HasRequestUri("https://github.com/Testably/aweXpect.Web");
await Expect.That(request).HasRequestUri(new Uri("https://github.com/Testably/aweXpect.Web"));

Header

You can verify the headers of the HttpRequestMessage:

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://github.com/Testably/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/Testably/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/Testably/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/Testably/aweXpect.Web");
await Expect.That(response).HasStatusCode().Success();
await Expect.That(response).HasStatusCode(HttpStatusCode.OK);

response = await httpClient.PostAsync("https://github.com/Testably/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/Testably/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/Testably/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/Testably/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/Testably/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.