React to breaking changes in RouteBuilder

This commit is contained in:
Ryan Nowak 2015-12-14 14:40:38 -08:00
parent a2393f21be
commit 1126d47b3e
4 changed files with 81 additions and 97 deletions

View File

@ -79,10 +79,9 @@ namespace Microsoft.AspNet.Builder
// We use the MvcMarkerService to make sure if all the services were added.
MvcServicesHelper.ThrowIfMvcNotRegistered(app.ApplicationServices);
var routes = new RouteBuilder
var routes = new RouteBuilder(app)
{
DefaultHandler = new MvcRouteHandler(),
ServiceProvider = app.ApplicationServices
};
configureRoutes(routes);

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.Routing;
using Microsoft.AspNet.Routing.Constraints;
@ -17,11 +18,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_Simple()
{
// Arrange
var builder = new RouteBuilder()
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
var builder = CreateRouteBuilder();
// Act
builder.MapAreaRoute(name: null, areaName: "admin", template: "site/Admin/");
@ -52,11 +49,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_Defaults()
{
// Arrange
var builder = new RouteBuilder()
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
var builder = CreateRouteBuilder();
// Act
builder.MapAreaRoute(
@ -96,11 +89,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_DefaultsAndConstraints()
{
// Arrange
var builder = new RouteBuilder()
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
var builder = CreateRouteBuilder();
// Act
builder.MapAreaRoute(
@ -146,11 +135,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_DefaultsConstraintsAndDataTokens()
{
// Arrange
var builder = new RouteBuilder()
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
var builder = CreateRouteBuilder();
// Act
builder.MapAreaRoute(
@ -203,11 +188,7 @@ namespace Microsoft.AspNet.Builder
public void MapAreaRoute_ReplacesValuesForArea()
{
// Arrange
var builder = new RouteBuilder()
{
DefaultHandler = Mock.Of<IRouter>(),
ServiceProvider = CreateServices(),
};
var builder = CreateRouteBuilder();
// Act
builder.MapAreaRoute(
@ -252,5 +233,21 @@ namespace Microsoft.AspNet.Builder
services.AddRouting();
return services.BuildServiceProvider();
}
private IRouteBuilder CreateRouteBuilder()
{
var builder = new Mock<IRouteBuilder>();
builder
.SetupGet(b => b.ServiceProvider)
.Returns(CreateServices());
builder
.SetupGet(b => b.Routes)
.Returns(new List<IRouter>());
builder
.SetupGet(b => b.DefaultHandler)
.Returns(Mock.Of<IRouter>());
return builder.Object;
}
}
}

View File

@ -10,6 +10,7 @@ using Microsoft.AspNet.Http.Internal;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Infrastructure;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.OptionsModel;
@ -31,7 +32,7 @@ namespace Microsoft.AspNet.Mvc.Routing
string expectedPath)
{
// Arrange
var httpContext = CreateHttpContext(GetServices(), appRoot);
var httpContext = CreateHttpContext(CreateServices(), appRoot);
var actionContext = CreateActionContext(httpContext);
var urlHelper = CreateUrlHelper(actionContext);
@ -56,7 +57,7 @@ namespace Microsoft.AspNet.Mvc.Routing
string expectedPath)
{
// Arrange
var httpContext = CreateHttpContext(GetServices(), appRoot);
var httpContext = CreateHttpContext(CreateServices(), appRoot);
var actionContext = CreateActionContext(httpContext);
var urlHelper = CreateUrlHelper(actionContext);
@ -266,7 +267,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithDictionary()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -286,7 +287,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithEmptyHostName()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -309,7 +310,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithEmptyProtocol()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -332,7 +333,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithNullProtocol()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -355,7 +356,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithNullProtocolAndNullHostName()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -378,7 +379,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithObjectProperties()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -392,7 +393,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithProtocol()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -413,7 +414,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrl_WithUnicodeHost_DoesNotPunyEncodeTheHost()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -435,7 +436,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithRouteNameAndDefaults()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var routeCollection = GetRouter(services, "MyRouteName", "any/url");
var urlHelper = CreateUrlHelper("/app", routeCollection);
@ -450,7 +451,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithRouteNameAndDictionary()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -471,7 +472,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithRouteNameAndObjectProperties()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -491,7 +492,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithUrlRouteContext_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
var routeContext = new UrlRouteContext()
@ -519,7 +520,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void RouteUrlWithAllParameters_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -543,7 +544,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlAction_RouteValuesAsDictionary_CaseSensitive()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// We're using a dictionary with a case-sensitive comparer and loading it with data
@ -571,7 +572,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlAction_WithUnicodeHost_DoesNotPunyEncodeTheHost()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -590,7 +591,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlRouteUrl_RouteValuesAsDictionary_CaseSensitive()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// We're using a dictionary with a case-sensitive comparer and loading it with data
@ -619,7 +620,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlActionWithUrlActionContext_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
var actionContext = new UrlActionContext()
@ -643,7 +644,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void UrlActionWithAllParameters_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -664,7 +665,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithAllParameters_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -684,7 +685,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithNullRouteName_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var urlHelper = CreateUrlHelperWithRouteCollection(services, "/app");
// Act
@ -704,7 +705,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithDefaultsAndNullRouteValues_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var routeCollection = GetRouter(services, "MyRouteName", "any/url");
var urlHelper = CreateUrlHelper("/app", routeCollection);
@ -719,7 +720,7 @@ namespace Microsoft.AspNet.Mvc.Routing
public void LinkWithCustomHostAndProtocol_ReturnsExpectedResult()
{
// Arrange
var services = GetServices();
var services = CreateServices();
var routeCollection = GetRouter(services, "MyRouteName", "any/url");
var urlHelper = CreateUrlHelper("myhost", "https", routeCollection);
@ -741,12 +742,8 @@ namespace Microsoft.AspNet.Mvc.Routing
public void Action_RouteValueInvalidation_DoesNotAffectActionAndController()
{
// Arrange
var services = GetServices();
var routeBuilder = new RouteBuilder()
{
DefaultHandler = new PassThroughRouter(),
ServiceProvider = services,
};
var services = CreateServices();
var routeBuilder = CreateRouteBuilder(services);
routeBuilder.MapRoute(
"default",
@ -786,12 +783,8 @@ namespace Microsoft.AspNet.Mvc.Routing
public void Action_RouteValueInvalidation_AffectsOtherRouteValues()
{
// Arrage
var services = GetServices();
var routeBuilder = new RouteBuilder()
{
DefaultHandler = new PassThroughRouter(),
ServiceProvider = services,
};
var services = CreateServices();
var routeBuilder = CreateRouteBuilder(services);
routeBuilder.MapRoute(
"default",
@ -834,12 +827,8 @@ namespace Microsoft.AspNet.Mvc.Routing
public void Action_RouteValueInvalidation_DoesNotAffectActionAndController_ActionPassedInRouteValues()
{
// Arrage
var services = GetServices();
var routeBuilder = new RouteBuilder()
{
DefaultHandler = new PassThroughRouter(),
ServiceProvider = services,
};
var services = CreateServices();
var routeBuilder = CreateRouteBuilder(services);
routeBuilder.MapRoute(
"default",
@ -902,7 +891,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper()
{
var services = GetServices();
var services = CreateServices();
var context = CreateHttpContext(services, string.Empty);
var actionContext = CreateActionContext(context);
@ -916,7 +905,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper(string host)
{
var services = GetServices();
var services = CreateServices();
var context = CreateHttpContext(services, string.Empty);
context.Request.Host = new HostString(host);
@ -927,7 +916,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper(string host, string protocol, IRouter router)
{
var services = GetServices();
var services = CreateServices();
var context = CreateHttpContext(services, string.Empty);
context.Request.Host = new HostString(host);
context.Request.Scheme = protocol;
@ -939,7 +928,7 @@ namespace Microsoft.AspNet.Mvc.Routing
private static UrlHelper CreateUrlHelper(string appBase, IRouter router)
{
var services = GetServices();
var services = CreateServices();
var context = CreateHttpContext(services, appBase);
var actionContext = CreateActionContext(context, router);
@ -957,27 +946,25 @@ namespace Microsoft.AspNet.Mvc.Routing
return GetRouter(services, "mockRoute", "/mockTemplate");
}
private static IServiceProvider GetServices()
private static IServiceProvider CreateServices()
{
var services = new Mock<IServiceProvider>();
var services = new ServiceCollection();
services.AddLogging();
services.AddRouting();
return services.BuildServiceProvider();
}
var optionsAccessor = new Mock<IOptions<RouteOptions>>();
optionsAccessor
.SetupGet(o => o.Value)
.Returns(new RouteOptions());
services
.Setup(s => s.GetService(typeof(IOptions<RouteOptions>)))
.Returns(optionsAccessor.Object);
private static IRouteBuilder CreateRouteBuilder(IServiceProvider services)
{
var app = new Mock<IApplicationBuilder>();
app
.SetupGet(a => a.ApplicationServices)
.Returns(services);
services
.Setup(s => s.GetService(typeof(IInlineConstraintResolver)))
.Returns(new DefaultInlineConstraintResolver(optionsAccessor.Object));
services
.Setup(s => s.GetService(typeof(ILoggerFactory)))
.Returns(NullLoggerFactory.Instance);
return services.Object;
return new RouteBuilder(app.Object)
{
DefaultHandler = new PassThroughRouter(),
};
}
private static IRouter GetRouter(
@ -985,8 +972,7 @@ namespace Microsoft.AspNet.Mvc.Routing
string mockRouteName,
string mockTemplateValue)
{
var routeBuilder = new RouteBuilder();
routeBuilder.ServiceProvider = services;
var routeBuilder = CreateRouteBuilder(services);
var target = new Mock<IRouter>(MockBehavior.Strict);
target

View File

@ -516,10 +516,12 @@ namespace Microsoft.AspNet.Mvc
private static RouteBuilder GetRouteBuilder(IServiceProvider serviceProvider)
{
var builder = new RouteBuilder
{
ServiceProvider = serviceProvider,
};
var app = new Mock<IApplicationBuilder>();
app
.SetupGet(a => a.ApplicationServices)
.Returns(serviceProvider);
var builder = new RouteBuilder(app.Object);
var handler = new Mock<IRouter>(MockBehavior.Strict);
handler