Exemplo n.º 1
0
        public void RouteData_PushStateAndThenModify_WithInitialData()
        {
            // Arrange
            var original = new RouteData();

            original.DataTokens.Add("data", "token1");
            original.Routers.Add(Mock.Of <IRouter>());
            original.Values.Add("route", "value1");

            var routeData = new RouteData(original);

            // Act
            var snapshot = routeData.PushState(
                Mock.Of <IRouter>(),
                new RouteValueDictionary(new { route = "value2" }),
                new RouteValueDictionary(new { data = "token2" }));

            routeData.DataTokens.Add("data2", "token");
            routeData.Routers.Add(Mock.Of <IRouter>());
            routeData.Values.Add("route2", "value");

            var copy = new RouteData(routeData);

            snapshot.Restore();

            // Assert
            Assert.Equal(original.DataTokens, routeData.DataTokens);
            Assert.NotEqual(routeData.DataTokens, copy.DataTokens);
            Assert.Equal(original.Routers, routeData.Routers);
            Assert.NotEqual(routeData.Routers, copy.Routers);
            Assert.Equal(original.Values, routeData.Values);
            Assert.NotEqual(routeData.Values, copy.Values);
        }
Exemplo n.º 2
0
        public override IEndpointConventionBuilder MapApiDocument(string name, string title, string description, string version)
        {
            var assembly = typeof(TModule).Assembly;

            ServiceProvider
            .GetRequiredService <SubstrateApiVisibilityConvention>()
            .Declare(assembly.FullName !, name);

            var sgo = ServiceProvider.GetRequiredService <IOptions <SwaggerGenOptions> >().Value;

            sgo.SwaggerDoc(name,
                           new Microsoft.OpenApi.Models.OpenApiInfo
            {
                Title       = title,
                Description = description,
                Version     = version,
            });

            var file = System.IO.Path.ChangeExtension(assembly.Location, "xml");

            if (System.IO.File.Exists(file))
            {
                sgo.IncludeXmlComments(file);
            }
            else
            {
                ServiceProvider
                .GetRequiredService <ILoggerFactory>()
                .CreateLogger("Microsoft.Hosting.Lifetime")
                .LogWarning($"Documentation '{file}' is not found. Specification comments will not be registered into swagger.");
            }

            var actionLazy = new ControllerActionDescriptorWrapper("Dashboard", "ApiDoc", "Display");

            return(MapRequestDelegate(
                       "/api/doc/" + name, context =>
            {
                var routeData = new RouteData();
                routeData.PushState(router: null, context.Request.RouteValues, new RouteValueDictionary());
                routeData.Values["name"] = name;
                var actionContext = new ActionContext(context, routeData, actionLazy.GetValue(context.RequestServices));

                var invoker = context.RequestServices
                              .GetRequiredService <IActionInvokerFactory>()
                              .CreateInvoker(actionContext);

                return invoker.InvokeAsync();
            })
                   .WithDisplayName($"Swagger Document ({name})")
                   .WithMetadata(new HttpMethodMetadata(new[] { "GET" })));
        }
Exemplo n.º 3
0
        public void RouteData_PushStateAndRestore_EmptyValues()
        {
            // Arrange
            var routeData = new RouteData();

            // Act
            var snapshot = routeData.PushState(null, new RouteValueDictionary(), new RouteValueDictionary());
            var copy = new RouteData(routeData);
            snapshot.Restore();

            // Assert
            Assert.Equal(routeData.DataTokens, copy.DataTokens);
            Assert.Equal(routeData.Routers, copy.Routers);
            Assert.Equal(routeData.Values, copy.Values);
        }
Exemplo n.º 4
0
        public void RouteData_PushStateAndRestore_EmptyValues()
        {
            // Arrange
            var routeData = new RouteData();

            // Act
            var snapshot = routeData.PushState(null, new RouteValueDictionary(), new RouteValueDictionary());
            var copy     = new RouteData(routeData);

            snapshot.Restore();

            // Assert
            Assert.Equal(routeData.DataTokens, copy.DataTokens);
            Assert.Equal(routeData.Routers, copy.Routers);
            Assert.Equal(routeData.Values, copy.Values);
        }
