public void GetHttpHandler_TargetUrl_Does_Not_Contain_QueryString_When_Flag_Is_False() { // Arrange var httpContext = new Mock<HttpContextBase>(); httpContext.Setup(c => c.Request.Path).Returns("/foo"); httpContext.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/foo"); httpContext.Setup(c => c.Request.ApplicationPath).Returns("/"); var query = "?bar=baz"; httpContext.Setup(c => c.Request.QueryString).Returns(HttpUtility.ParseQueryString(query)); var requestContext = new RequestContext(httpContext.Object, new RouteData()); var sourceRouteMock = new Mock<RouteBase>(); sourceRouteMock.Setup(r => r.GetVirtualPath(It.IsAny<RequestContext>(), It.IsAny<RouteValueDictionary>())).Returns(new VirtualPathData(sourceRouteMock.Object, "/foo")); var targetRoute = new Mock<RouteBase>(); targetRoute.Setup(r => r.GetVirtualPath(It.IsAny<RequestContext>(), It.IsAny<RouteValueDictionary>())).Returns(new VirtualPathData(sourceRouteMock.Object, "/bar")); var redirectRoute = new RedirectRoute(sourceRouteMock.Object, targetRoute.Object, permanent: true); redirectRoute.IncludeQueryStringInRedirect = false; // Act var handler = redirectRoute.GetHttpHandler(requestContext); // Assert Assert.IsType(typeof(RedirectHttpHandler), handler); PAssert.IsTrue(() => !((RedirectHttpHandler)handler).TargetUrl.EndsWith(query)); }
public void GetHttpHandler_WithTargetRoute_ButRequestDoesNotMatchTargetRouteReturnsDelegateHttpHandler() { // Arrange var httpContext = new Mock<HttpContextBase>(); httpContext.Setup(c => c.Request.Path).Returns("/qux"); httpContext.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/qux"); httpContext.Setup(c => c.Request.ApplicationPath).Returns("/"); httpContext.Setup(c => c.Response.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(s => s); var routeData = new RouteData(); var requestContext = new RequestContext(httpContext.Object, new RouteData()); var targetRoute = new Route("foo/{bar}", null); var redirectRouteHandler = new RedirectRoute(null, targetRoute, permanent: false, additionalRouteValues: null); // Act var httpHandler = redirectRouteHandler.GetHttpHandler(requestContext) as DelegateHttpHandler; // Assert PAssert.IsTrue(() => httpHandler != null); }
public void GetHttpHandler_WithTargetRouteAndAdditionalRouteData_MergesAdditionalRouteValues() { // Arrange var httpContext = new Mock<HttpContextBase>(); httpContext.Setup(c => c.Request.Path).Returns("/qux"); httpContext.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/qux"); httpContext.Setup(c => c.Request.ApplicationPath).Returns("/"); httpContext.Setup(c => c.Response.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(s => s); var routeData = new RouteData(); routeData.Values.Add("bar", "the-value-of-bar"); var requestContext = new RequestContext(httpContext.Object, routeData); var targetRoute = new Route("foo/{bar}/{baz}", null); var additionalRouteValues = new RouteValueDictionary(); additionalRouteValues.Add("baz", "bizaz"); var redirectRouteHandler = new RedirectRoute(null, targetRoute, false, additionalRouteValues); // Act var httpHandler = redirectRouteHandler.GetHttpHandler(requestContext) as RedirectHttpHandler; // Assert PAssert.IsTrue(() => httpHandler.TargetUrl == "~/foo/the-value-of-bar/bizaz"); }
public void GetHttpHandler_WithQueryString_IsPreserved() { //Arrange var httpContext = new Mock<HttpContextBase>(); httpContext.Setup(c => c.Request.QueryString).Returns(new NameValueCollection { {"bar", "biz"}, {"car", "cdr"} }); var requestContext = new RequestContext(httpContext.Object, new RouteData()); var toMockBase = new Mock<RouteBase>(); toMockBase .Setup(r => r.GetVirtualPath(It.IsAny<RequestContext>(), It.IsAny<RouteValueDictionary>())) .Returns(new VirtualPathData(toMockBase.Object, "kittens")); var redirectRoute = new RedirectRoute(new Mock<RouteBase>().Object, toMockBase.Object, false); // Act var handler = redirectRoute.GetHttpHandler(requestContext); // Assert PAssert.IsTrue(() => ((RedirectHttpHandler)handler).TargetUrl == "~/kittens?bar=biz&car=cdr"); }
public void GetHttpHandler_OnRedirectionActionIsCalled() { // Arrange var onRedirectCalled = false; Action<RequestContext, RedirectRoute> onRedirection = (context, route) => onRedirectCalled = true; var httpContext = new Mock<HttpContextBase>(); httpContext.Setup(c => c.Request.Path).Returns("/foo"); httpContext.Setup(c => c.Request.AppRelativeCurrentExecutionFilePath).Returns("~/foo"); httpContext.Setup(c => c.Request.ApplicationPath).Returns("/"); var requestContext = new RequestContext(httpContext.Object, new RouteData()); var redirectRoute = new RedirectRoute(new Mock<RouteBase>().Object, new Mock<RouteBase>().Object, false, null, onRedirection); // Act redirectRoute.GetHttpHandler(requestContext); // Assert PAssert.IsTrue(() => onRedirectCalled); }