Пример #1
0
    private static TreeRouteBuilder CreateBuilder()
    {
        var objectPoolProvider = new DefaultObjectPoolProvider();
        var objectPolicy = new UriBuilderContextPooledObjectPolicy();
        var objectPool = objectPoolProvider.Create(objectPolicy);

        var constraintResolver = GetInlineConstraintResolver();
        var builder = new TreeRouteBuilder(
            NullLoggerFactory.Instance,
            objectPool,
            constraintResolver);
        return builder;
    }
Пример #2
0
        private static TreeRouteBuilder CreateBuilder()
        {
            var objectPoolProvider = new DefaultObjectPoolProvider();
            var objectPolicy       = new UriBuilderContextPooledObjectPolicy(UrlEncoder.Default);
            var objectPool         = objectPoolProvider.Create <UriBuildingContext>(objectPolicy);

            var constraintResolver = Mock.Of <IInlineConstraintResolver>();
            var builder            = new TreeRouteBuilder(
                NullLoggerFactory.Instance,
                UrlEncoder.Default,
                objectPool,
                constraintResolver);

            return(builder);
        }
Пример #3
0
        private static TreeRouteBuilder CreateBuilder()
        {
            var objectPoolProvider = new DefaultObjectPoolProvider();
            var objectPolicy       = new UriBuilderContextPooledObjectPolicy();
            var objectPool         = objectPoolProvider.Create(objectPolicy);

            var constraintResolver = GetInlineConstraintResolver();

#pragma warning disable CS0618 // Type or member is obsolete
            var builder = new TreeRouteBuilder(
                NullLoggerFactory.Instance,
                objectPool,
                constraintResolver);
#pragma warning restore CS0618 // Type or member is obsolete
            return(builder);
        }
Пример #4
0
        private static AttributeRoute CreateRoute(
            IRouter handler,
            IActionDescriptorCollectionProvider actionDescriptorProvider)
        {
            var constraintResolver = new Mock <IInlineConstraintResolver>();

            constraintResolver
            .Setup(c => c.ResolveConstraint("int"))
            .Returns(new IntRouteConstraint());

            var policy = new UriBuilderContextPooledObjectPolicy(new UrlTestEncoder());
            var pool   = new DefaultObjectPool <UriBuildingContext>(policy);

            var route = new AttributeRoute(
                handler,
                actionDescriptorProvider,
                constraintResolver.Object,
                pool,
                new UrlTestEncoder(),
                NullLoggerFactory.Instance);

            return(route);
        }
