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