コード例 #1
0
        public async Task ExecuteAsync_StringMiddlewareIsRegistered_MiddlewareIsCalled()
        {
            var route = new CliActionRoute(
                typeof(DemoCliController),
                typeof(DemoCliController).GetMethod(nameof(DemoCliController.DoAsync)) ?? throw new InvalidOperationException(),
                new[] { "test" });

            var args = new[] { "test" };

            var router = A.Fake <ICliActionRouter>();

            A.CallTo(() => router.FindRoute(A <string[]> .Ignored)).Returns(route);

            var executor = A.Fake <ICliActionExecutor>();

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton(_ => router)
                                  .BuildServiceProvider();

            var builder = new CliActionRuntimeBuilder(router, new RoutesBuilder(),
                                                      serviceProvider, executor) as ICliActionRuntimeBuilder;

            var runtime = builder
                          .UseMiddleware <StringTestMiddleware>("TestText")
                          .UseMiddleware <CliRoutingMiddleware>()
                          .Build();

            // Act
            var result = await runtime.ExecuteAsync(args);

            // Assert
            result
            .Should()
            .Be("TestText".GetHashCode());
        }
コード例 #2
0
        public async Task ExecuteAsync_MiddlewareThrowsException_ExceptionInContextIsSet()
        {
            const int expectedReturnCode = -1357;

            var route = new CliActionRoute(
                typeof(DemoCliController),
                typeof(DemoCliController).GetMethod(nameof(DemoCliController.DoAsync))
                ?? throw new InvalidOperationException(), new[] { "test" });

            var args = new[] { "test" };

            Exception?exception = null;

            void ErrorHandler(CliActionContext x)
            {
                exception = x.Exception;
            }

            var router = A.Fake <ICliActionRouter>();

            A.CallTo(() => router.FindRoute(A <string[]> .Ignored)).Returns(route);

            var executor = A.Fake <ICliActionExecutor>();

            var serviceProvider = new ServiceCollection()
                                  .AddSingleton(_ => router)
                                  .BuildServiceProvider();

            var builder = new CliActionRuntimeBuilder(router, new RoutesBuilder(),
                                                      serviceProvider, executor) as ICliActionRuntimeBuilder;

            var runtime = builder
                          .UseExceptionHandling(ErrorHandler, expectedReturnCode)
                          .UseMiddleware <TestErrorMiddleware>()
                          .Build();

            // Act
            var result = await runtime.ExecuteAsync(args);

            // Assert
            result
            .Should()
            .Be(expectedReturnCode);

            exception
            .Should()
            .BeOfType <ApplicationException>();

            exception !.Message
            .Should()
            .Be(TestErrorMiddleware.ErrorMessage);
        }