Esempio n. 1
0
        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);
        }