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()); }
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); }