public void MapHttpAttributeRoutes_DoesNotRegisterRoute_ForActionsWithPrefixButNoRouteTemplate() { // Arrange var config = new HttpConfiguration(); var routePrefixes = new Collection<IRoutePrefix>() { new RoutePrefixAttribute("prefix") }; var routeProviders = new Collection<RouteAttribute>() { }; SetUpConfiguration(config, routePrefixes, routeProviders); // Act config.MapHttpAttributeRoutes(); // Assert var routes = config.GetAttributeRoutes(); Assert.Empty(routes); }
public void MapHttpAttributeRoutes_DoesNotAddRoutesWithoutAttribute() { // Arrange var config = new HttpConfiguration(); var routePrefixes = new Collection<RoutePrefixAttribute>() { new RoutePrefixAttribute("prefix") }; var routeProviders = new Collection<IHttpRouteInfoProvider>() { }; SetUpConfiguration(config, routePrefixes, routeProviders); // Act config.MapHttpAttributeRoutes(); // Assert var routes = config.GetAttributeRoutes(); Assert.Empty(routes); }
public void MapHttpAttributeRoutes_AddsRouteFromAttribute(string prefix, string template, string expectedTemplate) { // Arrange var config = new HttpConfiguration(); var routePrefixes = new Collection<IRoutePrefix>(); if (prefix != null) { routePrefixes.Add(new RoutePrefixAttribute(prefix)); } var routeProviders = new Collection<RouteAttribute>() { new RouteAttribute(template) }; SetUpConfiguration(config, routePrefixes, routeProviders); // Act config.MapHttpAttributeRoutes(); // Assert var routes = config.GetAttributeRoutes(); IHttpRoute route = Assert.Single(routes); Assert.Equal(expectedTemplate, route.RouteTemplate); }
public void MapHttpAttributeRoutes_RespectsPerControllerActionSelectors() { // Arrange var globalConfiguration = new HttpConfiguration(); var _controllerDescriptor = new HttpControllerDescriptor(globalConfiguration, "PerControllerActionSelector", typeof(PerControllerActionSelectorController)); // Set up the global action selector and controller selector var controllerSelector = CreateControllerSelector(new HttpControllerDescriptor[] { _controllerDescriptor }); globalConfiguration.Services.Replace(typeof(IHttpControllerSelector), controllerSelector); var globalAction = CreateActionDescriptor("Global", new Collection<RouteAttribute>() { new RouteAttribute("Global") }); var globalActionSelector = CreateActionSelector( new Dictionary<HttpControllerDescriptor, IEnumerable<HttpActionDescriptor>>() { { _controllerDescriptor, new HttpActionDescriptor[] { globalAction } } }); globalConfiguration.Services.Replace(typeof(IHttpActionSelector), globalActionSelector); // Configure the per controller action selector to return the action with route "PerController" var perControllerAction = CreateActionDescriptor( "PerController", new Collection<RouteAttribute>() { new RouteAttribute("PerController") }); ActionSelectorConfigurationAttribute.PerControllerActionSelectorMock .Setup(a => a.GetActionMapping(_controllerDescriptor)) .Returns(new HttpActionDescriptor[] { perControllerAction }.ToLookup(ad => ad.ActionName)); // Act globalConfiguration.MapHttpAttributeRoutes(); // Assert var routes = globalConfiguration.GetAttributeRoutes(); Assert.Equal("PerController", Assert.Single(routes).RouteTemplate); }
public void MapHttpAttributeRoutes_AddsMultipleRoutesFromAttributes() { // Arrange HttpConfiguration config = new HttpConfiguration(); var routePrefixes = new Collection<IRoutePrefix>(); var routeProviders = new Collection<RouteAttribute>() { new RouteAttribute("controller/get1"), new RouteAttribute("controller/get2") }; SetUpConfiguration(config, routePrefixes, routeProviders); // Act config.MapHttpAttributeRoutes(); // Assert var routes = config.GetAttributeRoutes(); Assert.Equal(2, routes.Count); Assert.Single(routes.Where(route => route.RouteTemplate == "controller/get1")); Assert.Single(routes.Where(route => route.RouteTemplate == "controller/get2")); }
public void MapHttpAttributeRoutes_AddsOnlyOneActionToRoute_ForMultipleAttributesOnASingleAction() { // Arrange var config = new HttpConfiguration(); string routeTemplate = "api/values"; HttpControllerDescriptor controllerDescriptor = CreateControllerDescriptor(config, "Controller", new Collection<RoutePrefixAttribute>()); HttpActionDescriptor actionDescriptor = CreateActionDescriptor( "Action", new Collection<IHttpRouteInfoProvider>() { new RouteAttribute(routeTemplate), new RouteAttribute(routeTemplate) }); var controllerSelector = CreateControllerSelector(new[] { controllerDescriptor }); config.Services.Replace(typeof(IHttpControllerSelector), controllerSelector); var actionSelector = CreateActionSelector( new Dictionary<HttpControllerDescriptor, IEnumerable<HttpActionDescriptor>>() { { controllerDescriptor, new HttpActionDescriptor[] { actionDescriptor } } }); config.Services.Replace(typeof(IHttpActionSelector), actionSelector); // Act config.MapHttpAttributeRoutes(); // Assert HttpRouteCollection routes = config.GetAttributeRoutes(); IHttpRoute route = Assert.Single(routes); Assert.Equal(routeTemplate, route.RouteTemplate); Assert.Equal(actionDescriptor, Assert.Single(route.DataTokens["actions"] as ReflectedHttpActionDescriptor[])); }
public void MapHttpAttributeRoutes_RespectsRouteOrderAcrossControllers() { // Arrange var config = new HttpConfiguration(); HttpControllerDescriptor controllerDescriptor1 = CreateControllerDescriptor(config, "Controller1", new Collection<RoutePrefixAttribute>()); HttpActionDescriptor actionDescriptor1 = CreateActionDescriptor( "Action1", new Collection<IHttpRouteInfoProvider>() { new RouteAttribute("action1/route1") { RouteOrder = 3 }, new RouteAttribute("action1/route2") { RouteOrder = 1 } }); HttpControllerDescriptor controllerDescriptor2 = CreateControllerDescriptor(config, "Controller2", new Collection<RoutePrefixAttribute>()); HttpActionDescriptor actionDescriptor2 = CreateActionDescriptor( "Action2", new Collection<IHttpRouteInfoProvider>() { new RouteAttribute("action2/route1") { RouteOrder = 2 } }); var controllerSelector = CreateControllerSelector(new[] { controllerDescriptor1, controllerDescriptor2 }); config.Services.Replace(typeof(IHttpControllerSelector), controllerSelector); var actionSelector = CreateActionSelector( new Dictionary<HttpControllerDescriptor, IEnumerable<HttpActionDescriptor>>() { { controllerDescriptor1, new HttpActionDescriptor[] { actionDescriptor1 } }, { controllerDescriptor2, new HttpActionDescriptor[] { actionDescriptor2 } } }); config.Services.Replace(typeof(IHttpActionSelector), actionSelector); // Act config.MapHttpAttributeRoutes(); // Assert HttpRouteCollection routes = config.GetAttributeRoutes(); Assert.Equal(3, routes.Count); Assert.Equal("action1/route2", routes.ElementAt(0).RouteTemplate); Assert.Equal("action2/route1", routes.ElementAt(1).RouteTemplate); Assert.Equal("action1/route1", routes.ElementAt(2).RouteTemplate); }
public void MapHttpAttributeRoutes_RespectsRouteOrder() { // Arrange HttpConfiguration config = new HttpConfiguration(); var routePrefixes = new Collection<RoutePrefixAttribute>() { }; var routeProviders = new Collection<IHttpRouteInfoProvider>() { new RouteAttribute("get1") { RouteOrder = 1 }, new RouteAttribute("get2"), new RouteAttribute("get3") { RouteOrder = -1 } }; SetUpConfiguration(config, routePrefixes, routeProviders); // Act config.MapHttpAttributeRoutes(); // Assert HttpRouteCollection routes = config.GetAttributeRoutes(); Assert.Equal(3, routes.Count); Assert.Equal("get3", routes.ElementAt(0).RouteTemplate); Assert.Equal("get2", routes.ElementAt(1).RouteTemplate); Assert.Equal("get1", routes.ElementAt(2).RouteTemplate); }
public void MapHttpAttributeRoutes_DoesNotAddRoute_WhenRouteBuilderReturnsNull() { // Arrange HttpConfiguration config = new HttpConfiguration(); var routePrefixes = new Collection<RoutePrefixAttribute>(); var routeProviders = new Collection<IHttpRouteInfoProvider>() { new RouteAttribute("values") }; SetUpConfiguration(config, routePrefixes, routeProviders); var mockRouteBuilder = new Mock<HttpRouteBuilder>(); mockRouteBuilder.Setup( routeBuilder => routeBuilder.BuildHttpRoute( "values", It.IsAny<IEnumerable<ReflectedHttpActionDescriptor>>())) .Returns<IHttpRoute>(null); // Act config.MapHttpAttributeRoutes(mockRouteBuilder.Object); // Assert var routes = config.GetAttributeRoutes(); Assert.Empty(routes); }