Use Hypothesist to validate received requests (from an external invocation) via ASP.NET middleware.
Define the hypothesis:
var observer = Observer.For<string>();
Insert the middleware to test from incoming requests:
var builder = WebApplication.CreateBuilder(args);
await using var app = builder.Build();
app.MapGet("/hello", (string data) => Results.Ok());
app.Use(observer
.FromRequest()
.With(request => request.Query["data"]!));
or read from the body:
app.Use(observer
.FromRequest()
.Body(body => JsonSerializer.DeserializeAsync<Guid>(body)));
Remark: the order of middleware is very important! If you plugin the hypothesis after the body is read by other middleware, you will receive an empty stream and thus no content.
Only test for a specific route:
app.UseWhen(context => context.Request.Path == "/hello", then => then
.Use(observer
.FromRequest()
.With(request => request.Query["data"]!)));
or directly test from an endpoint filter:
app.MapPost("/hello", ([FromBody]Guid body) => Results.Ok(body))
.AddEndpointFilter(observer
.FromEndpoint()
.With(context => context.GetArgument<Guid>(0)));
Invocation on the endpoint from some external program, like:
curl 'http://localhost:1234/hello?data=some-input'
await Hypothesis
.On(observer)
.Timebox(2.Seconds());
.Any()
.Match("some-data")
.Validate();