Skip to content
This repository has been archived by the owner on Dec 14, 2018. It is now read-only.

Commit

Permalink
[Fixes #3250] Remove RouteGroup from RouteValues
Browse files Browse the repository at this point in the history
  • Loading branch information
ajaybhargavb committed Oct 16, 2015
1 parent 9b00461 commit 6ef2fe4
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Core;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.AspNet.Mvc.Routing;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
Expand Down Expand Up @@ -78,6 +79,9 @@ public async Task RouteAsync(RouteContext context)
}
}

// Removing RouteGroup from RouteValues to simulate the result of conventional routing
newRouteData.Values.Remove(AttributeRouting.RouteGroupKey);

try
{
context.RouteData = newRouteData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Abstractions;
using Microsoft.AspNet.Mvc.Internal;
using Microsoft.AspNet.Mvc.Routing;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
Expand Down Expand Up @@ -111,6 +112,43 @@ public async Task RouteAsync_CreatesNewRouteData()
Assert.Equal(initialRouter, Assert.Single(context.RouteData.Routers));
}

[Fact]
public async Task RouteAsync_RemovesRouteGroupFromRouteValues()
{
// Arrange
RouteData actionRouteData = null;
var invoker = new Mock<IActionInvoker>();
invoker
.Setup(i => i.InvokeAsync())
.Returns(Task.FromResult(true));

var invokerFactory = new Mock<IActionInvokerFactory>();
invokerFactory
.Setup(f => f.CreateInvoker(It.IsAny<ActionContext>()))
.Returns<ActionContext>((c) =>
{
actionRouteData = c.RouteData;
return invoker.Object;
});

var context = CreateRouteContext(invokerFactory: invokerFactory.Object);
var handler = new MvcRouteHandler();

var originalRouteData = context.RouteData;
originalRouteData.Values.Add(AttributeRouting.RouteGroupKey, "/Home/Test");

// Act
await handler.RouteAsync(context);

// Assert
Assert.NotSame(originalRouteData, context.RouteData);
Assert.NotSame(originalRouteData, actionRouteData);
Assert.Same(actionRouteData, context.RouteData);

// The new routedata is a copy
Assert.False(context.RouteData.Values.ContainsKey(AttributeRouting.RouteGroupKey));
}

[Fact]
public async Task RouteAsync_ResetsRouteDataOnException()
{
Expand Down

0 comments on commit 6ef2fe4

Please sign in to comment.