From 1126d47b3ec138a01cc0d4690e1b26cc8dbebf67 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Mon, 14 Dec 2015 14:40:38 -0800 Subject: [PATCH] React to breaking changes in RouteBuilder --- .../MvcApplicationBuilderExtensions.cs | 3 +- .../MvcAreaRouteBuilderExtensionsTest.cs | 47 ++++--- .../Routing/UrlHelperTest.cs | 118 ++++++++---------- .../RemoteAttributeTest.cs | 10 +- 4 files changed, 81 insertions(+), 97 deletions(-) diff --git a/src/Microsoft.AspNet.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs b/src/Microsoft.AspNet.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs index 452fbb7402..383240b0a8 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Builder/MvcApplicationBuilderExtensions.cs @@ -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); diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs index 153d320488..41be5478a6 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs @@ -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(), - 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(), - 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(), - 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(), - 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(), - 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(); + builder + .SetupGet(b => b.ServiceProvider) + .Returns(CreateServices()); + builder + .SetupGet(b => b.Routes) + .Returns(new List()); + builder + .SetupGet(b => b.DefaultHandler) + .Returns(Mock.Of()); + + return builder.Object; + } } } diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Routing/UrlHelperTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Routing/UrlHelperTest.cs index 389b22d912..8483d88d17 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Routing/UrlHelperTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Routing/UrlHelperTest.cs @@ -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(); + var services = new ServiceCollection(); + services.AddLogging(); + services.AddRouting(); + return services.BuildServiceProvider(); + } - var optionsAccessor = new Mock>(); - optionsAccessor - .SetupGet(o => o.Value) - .Returns(new RouteOptions()); - services - .Setup(s => s.GetService(typeof(IOptions))) - .Returns(optionsAccessor.Object); + private static IRouteBuilder CreateRouteBuilder(IServiceProvider services) + { + var app = new Mock(); + 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(MockBehavior.Strict); target diff --git a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/RemoteAttributeTest.cs b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/RemoteAttributeTest.cs index 6a3edf93fd..2e317e18ea 100644 --- a/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/RemoteAttributeTest.cs +++ b/test/Microsoft.AspNet.Mvc.ViewFeatures.Test/RemoteAttributeTest.cs @@ -516,10 +516,12 @@ namespace Microsoft.AspNet.Mvc private static RouteBuilder GetRouteBuilder(IServiceProvider serviceProvider) { - var builder = new RouteBuilder - { - ServiceProvider = serviceProvider, - }; + var app = new Mock(); + app + .SetupGet(a => a.ApplicationServices) + .Returns(serviceProvider); + + var builder = new RouteBuilder(app.Object); var handler = new Mock(MockBehavior.Strict); handler