public void FindViewWithNullControllerContextThrows() { // Arrange TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); // Act & Assert ExceptionHelper.ExpectArgumentNullException( () => engine.FindView(null, "view name", null, false), "controllerContext" ); }
public void FindView_NullControllerContext_Throws() { // Arrange TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); // Act & Assert Assert.ThrowsArgumentNull( () => engine.FindView(null, "view name", null, false), "controllerContext" ); }
public void FindViewWithEmptyViewNameThrows() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); // Act & Assert ExceptionHelper.ExpectArgumentExceptionNullOrEmpty( () => engine.FindView(context, "", null, false), "viewName" ); }
public void FindViewControllerNameMustExistInRequestContext() { // Arrange TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); ControllerContext context = CreateContext(); context.RouteData.Values.Remove("controller"); // Act & Assert ExceptionHelper.ExpectInvalidOperationException( () => engine.FindView(context, "viewName", null, false), "The RouteData must contain an item named 'controller' with a non-empty string value." ); }
public void FindViewViewLocationsCannotBeEmpty() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.ClearViewLocations(); // Act & Assert ExceptionHelper.ExpectInvalidOperationException( () => engine.FindView(context, "viewName", null, false), "The property 'ViewLocationFormats' cannot be null or empty." ); }
public void FindView_EmptyViewName_Throws() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); // Act & Assert Assert.ThrowsArgumentNullOrEmpty( () => engine.FindView(context, "", null, false), "viewName" ); }
public void CannotFindViewNoMaster() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Expect(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", null, false); // Assert Assert.IsNull(result.View); Assert.AreEqual(1, result.SearchedLocations.Count()); Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/controllerName/viewName.view")); engine.MockPathProvider.Verify(); }
public void FindView_MasterInAreaDoesNotExist_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); context.RouteData.DataTokens["area"] = "areaName"; TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), "~/vpath/areaName/controllerName/viewName.view")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/masterName.master")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/masterName.master")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", "masterName", false); // Assert Assert.IsNull(result.View); Assert.AreEqual(2, result.SearchedLocations.Count()); // View was found, not included in 'searched locations' Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/areaName/controllerName/masterName.master")); Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/controllerName/masterName.master")); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindPartialView_AbsolutePathViewDoesNotExist_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("/foo/bar.partial")) .Returns(false) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), "")) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "/foo/bar.partial", false); // Assert Assert.IsNull(result.View); Assert.AreEqual(1, result.SearchedLocations.Count()); Assert.IsTrue(result.SearchedLocations.Contains("/foo/bar.partial")); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void ValueInCacheBypassesVirtualPathProvider() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockCache .Expect(c => c.GetViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>())) // Don't know what the key is yet .Returns((string)null) .Callback <HttpContextBase, string>((httpContext, key) => { engine.MockPathProvider // It wasn't found, so they call vpp.FileExists .Expect(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true) .AtMostOnce() .Verifiable(); engine.MockCache // Then they set the value into the cache .Expect(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), key, VIEW_VIRTUAL)) .AtMostOnce() .Verifiable(); engine.MockCache // Second time through, we give them a cache hit .Expect(c => c.GetViewLocation(It.IsAny <HttpContextBase>(), key)) .Returns(VIEW_VIRTUAL) .AtMostOnce() .Verifiable(); }) .AtMostOnce() .Verifiable(); // Act engine.FindView(context, "name", null, true); engine.FindView(context, "name", null, true); // Assert engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindView_VirtualPathViewExistsAndNoMaster_ReturnsView() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.ClearMasterLocations(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/foo/bar.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/foo/bar.view")) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "~/foo/bar.view", null, false); // Assert Assert.Same(engine.CreateViewResult, result.View); Assert.Null(result.SearchedLocations); Assert.Same(context, engine.CreateViewControllerContext); Assert.Equal("~/foo/bar.view", engine.CreateViewViewPath); Assert.Equal(String.Empty, engine.CreateViewMasterPath); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void ReleaseViewCallsDispose() { // Arrange TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); ControllerContext context = CreateContext(); IView view = engine.CreateViewResult; // Act engine.ReleaseView(context, view); // Assert Assert.True(((TestView)view).Disposed); }
public void NoValueInCacheButFileExistsReturnsNullIfUsingCache() { // Arrange ControllerContext mobileContext = CreateContext(isMobileDevice: true); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL)) .Returns(true); engine.MockPathProvider .Setup(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true); engine.MockCache .Setup(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>())) .Returns((string)null) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), It.IsAny<string>())); // Act IView viewNotInCacheResult = engine.FindView(mobileContext, "name", masterName: null, useCache: true).View; // Assert Assert.Null(viewNotInCacheResult); // On a cache miss we should never check the file system. FindView will be called on a second pass // without using the cache. engine.MockPathProvider.Verify(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL), Times.Never()); engine.MockPathProvider.Verify(vpp => vpp.FileExists(VIEW_VIRTUAL), Times.Never()); // Act & Assert //At this point the view on disk should be found and cached. Assert.NotNull(engine.FindView(mobileContext, "name", masterName: null, useCache: false).View); }
public void FindPartialView_ViewDoesNotExist_ReturnsSearchLocationsResult() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/partialName.partial")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "partialName", false); // Assert Assert.IsNull(result.View); Assert.AreEqual(1, result.SearchedLocations.Count()); Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/controllerName/partialName.partial")); engine.MockPathProvider.Verify(); }
public void FindPartialView_AbsolutePathViewExists_ReturnsView() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("/foo/bar.partial")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "/foo/bar.partial")) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "/foo/bar.partial", false); // Assert Assert.Same(engine.CreatePartialViewResult, result.View); Assert.Null(result.SearchedLocations); Assert.Same(context, engine.CreatePartialViewControllerContext); Assert.Equal("/foo/bar.partial", engine.CreatePartialViewPartialPath); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void ViewFound() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Expect(vpp => vpp.FileExists("~/vpath/controllerName/partialName.partial")) .Returns(true) .Verifiable(); engine.MockCache .Expect(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/partialName.partial")) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "partialName", false); // Assert Assert.AreSame(engine.CreatePartialViewResult, result.View); Assert.IsNull(result.SearchedLocations); Assert.AreSame(context, engine.CreatePartialViewControllerContext); Assert.AreEqual("~/vpath/controllerName/partialName.partial", engine.CreatePartialViewPartialPath); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindPartialView_VirtualPathViewExists_Legacy_ReturnsView() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine() { FileExtensions = null, // Set FileExtensions to null to simulate View Engines that do not set this property }; engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/foo/bar.unsupported")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/foo/bar.unsupported")) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "~/foo/bar.unsupported", false); // Assert Assert.Same(engine.CreatePartialViewResult, result.View); Assert.Null(result.SearchedLocations); Assert.Same(context, engine.CreatePartialViewControllerContext); Assert.Equal("~/foo/bar.unsupported", engine.CreatePartialViewPartialPath); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindPartialView_ControllerNameNotInRequestContext_Throws() { // Arrange TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); ControllerContext context = CreateContext(); context.RouteData.Values.Remove("controller"); // Act & Assert Assert.Throws<InvalidOperationException>( () => engine.FindPartialView(context, "partialName", false), "The RouteData must contain an item named 'controller' with a non-empty string value." ); }
public void FindView_MasterInAreaDoesNotExist_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); context.RouteData.DataTokens["area"] = "areaName"; TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/areaName/controllerName/viewName.view")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/viewName.Mobile.view")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/masterName.master")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/masterName.master")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", "masterName", false); // Assert Assert.Null(result.View); Assert.Equal(2, result.SearchedLocations.Count()); // View was found, not included in 'searched locations' Assert.True(result.SearchedLocations.Contains("~/vpath/areaName/controllerName/masterName.master")); Assert.True(result.SearchedLocations.Contains("~/vpath/controllerName/masterName.master")); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void ValueInCacheBypassesVirtualPathProvider() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider // It wasn't found, so they call vpp.FileExists .Expect(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true) .AtMostOnce() .Verifiable(); engine.MockCache // Then they set the value into the cache .Expect(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, virtualPath) => { engine.MockCache // Second time through, we give them a cache hit .Expect(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), key)) .Returns(VIEW_VIRTUAL) .AtMostOnce() .Verifiable(); }) .AtMostOnce() .Verifiable(); // Act engine.FindView(context, "name", null, false); // Call it once with false to seed the cache engine.FindView(context, "name", null, true); // Call it once with true to check the cache // Assert engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void UsesDifferentKeysForViewMasterAndPartial() { string keyMaster = null; string keyPartial = null; string keyView = null; // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(MASTER_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(PARTIAL_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), VIEW_VIRTUAL)) .Callback <HttpContextBase, string, string>((httpContext, key, path) => keyView = key) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), MASTER_VIRTUAL)) .Callback <HttpContextBase, string, string>((httpContext, key, path) => keyMaster = key) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), PARTIAL_VIRTUAL)) .Callback <HttpContextBase, string, string>((httpContext, key, path) => keyPartial = key) .Verifiable(); // Act engine.FindView(context, "name", "name", false); engine.FindPartialView(context, "name", false); // Assert Assert.IsNotNull(keyMaster); Assert.IsNotNull(keyPartial); Assert.IsNotNull(keyView); Assert.AreNotEqual(keyMaster, keyPartial); Assert.AreNotEqual(keyMaster, keyView); Assert.AreNotEqual(keyPartial, keyView); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); engine.MockPathProvider .Verify(vpp => vpp.FileExists(VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockPathProvider .Verify(vpp => vpp.FileExists(MASTER_VIRTUAL), Times.AtMostOnce()); engine.MockPathProvider .Verify(vpp => vpp.FileExists(PARTIAL_VIRTUAL), Times.AtMostOnce()); engine.MockCache .Verify(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache .Verify(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), MASTER_VIRTUAL), Times.AtMostOnce()); engine.MockCache .Verify(c => c.InsertViewLocation(It.IsAny <HttpContextBase>(), It.IsAny <string>(), PARTIAL_VIRTUAL), Times.AtMostOnce()); }
public void FindView_ViewExistsAndMasterNameProvidedButEmptyMasterLocations_Throws() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.ClearMasterLocations(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/viewName.view")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/viewName.Mobile.view")) .Returns(false) .Verifiable(); // Act & Assert Assert.Throws<InvalidOperationException>( () => engine.FindView(context, "viewName", "masterName", false), "The property 'MasterLocationFormats' cannot be null or empty." ); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindPartialView_AbsolutePathViewNotSupported_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "")) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "/foo/bar.unsupported", false); // Assert Assert.Null(result.View); Assert.Single(result.SearchedLocations); Assert.True(result.SearchedLocations.Contains("/foo/bar.unsupported")); engine.MockPathProvider.Verify<bool>(vpp => vpp.FileExists("/foo/bar.unsupported"), Times.Never()); engine.MockCache.Verify(); }
public void FoundViewCannotFindMaster() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Expect(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Expect(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/viewName.view")) .Verifiable(); engine.MockPathProvider .Expect(vpp => vpp.FileExists("~/vpath/controllerName/masterName.master")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", "masterName", false); // Assert Assert.IsNull(result.View); Assert.AreEqual(1, result.SearchedLocations.Count()); // View was found, not included in 'searched locations' Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/controllerName/masterName.master")); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindView_ViewInAreaExistsAndMasterExists_ReturnsView_Mobile() { // Arrange ControllerContext context = CreateContext(isMobileDevice: true); context.RouteData.DataTokens["area"] = "areaName"; TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/areaName/controllerName/viewName.view")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/viewName.Mobile.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/areaName/controllerName/viewName.Mobile.view")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/masterName.master")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/areaName/controllerName/masterName.Mobile.master")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/masterName.master")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/masterName.master")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/masterName.Mobile.master")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/masterName.Mobile.master")) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", "masterName", false); // Assert Assert.Same(engine.CreateViewResult, result.View); Assert.Null(result.SearchedLocations); Assert.Same(context, engine.CreateViewControllerContext); Assert.Equal("~/vpath/areaName/controllerName/viewName.Mobile.view", engine.CreateViewViewPath); Assert.Equal("~/vpath/controllerName/masterName.Mobile.master", engine.CreateViewMasterPath); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void ViewFoundNoMaster() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.ClearMasterLocations(); // If master is not provided, master locations can be empty engine.MockPathProvider .Expect(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Expect(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/viewName.view")) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", null, false); // Assert Assert.AreSame(engine.CreateViewResult, result.View); Assert.IsNull(result.SearchedLocations); Assert.AreSame(context, engine.CreateViewControllerContext); Assert.AreEqual("~/vpath/controllerName/viewName.view", engine.CreateViewViewPath); Assert.AreEqual(String.Empty, engine.CreateViewMasterPath); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void FindPartialView_EmptyPartialViewLocations_Throws() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.ClearPartialViewLocations(); // Act & Assert Assert.Throws<InvalidOperationException>( () => engine.FindPartialView(context, "partialName", false), "The property 'PartialViewLocationFormats' cannot be null or empty." ); }
public void UsesDifferentKeysForViewMasterAndPartial() { string keyMaster = null; string keyPartial = null; string keyView = null; // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL)) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(MASTER_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/name.Mobile.master")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(PARTIAL_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/name.Mobile.partial")) .Returns(false) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, path) => keyView = key) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), MASTER_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, path) => keyMaster = key) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), PARTIAL_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, path) => keyPartial = key) .Verifiable(); // Act engine.FindView(context, "name", "name", false); engine.FindPartialView(context, "name", false); // Assert Assert.NotNull(keyMaster); Assert.NotNull(keyPartial); Assert.NotNull(keyView); Assert.NotEqual(keyMaster, keyPartial); Assert.NotEqual(keyMaster, keyView); Assert.NotEqual(keyPartial, keyView); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); engine.MockPathProvider .Verify(vpp => vpp.FileExists(VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockPathProvider .Verify(vpp => vpp.FileExists(MASTER_VIRTUAL), Times.AtMostOnce()); engine.MockPathProvider .Verify(vpp => vpp.FileExists(PARTIAL_VIRTUAL), Times.AtMostOnce()); engine.MockCache .Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache .Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), MASTER_VIRTUAL), Times.AtMostOnce()); engine.MockCache .Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), PARTIAL_VIRTUAL), Times.AtMostOnce()); }
public void FindPartialView_VirtualPathViewDoesNotExist_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/foo/bar.partial")) .Returns(false) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "")) .Verifiable(); // Act ViewEngineResult result = engine.FindPartialView(context, "~/foo/bar.partial", false); // Assert Assert.Null(result.View); Assert.Single(result.SearchedLocations); Assert.True(result.SearchedLocations.Contains("~/foo/bar.partial")); engine.MockPathProvider.Verify(); engine.MockCache.Verify(); }
public void ValueInCacheBypassesVirtualPathProvider() { // Arrange string cacheKey = null; ControllerContext context = CreateContext(); ControllerContext mobileContext = CreateContext(isMobileDevice: true); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider // It wasn't found, so they call vpp.FileExists .Setup(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL)) .Returns(false) .Verifiable(); engine.MockCache // Then they set the value into the cache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, virtualPath) => { cacheKey = key; engine.MockCache // Second time through, we give them a cache hit .Setup(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), key)) .Returns(VIEW_VIRTUAL) .Verifiable(); }) .Verifiable(); // Act engine.FindView(context, "name", null, false); // Call it once with false to seed the cache engine.FindView(context, "name", null, true); // Call it once with true to check the cache // Assert engine.MockPathProvider.Verify(); engine.MockCache.Verify(); engine.MockPathProvider.Verify(vpp => vpp.FileExists(VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache.Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache.Verify(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), cacheKey), Times.AtMostOnce()); // We seed the cache with all possible display modes but since the mobile view does not exist we don't insert it into the cache. engine.MockPathProvider.Verify(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL), Times.Exactly(1)); engine.MockCache.Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), MOBILE_VIEW_VIRTUAL), Times.Never()); engine.MockCache.Verify(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), VirtualPathProviderViewEngine.AppendDisplayModeToCacheKey(cacheKey, DisplayModeProvider.MobileDisplayModeId)), Times.Never()); }
public void FindView_ViewDoesNotExistAndNoMaster_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", null, false); // Assert Assert.Null(result.View); Assert.Single(result.SearchedLocations); Assert.True(result.SearchedLocations.Contains("~/vpath/controllerName/viewName.view")); engine.MockPathProvider.Verify(); }
public void ValueInCacheBypassesVirtualPathProviderForAllAvailableDisplayModesForContext() { // Arrange string cacheKey = null; string mobileCacheKey = null; ControllerContext mobileContext = CreateContext(isMobileDevice: true); ControllerContext desktopContext = CreateContext(isMobileDevice: false); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(VIEW_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL)) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, virtualPath) => { cacheKey = key; engine.MockCache .Setup(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), key)) .Returns(MOBILE_VIEW_VIRTUAL) .Verifiable(); }) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), MOBILE_VIEW_VIRTUAL)) .Callback<HttpContextBase, string, string>((httpContext, key, virtualPath) => { mobileCacheKey = key; engine.MockCache .Setup(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), key)) .Returns(MOBILE_VIEW_VIRTUAL) .Verifiable(); }) .Verifiable(); // Act engine.FindView(mobileContext, "name", null, false); engine.FindView(mobileContext, "name", null, true); // Assert engine.MockPathProvider.Verify(); // DefaultDisplayMode with Mobile substitution is cached and hit on the second call to FindView engine.MockPathProvider.Verify(vpp => vpp.FileExists(MOBILE_VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache.Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), MOBILE_VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache.Verify(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), VirtualPathProviderViewEngine.AppendDisplayModeToCacheKey(cacheKey, DisplayModeProvider.MobileDisplayModeId)), Times.AtMostOnce()); engine.MockPathProvider.Verify(vpp => vpp.FileExists(VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache.Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL), Times.Exactly(1)); Assert.NotEqual(cacheKey, mobileCacheKey); // Act engine.FindView(desktopContext, "name", null, true); // Assert engine.MockCache.Verify(); // The first call to FindView without a mobile browser results in a cache hit engine.MockPathProvider.Verify(vpp => vpp.FileExists(VIEW_VIRTUAL), Times.AtMostOnce()); engine.MockCache.Verify(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), VIEW_VIRTUAL), Times.Exactly(1)); engine.MockCache.Verify(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), cacheKey), Times.Exactly(1)); }
public void DisplayModeSetOncePerRequest() { // Arrange RouteData routeData = new RouteData(); routeData.Values["controller"] = "controllerName"; routeData.Values["action"] = "actionName"; Mock<ControllerContext> mockControllerContext = new Mock<ControllerContext>(); mockControllerContext.Setup(c => c.HttpContext.Request.Browser.IsMobileDevice).Returns(true); mockControllerContext.Setup(c => c.HttpContext.Request.Cookies).Returns(new HttpCookieCollection()); mockControllerContext.Setup(c => c.HttpContext.Response.Cookies).Returns(new HttpCookieCollection()); mockControllerContext.Setup(c => c.HttpContext.Items).Returns(new Hashtable()); mockControllerContext.Setup(c => c.RouteData).Returns(routeData); ControllerContext context = mockControllerContext.Object; TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/viewName.view")) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/viewName.Mobile.view")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/partialName.partial")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/partialName.Mobile.partial")) .Returns(true) .Verifiable(); engine.MockCache .Setup(c => c.InsertViewLocation(It.IsAny<HttpContextBase>(), It.IsAny<string>(), "~/vpath/controllerName/partialName.Mobile.partial")) .Callback<HttpContextBase, string, string>((httpContext, key, virtualPath) => { engine.MockCache .Setup(c => c.GetViewLocation(It.IsAny<HttpContextBase>(), key)) .Returns("~/vpath/controllerName/partialName.Mobile.partial") .Verifiable(); }) .Verifiable(); // Act ViewEngineResult viewResult = engine.FindView(context, "viewName", masterName: null, useCache: false); // Mobile display mode will be used to locate the view with and without the cache. // In neither case should this set the DisplayModeId to Mobile because it has already been set. ViewEngineResult partialResult = engine.FindPartialView(context, "partialName", useCache: false); ViewEngineResult cachedPartialResult = engine.FindPartialView(context, "partialName", useCache: true); // Assert engine.MockPathProvider.Verify(); engine.MockCache.Verify(); Assert.Same(engine.CreateViewResult, viewResult.View); Assert.Same(engine.CreatePartialViewResult, partialResult.View); Assert.Same(engine.CreatePartialViewResult, cachedPartialResult.View); Assert.Equal(DisplayModeProvider.DefaultDisplayModeId, context.DisplayMode.DisplayModeId); }
public void FindView_ViewDoesNotExistAndMasterDoesNotExist_ReturnsSearchedLocationsResult() { // Arrange ControllerContext context = CreateContext(); TestableVirtualPathProviderViewEngine engine = new TestableVirtualPathProviderViewEngine(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/viewName.view")) .Returns(false) .Verifiable(); engine.MockPathProvider .Setup(vpp => vpp.FileExists("~/vpath/controllerName/masterName.master")) .Returns(false) .Verifiable(); // Act ViewEngineResult result = engine.FindView(context, "viewName", "masterName", false); // Assert Assert.IsNull(result.View); Assert.AreEqual(2, result.SearchedLocations.Count()); // Both view and master locations Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/controllerName/viewName.view")); Assert.IsTrue(result.SearchedLocations.Contains("~/vpath/controllerName/masterName.master")); engine.MockPathProvider.Verify(); }