public async Task CombineAMiddlewareAndASimpleFuncShouldReturnAFuncThatCombinesThemAsync() { // Given var calls = new List <string>(); SimpleAsyncMiddlewareFunc <string, int> func = async str => { calls.Add("Func"); await Task.CompletedTask; return(str.Length); }; AsyncMiddleware <string, int> middleware = async(str, next, ct) => { calls.Add("Before"); var result = await next(str, ct); calls.Add("After"); return(result); }; var context = "Hello world!"; // When var result = await middleware.Combine(func)(context, default); // Then result.Should().Be(context.Length); calls.Should().Equal("Before", "Func", "After"); }
public static AsyncMiddlewareFunc <TContext, TResult> Combine <TContext, TResult>( this AsyncMiddleware <TContext, TResult> middleware, SimpleAsyncMiddlewareFunc <TContext, TResult> func) => (context, ct) => middleware(context, (c, _) => func(c), ct);