Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

74 lines
2.8 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
using System.Web.Routing;
using System.Web.SessionState;
using Moq;
using Xunit;
using Assert = Microsoft.TestCommon.AssertEx;
namespace System.Web.Mvc.Test
{
public class MvcRouteHandlerTest
{
[Fact]
public void GetHttpHandlerReturnsMvcHandlerWithRouteData()
{
// Arrange
var routeData = new RouteData();
routeData.Values["controller"] = "controllerName";
var context = new RequestContext(new Mock<HttpContextBase>().Object, routeData);
var controllerFactory = new Mock<IControllerFactory>();
controllerFactory.Setup(f => f.GetControllerSessionBehavior(context, "controllerName"))
.Returns(SessionStateBehavior.Default)
.Verifiable();
IRouteHandler rh = new MvcRouteHandler(controllerFactory.Object);
// Act
IHttpHandler httpHandler = rh.GetHttpHandler(context);
// Assert
MvcHandler h = httpHandler as MvcHandler;
Assert.NotNull(h);
Assert.Equal(context, h.RequestContext);
}
[Fact]
public void GetHttpHandlerAsksControllerFactoryForSessionBehaviorOfController()
{
// Arrange
var httpContext = new Mock<HttpContextBase>();
var routeData = new RouteData();
routeData.Values["controller"] = "controllerName";
var requestContext = new RequestContext(httpContext.Object, routeData);
var controllerFactory = new Mock<IControllerFactory>();
controllerFactory.Setup(f => f.GetControllerSessionBehavior(requestContext, "controllerName"))
.Returns(SessionStateBehavior.ReadOnly)
.Verifiable();
IRouteHandler routeHandler = new MvcRouteHandler(controllerFactory.Object);
// Act
routeHandler.GetHttpHandler(requestContext);
// Assert
controllerFactory.Verify();
httpContext.Verify(c => c.SetSessionStateBehavior(SessionStateBehavior.ReadOnly));
}
[Fact]
public void GetHttpHandlerThrowsIfTheRouteValuesDoesNotIncludeAControllerName()
{
// Arrange
var httpContext = new Mock<HttpContextBase>();
var routeData = new RouteData();
var requestContext = new RequestContext(httpContext.Object, routeData);
IRouteHandler routeHandler = new MvcRouteHandler();
// Act & Assert
Assert.Throws<InvalidOperationException>(
() => routeHandler.GetHttpHandler(requestContext),
"The matched route does not include a 'controller' route value, which is required."
);
}
}
}