Пример #5
0
        public async Task AttributeRoute_UsesUpdatedActionDescriptors()
        {
            // Arrange
            var handler = new Mock <IRouter>(MockBehavior.Strict);

            handler
            .Setup(h => h.RouteAsync(It.IsAny <RouteContext>()))
            .Callback <RouteContext>(c => c.Handler = NullHandler)
            .Returns(Task.FromResult(true))
            .Verifiable();

            var actionDescriptors = new List <ActionDescriptor>()
            {
                new ActionDescriptor()
                {
                    AttributeRouteInfo = new AttributeRouteInfo()
                    {
                        Template = "api/Blog/{id}"
                    },
                    RouteConstraints = new List <RouteDataActionConstraint>()
                    {
                        new RouteDataActionConstraint(TreeRouter.RouteGroupKey, "1"),
                    },
                },
                new ActionDescriptor()
                {
                    AttributeRouteInfo = new AttributeRouteInfo()
                    {
                        Template = "api/Store/Buy/{id}"
                    },
                    RouteConstraints = new List <RouteDataActionConstraint>()
                    {
                        new RouteDataActionConstraint(TreeRouter.RouteGroupKey, "2"),
                    },
                },
            };

            var actionDescriptorProvider = new Mock <IActionDescriptorCollectionProvider>(MockBehavior.Strict);

            actionDescriptorProvider
            .SetupGet(ad => ad.ActionDescriptors)
            .Returns(new ActionDescriptorCollection(actionDescriptors, version: 1));

            var policy = new UriBuilderContextPooledObjectPolicy(new UrlTestEncoder());
            var pool   = new DefaultObjectPool <UriBuildingContext>(policy);

            var route = new AttributeRoute(
                handler.Object,
                actionDescriptorProvider.Object,
                Mock.Of <IInlineConstraintResolver>(),
                pool,
                new UrlTestEncoder(),
                NullLoggerFactory.Instance);

            var requestServices = new Mock <IServiceProvider>(MockBehavior.Strict);

            requestServices
            .Setup(s => s.GetService(typeof(ILoggerFactory)))
            .Returns(NullLoggerFactory.Instance);

            var httpContext = new DefaultHttpContext();

            httpContext.Request.Path    = new PathString("/api/Store/Buy/5");
            httpContext.RequestServices = requestServices.Object;

            var context = new RouteContext(httpContext);

            // Act 1
            await route.RouteAsync(context);

            // Assert 1
            Assert.NotNull(context.Handler);
            Assert.Equal("5", context.RouteData.Values["id"]);
            Assert.Equal("2", context.RouteData.Values[TreeRouter.RouteGroupKey]);

            handler.Verify(h => h.RouteAsync(It.IsAny <RouteContext>()), Times.Once());

            // Arrange 2 - remove the action and update the collection
            actionDescriptors.RemoveAt(1);
            actionDescriptorProvider
            .SetupGet(ad => ad.ActionDescriptors)
            .Returns(new ActionDescriptorCollection(actionDescriptors, version: 2));

            context = new RouteContext(httpContext);

            // Act 2
            await route.RouteAsync(context);

            // Assert 2
            Assert.Null(context.Handler);
            Assert.Empty(context.RouteData.Values);

            handler.Verify(h => h.RouteAsync(It.IsAny <RouteContext>()), Times.Once());
        }
