public async Task UseMiddleware_AddsMiddleware()
        {
            IServiceProvider serviceProvider = new MockServiceProvider()
                                               .With <MockMiddleware>(new MockMiddleware());
            OkraAppBuilder app = new OkraAppBuilder(serviceProvider);

            var middlewareCallList        = new List <string>();
            var middlewareCallContextList = new List <AppLaunchContext>();
            var options = new MockMiddlewareOptions(middlewareCallList, middlewareCallContextList);

            app.UseMiddleware <MockMiddleware, MockMiddlewareOptions>(options);

            app.Use(next =>
            {
                return(context =>
                {
                    middlewareCallList.Add("Next");
                    middlewareCallContextList.Add(context);
                    return next(context);
                });
            });

            var appContext = new MockAppLaunchContext();
            var pipeline   = app.Build();

            await pipeline(appContext);

            Assert.Equal(new string[] { "Middleware", "Next" }, middlewareCallList);
            Assert.Equal(new AppLaunchContext[] { appContext, appContext }, middlewareCallContextList);
        }
        public void UseMiddleware_WithNullApp_ThrowsException()
        {
            MockMiddlewareOptions options = new MockMiddlewareOptions();

            var e = Assert.Throws <ArgumentNullException>(() => UseMiddlewareExtensions.UseMiddleware <MockMiddleware, MockMiddlewareOptions>(null, options));

            Assert.Equal("app", e.ParamName);
        }