public void CreateController_DecoratedWithViewEnhanceViewEnginesAttribute_NewControllersViewEnginesHaveCustomTransformations()
        {
            //Arrange
            var controllerFactory = new FrontendControllerFactory();

            controllerFactory.RegisterController(typeof(DummyEnhancedController).Name, typeof(DummyEnhancedController));

            var viewEngine = new RazorViewEngine();

            ViewEngines.Engines.Add(viewEngine);
            try
            {
                //Act
                var controller = (Controller)controllerFactory.CreateController(new DummyHttpContext().Request.RequestContext, "DummyEnhanced");

                //Assert
                var controllerVe = controller.ViewEngineCollection.OfType <RazorViewEngine>().FirstOrDefault();
                Assert.IsNotNull(controllerVe, "The newly created controller does not have the expected view engine.");

                Assert.IsTrue(controllerVe.ViewLocationFormats.Any(p => p.StartsWith("~/" + DummyEnhancedController.CustomControllerPath)),
                              "The newly created controller does not have its custom path in the view locations.");
            }
            finally
            {
                ViewEngines.Engines.Remove(viewEngine);
            }
        }
        public void CreateController_DummyController_NewControllerViewEnginesHaveAdditinalSearchPaths()
        {
            //Arrange
            var controllerFactory = new FrontendControllerFactory();

            controllerFactory.RegisterController(typeof(DummyController).Name, typeof(DummyController));

            var viewEngine = new RazorViewEngine();

            ViewEngines.Engines.Add(viewEngine);
            try
            {
                //Act
                var controller = (Controller)controllerFactory.CreateController(new DummyHttpContext().Request.RequestContext, "Dummy");

                //Assert
                var controllerVe = controller.ViewEngineCollection.OfType <RazorViewEngine>().FirstOrDefault();
                Assert.IsNotNull(controllerVe, "The newly created controller does not have the expected view engine.");

                var containerVp = "~/" + FrontendManager.VirtualPathBuilder.GetVirtualPath(typeof(DummyController).Assembly);
                Assert.IsTrue(controllerVe.ViewLocationFormats.Any(v => v.StartsWith(containerVp)),
                              "The newly created controller does not have its container path in the view locations.");
            }
            finally
            {
                ViewEngines.Engines.Remove(viewEngine);
            }
        }
        private ViewEngineResult ViewResultFor(string view)
        {
            var controller = new NewsController();
            var routeData  = new RouteData();

            routeData.Values["controller"] = "News";
            controller.ControllerContext   = new ControllerContext(new RequestContext(SystemManager.CurrentHttpContext, routeData), controller);
            FrontendControllerFactory.EnhanceViewEngines(controller);

            return(controller.ViewEngineCollection.FindView(controller.ControllerContext, view, null));
        }
        public void Designer_UsesPrecompiledView()
        {
            var controller = new DesignerController();
            var routeData  = new RouteData();

            routeData.Values["controller"] = "Designer";
            routeData.Values["widgetName"] = "News";
            controller.ControllerContext   = new ControllerContext(new RequestContext(SystemManager.CurrentHttpContext, routeData), controller);
            FrontendControllerFactory.EnhanceViewEngines(controller);

            var viewResult = controller.ViewEngineCollection.FindView(controller.ControllerContext, "Designer", null);

            Assert.IsNotNull(viewResult, "View result is null.");
            Assert.IsNotNull(viewResult.View, "The view was not found.");
            Assert.IsInstanceOfType <PrecompiledMvcView>(viewResult.View, "The view is not precompiled.");

            viewResult = controller.ViewEngineCollection.FindView(controller.ControllerContext, "DesignerView.Simple", null);

            Assert.IsNotNull(viewResult, "View result is null.");
            Assert.IsNotNull(viewResult.View, "The view was not found.");
            Assert.IsInstanceOfType <PrecompiledMvcView>(viewResult.View, "The view is not precompiled.");
        }