Пример #6
0
        public async Task AttributeRoute_UsesUpdatedActionDescriptors()
        {
            // Arrange
            var handler = new Mock<IRouter>(MockBehavior.Strict);
            handler
                .Setup(h => h.RouteAsync(It.IsAny<RouteContext>()))
                .Callback<RouteContext>(c => c.Handler = NullHandler)
                .Returns(Task.FromResult(true))
                .Verifiable();

            var actionDescriptors = new List<ActionDescriptor>()
            {
                new ActionDescriptor()
                {
                    AttributeRouteInfo = new AttributeRouteInfo()
                    {
                        Template = "api/Blog/{id}"
                    },
                    RouteConstraints = new List<RouteDataActionConstraint>()
                    {
                        new RouteDataActionConstraint(TreeRouter.RouteGroupKey, "1"),
                    },
                },
                new ActionDescriptor()
                {
                    AttributeRouteInfo = new AttributeRouteInfo()
                    {
                        Template = "api/Store/Buy/{id}"
                    },
                    RouteConstraints = new List<RouteDataActionConstraint>()
                    {
                        new RouteDataActionConstraint(TreeRouter.RouteGroupKey, "2"),
                    },
                },
            };

            var actionDescriptorProvider = new Mock<IActionDescriptorCollectionProvider>(MockBehavior.Strict);
            actionDescriptorProvider
                .SetupGet(ad => ad.ActionDescriptors)
                .Returns(new ActionDescriptorCollection(actionDescriptors, version: 1));

            var policy = new UriBuilderContextPooledObjectPolicy(new UrlTestEncoder());
            var pool = new DefaultObjectPool<UriBuildingContext>(policy);

            var route = new AttributeRoute(
                handler.Object,
                actionDescriptorProvider.Object,
                Mock.Of<IInlineConstraintResolver>(),
                pool,
                new UrlTestEncoder(),
                NullLoggerFactory.Instance);

            var requestServices = new Mock<IServiceProvider>(MockBehavior.Strict);
            requestServices
                .Setup(s => s.GetService(typeof(ILoggerFactory)))
                .Returns(NullLoggerFactory.Instance);

            var httpContext = new DefaultHttpContext();
            httpContext.Request.Path = new PathString("/api/Store/Buy/5");
            httpContext.RequestServices = requestServices.Object;

            var context = new RouteContext(httpContext);

            // Act 1
            await route.RouteAsync(context);

            // Assert 1
            Assert.NotNull(context.Handler);
            Assert.Equal("5", context.RouteData.Values["id"]);
            Assert.Equal("2", context.RouteData.Values[TreeRouter.RouteGroupKey]);

            handler.Verify(h => h.RouteAsync(It.IsAny<RouteContext>()), Times.Once());

            // Arrange 2 - remove the action and update the collection
            actionDescriptors.RemoveAt(1);
            actionDescriptorProvider
                .SetupGet(ad => ad.ActionDescriptors)
                .Returns(new ActionDescriptorCollection(actionDescriptors, version: 2));

            context = new RouteContext(httpContext);

            // Act 2
            await route.RouteAsync(context);

            // Assert 2
            Assert.Null(context.Handler);
            Assert.Empty(context.RouteData.Values);

            handler.Verify(h => h.RouteAsync(It.IsAny<RouteContext>()), Times.Once());
        }
        private static IServiceProvider GetServices()
        {
            var services = new Mock <IServiceProvider>();

            var routeOptions = new RouteOptions();

            routeOptions.ConstraintMap.Add("exists", typeof(KnownRouteValueConstraint));

            var optionsAccessor = new Mock <IOptions <RouteOptions> >();

            optionsAccessor
            .SetupGet(o => o.Value)
            .Returns(routeOptions);
            services
            .Setup(s => s.GetService(typeof(IOptions <RouteOptions>)))
            .Returns(optionsAccessor.Object);

            services
            .Setup(s => s.GetService(typeof(IInlineConstraintResolver)))
            .Returns(new DefaultInlineConstraintResolver(optionsAccessor.Object));

            services
            .Setup(s => s.GetService(typeof(ILoggerFactory)))
            .Returns(new LoggerFactory());

            services
            .Setup(s => s.GetService(typeof(IActionContextAccessor)))
            .Returns(new ActionContextAccessor()
            {
                ActionContext = new ActionContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        RequestServices = services.Object,
                    },
                    RouteData = new RouteData(),
                },
            });

            var actionDescriptorCollectionProvider = new ActionDescriptorCollectionProvider(services.Object);

            services
            .Setup(s => s.GetService(typeof(IActionDescriptorCollectionProvider)))
            .Returns(actionDescriptorCollectionProvider);

            services
            .Setup(s => s.GetService(typeof(IEnumerable <IActionDescriptorProvider>)))
            .Returns(TestInit.GetActionDescriptorProviders());

            services
            .Setup(s => s.GetService(typeof(RoutingMarkerService)))
            .Returns(new RoutingMarkerService());

            services
            .Setup(s => s.GetService(typeof(UrlEncoder)))
            .Returns(UrlEncoder.Default);

            services
            .Setup(s => s.GetService(typeof(IExpressionRouteHelper)))
            .Returns(new ExpressionRouteHelper(actionDescriptorCollectionProvider, new UniqueRouteKeysProvider()));

            var objectPoolProvider = new DefaultObjectPoolProvider();
            var objectPolicy       = new UriBuilderContextPooledObjectPolicy(UrlEncoder.Default);
            var objectPool         = objectPoolProvider.Create(objectPolicy);

            services
            .Setup(s => s.GetService(typeof(ObjectPool <UriBuildingContext>)))
            .Returns(objectPool);

            return(services.Object);
        }
Пример #8
0
        private static AttributeRoute CreateRoute(
            IRouter handler, 
            IActionDescriptorCollectionProvider actionDescriptorProvider)
        {
            var constraintResolver = new Mock<IInlineConstraintResolver>();
            constraintResolver
                .Setup(c => c.ResolveConstraint("int"))
                .Returns(new IntRouteConstraint());

            var policy = new UriBuilderContextPooledObjectPolicy(new UrlTestEncoder());
            var pool = new DefaultObjectPool<UriBuildingContext>(policy);

            var route = new AttributeRoute(
                handler,
                actionDescriptorProvider,
                constraintResolver.Object,
                pool,
                new UrlTestEncoder(),
                NullLoggerFactory.Instance);

            return route;
        }