public async Task IMiddlewareBuilderExtensions_Run() { // arrange var builder = new MiddlewareBuilder <Context>(); var list = new List <string>(); // act var messageHandler = builder .Use(next => async context => { list.Add("A"); next(context); }) .Use(async context => list.Add("B")) .Run(async context => list.Add("C")) .Use(next => async context => { list.Add("D"); next(context); }) .Build(); var x = new OtherContext("bar"); await messageHandler(x); // assert Assert.Collection(list, l => Assert.Equal("A", l), l => Assert.Equal("B", l), l => Assert.Equal("C", l) ); }
public async Task IEndpointRouteBuilder_MapControllerAction_Full() { // arrange var instance = new TraceableEndpoint(); var stack = new MiddlewareBuilder <Context>() .UseRouting() .UseRoutingKey(context => context.Feature <Message>().RoutingKey, "^game-(?<action>.*)$") .UseJsonSerializer <Demo, Context>(ctx => ctx.Features.Get <Message>().Body, "message") .UseEndpoints(endpoints => { endpoints.MapControllerAction(instance, nameof(instance.ProcessMessage)); }) .Build(); // act var context = new Context(); context.Features.Set(new Message("game-ProcessMessage", "{ \"A\": \"a\", \"B\": \"b\" }")); await stack(context); // assert Assert.NotNull(instance.Message); Assert.Equal("a", instance.Message.A); Assert.Equal("b", instance.Message.B); }
public async Task IEndpointRouteBuilder_MapControllerAction_Simple() { // arrange var instance = new TestController(); var stack = new MiddlewareBuilder <Context>() .UseRouting() .UseEndpoints(endpoints => { endpoints.MapControllerAction(instance, "Foo"); }) .Build(); // act var context = new Context(); context.Features.Set(new Arguments() .With("a", "A") .With("b", "B")); var routeData = new RouteData(); routeData.Add("action", "Foo"); context.Features.Set(routeData); await stack(context); // assert Assert.Equal("AB", instance.Trace); }
public async Task IMiddlewareBuilder_UseJsonSerializer_Simple() { // arrange var instance = new TestEndpoint2(); var stack = new MiddlewareBuilder <Context>() .UseRouting() .UseJsonSerializer <Demo, Context>(ctx => ctx.Features.Get <string>(), "message") .UseEndpoints(endpoints => { endpoints.MapControllerAction(instance, "Foo"); }) .Build(); // act var context = new Context(); context.Features.Set("{ \"A\": \"a\", \"B\": \"b\" }"); var routeData = new RouteData(); routeData.Add("action", "Foo"); routeData.Add("controller", ""); context.Features.Set(routeData); await stack(context); // assert Assert.NotNull(instance.Message); Assert.Equal("a", instance.Message.A); Assert.Equal("b", instance.Message.B); }
public async Task IMiddlewareBuilderExtensions_Use_IMiddleware() { // arrange var builder = new MiddlewareBuilder <Context>(); var list = new List <string>(); // act builder.Use(new TestMiddleware <Context>(list)); var executeAsync = builder.Build(); var x = new Context(); await executeAsync(x); // assert Assert.Collection(list, l => Assert.Equal("TestMiddleware", l) ); }
public async Task IMiddlewareBuilderExtensions_Use_Lambda() { // arrange var builder = new MiddlewareBuilder <Context>(); var list = new List <string>(); // act builder.Use(async(context, next) => { list.Add("C"); await next(context); }); var executeAsync = builder.Build(); var x = new Context(); await executeAsync(x); // assert Assert.Collection(list, l => Assert.Equal("C", l) ); }
public async Task IEndpointRouteBuilder_MapController_Full(string routingKey, string expected) { // arrange var controller = new TestController(); var stack = new MiddlewareBuilder <Context>() .UseRouting() .UseRoutingKey(c => c.Feature <string>(), @"^(?<controller>.*)/(?<action>.*)$") .UseEndpoints(endpoints => { endpoints.MapController(controller); }) .Build(); // act await stack(new Context(routingKey)); // assert Assert.Equal(expected, controller.Trace); }
public async Task IMiddlewareBuilderExtensions_Use_OtherContext() { // arrange var builder = new MiddlewareBuilder <OtherContext>(); var list = new List <string>(); // act builder.Use(next => { return(async context => { list.Add(context.GetType().Name + " B " + context.Foo); await next(context); }); }); builder.Use(new TestMiddleware <OtherContext>(list)); builder.Use(async(context, next) => { list.Add(context.GetType().Name + " C " + context.Foo); await next(context); }); var executeAsync = builder.Build(); var x = new OtherContext("bar"); await executeAsync(x); // assert Assert.Collection(list, l => Assert.Equal("OtherContext B bar", l), l => Assert.Equal("TestMiddleware", l), l => Assert.Equal("OtherContext C bar", l) ); }