Exemplo n.º 5
0
        public void RouteData_PushStateAndRestore_NullRouteValueNotSet()
        {
            // Arrange
            var original = new RouteData();
            original.Values.Add("bleh", "16");

            var routeData = new RouteData(original);

            // Act
            var snapshot = routeData.PushState(
                null,
                new RouteValueDictionary(new { bleh = (string)null }),
                new RouteValueDictionary());
            snapshot.Restore();

            // Assert
            Assert.Equal(routeData.Values, original.Values);
        }
Exemplo n.º 6
0
        public void RouteData_PushStateAndRestore_NullRouteValueNotSet()
        {
            // Arrange
            var original = new RouteData();

            original.Values.Add("bleh", "16");

            var routeData = new RouteData(original);

            // Act
            var snapshot = routeData.PushState(
                null,
                new RouteValueDictionary(new { bleh = (string)null }),
                new RouteValueDictionary());

            snapshot.Restore();

            // Assert
            Assert.Equal(routeData.Values, original.Values);
        }
        public IErrorHandlerBuilder MapFallbackNotFound(string pattern)
        {
            var actionLazy = ActionDescriptor;

            Builder.MapFallback(actionLazy.GetPattern(pattern), context =>
            {
                context.Response.StatusCode = 404;

                var routeData = new RouteData();
                routeData.PushState(router: null, context.Request.RouteValues, new RouteValueDictionary());
                var actionContext = new ActionContext(context, routeData, actionLazy.GetValue(context.RequestServices));

                var invoker = context.RequestServices
                              .GetRequiredService <IActionInvokerFactory>()
                              .CreateInvoker(actionContext);

                return(invoker.InvokeAsync());
            })
            .WithDisplayName($"Status Code Page {pattern} (Fallback NotFound)");

            return(this);
        }
Exemplo n.º 8
0
        public void RouteData_PushStateAndThenModify()
        {
            // Arrange
            var routeData = new RouteData();

            // Act
            var snapshot = routeData.PushState(null, null, null);

            routeData.DataTokens.Add("data", "token");
            routeData.Routers.Add(Mock.Of <IRouter>());
            routeData.Values.Add("route", "value");

            var copy = new RouteData(routeData);

            snapshot.Restore();

            // Assert
            Assert.Empty(routeData.DataTokens);
            Assert.NotEqual(routeData.DataTokens, copy.DataTokens);
            Assert.Empty(routeData.Routers);
            Assert.NotEqual(routeData.Routers, copy.Routers);
            Assert.Empty(routeData.Values);
            Assert.NotEqual(routeData.Values, copy.Values);
        }
Exemplo n.º 9
0
        public void RouteData_PushStateAndThenModify_WithInitialData()
        {
            // Arrange
            var original = new RouteData();
            original.DataTokens.Add("data", "token1");
            original.Routers.Add(Mock.Of<IRouter>());
            original.Values.Add("route", "value1");

            var routeData = new RouteData(original);

            // Act
            var snapshot = routeData.PushState(
                Mock.Of<IRouter>(),
                new RouteValueDictionary(new { route = "value2" }),
                new RouteValueDictionary(new { data = "token2" }));

            routeData.DataTokens.Add("data2", "token");
            routeData.Routers.Add(Mock.Of<IRouter>());
            routeData.Values.Add("route2", "value");

            var copy = new RouteData(routeData);
            snapshot.Restore();

            // Assert
            Assert.Equal(original.DataTokens, routeData.DataTokens);
            Assert.NotEqual(routeData.DataTokens, copy.DataTokens);
            Assert.Equal(original.Routers, routeData.Routers);
            Assert.NotEqual(routeData.Routers, copy.Routers);
            Assert.Equal(original.Values, routeData.Values);
            Assert.NotEqual(routeData.Values, copy.Values);
        }
Exemplo n.º 10
0
        public void RouteData_PushStateAndThenModify()
        {
            // Arrange
            var routeData = new RouteData();

            // Act
            var snapshot = routeData.PushState(null, null, null);
            routeData.DataTokens.Add("data", "token");
            routeData.Routers.Add(Mock.Of<IRouter>());
            routeData.Values.Add("route", "value");

            var copy = new RouteData(routeData);
            snapshot.Restore();

            // Assert
            Assert.Empty(routeData.DataTokens);
            Assert.NotEqual(routeData.DataTokens, copy.DataTokens);
            Assert.Empty(routeData.Routers);
            Assert.NotEqual(routeData.Routers, copy.Routers);
            Assert.Empty(routeData.Values);
            Assert.NotEqual(routeData.Values, copy.Values);
        }