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);
        }
Esempio n. 4
0
        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)
                              );
        }