public async Task ExecuteResultAsync_ReturnsError_IfViewCouldNotBeFound() { // Arrange var expected = string.Join(Environment.NewLine, "The view 'MyView' was not found. The following locations were searched:", "Location1", "Location2."); var actionContext = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor()); var viewEngine = new Mock<IViewEngine>(); viewEngine.Setup(v => v.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.NotFound("MyView", new[] { "Location1", "Location2" })) .Verifiable(); var viewResult = new PartialViewResult { ViewEngine = viewEngine.Object, ViewName = "MyView" }; // Act and Assert var ex = await Assert.ThrowsAsync<InvalidOperationException>( () => viewResult.ExecuteResultAsync(actionContext)); Assert.Equal(expected, ex.Message); viewEngine.Verify(); }
public async Task ExecuteResultAsync_Throws_IfViewCouldNotBeFound_MessageUsesGetViewLocations() { // Arrange var expected = string.Join( Environment.NewLine, "The view 'MyView' was not found. The following locations were searched:", "Location1", "Location2"); var actionContext = GetActionContext(); var viewEngine = new Mock<IViewEngine>(MockBehavior.Strict); viewEngine .Setup(v => v.GetView(/*executingFilePath*/ null, "MyView", /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound("MyView", new[] { "Location1", "Location2" })) .Verifiable(); viewEngine .Setup(v => v.FindView(It.IsAny<ActionContext>(), "MyView", /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound("MyView", Enumerable.Empty<string>())) .Verifiable(); var viewResult = new PartialViewResult { ViewEngine = viewEngine.Object, ViewName = "MyView", ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider()), TempData = Mock.Of<ITempDataDictionary>(), }; // Act and Assert var ex = await Assert.ThrowsAsync<InvalidOperationException>( () => viewResult.ExecuteResultAsync(actionContext)); Assert.Equal(expected, ex.Message); viewEngine.Verify(); }
public async Task PartialViewResult_UsesFindPartialViewOnSpecifiedViewEngineToLocateViews() { // Arrange var viewName = "myview"; var context = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor()); var viewEngine = new Mock<IViewEngine>(); var view = Mock.Of<IView>(); viewEngine .Setup(e => e.FindPartialView(context, "myview")) .Returns(ViewEngineResult.Found("myview", view)) .Verifiable(); var viewResult = new PartialViewResult { ViewName = viewName, ViewEngine = viewEngine.Object, ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider()), TempData = Mock.Of<ITempDataDictionary>(), }; // Act await viewResult.ExecuteResultAsync(context); // Assert viewEngine.Verify(); }
public async Task ViewResult_UsesFindPartialViewOnSpecifiedViewEngineToLocateViews() { // Arrange var viewName = "myview"; var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor()); var viewEngine = new Mock <IViewEngine>(); var view = Mock.Of <IView>(); viewEngine.Setup(e => e.FindPartialView(context, "myview")) .Returns(ViewEngineResult.Found("myview", view)) .Verifiable(); var viewResult = new PartialViewResult { ViewName = viewName, ViewEngine = viewEngine.Object }; // Act await viewResult.ExecuteResultAsync(context); // Assert viewEngine.Verify(); }
public async Task ExecuteResultAsync_FindsAndExecutesView() { // Arrange var viewName = "myview"; var context = GetActionContext(); var view = new Mock<IView>(MockBehavior.Strict); view .Setup(v => v.RenderAsync(It.IsAny<ViewContext>())) .Returns(Task.FromResult(0)) .Verifiable(); view .As<IDisposable>() .Setup(v => v.Dispose()) .Verifiable(); // Used by logging view .SetupGet(v => v.Path) .Returns("myview.cshtml"); var viewEngine = new Mock<IViewEngine>(MockBehavior.Strict); viewEngine .Setup(v => v.GetView(/*executingFilePath*/ null, "myview", /*isMainPage*/ false)) .Returns(ViewEngineResult.NotFound("myview", Enumerable.Empty<string>())) .Verifiable(); viewEngine .Setup(v => v.FindView(It.IsAny<ActionContext>(), "myview", /*isMainPage*/ false)) .Returns(ViewEngineResult.Found("myview", view.Object)) .Verifiable(); var viewResult = new PartialViewResult { ViewName = viewName, ViewEngine = viewEngine.Object, ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider()), TempData = Mock.Of<ITempDataDictionary>(), }; // Act await viewResult.ExecuteResultAsync(context); // Assert view.Verify(); viewEngine.Verify(); }
public async Task PartialViewResult_SetsContentTypeHeader( MediaTypeHeaderValue contentType, string expectedContentTypeHeaderValue) { // Arrange var viewName = "myview"; var httpContext = GetHttpContext(); var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var viewEngine = new Mock<IViewEngine>(); var view = Mock.Of<IView>(); viewEngine.Setup(e => e.FindPartialView(context, "myview")) .Returns(ViewEngineResult.Found("myview", view)); var viewResult = new PartialViewResult { ViewName = viewName, ViewEngine = viewEngine.Object, ContentType = contentType }; // Act await viewResult.ExecuteResultAsync(context); // Assert Assert.Equal(expectedContentTypeHeaderValue, httpContext.Response.ContentType); }
public async Task ExecuteResultAsync_UsesCompositeViewEngineFromServices_IfViewEngineIsNotSpecified() { // Arrange var viewName = "partial-view-name"; var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor { Name = viewName }); var viewEngine = new Mock<ICompositeViewEngine>(); viewEngine.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), viewName)) .Returns(ViewEngineResult.Found(viewName, Mock.Of<IView>())) .Verifiable(); var serviceProvider = new Mock<IServiceProvider>(); serviceProvider.Setup(p => p.GetService(typeof(ICompositeViewEngine))) .Returns(viewEngine.Object); serviceProvider.Setup(p => p.GetService(typeof(ILogger<PartialViewResult>))) .Returns(new Mock<ILogger<PartialViewResult>>().Object); serviceProvider.Setup(s => s.GetService(typeof(IOptions<MvcViewOptions>))) .Returns(() => { var optionsAccessor = new Mock<IOptions<MvcViewOptions>>(); optionsAccessor.SetupGet(o => o.Options) .Returns(new MvcViewOptions()); return optionsAccessor.Object; }); context.HttpContext.RequestServices = serviceProvider.Object; var viewResult = new PartialViewResult { ViewName = viewName }; // Act await viewResult.ExecuteResultAsync(context); // Assert viewEngine.Verify(); }
public async Task ExecuteResultAsync_UsesActionDescriptorName_IfViewNameIsNull() { // Arrange var viewName = "some-view-name"; var context = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor { Name = viewName }); var viewEngine = new Mock<ICompositeViewEngine>(); viewEngine.Setup(e => e.FindPartialView(context, viewName)) .Returns(ViewEngineResult.Found(viewName, Mock.Of<IView>())) .Verifiable(); var viewResult = new PartialViewResult { ViewEngine = viewEngine.Object }; // Act await viewResult.ExecuteResultAsync(context); // Assert viewEngine.Verify(); }
public async Task PartialViewResult_SetsStatusCode() { // Arrange var viewName = "myview"; var httpContext = GetHttpContext(); var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var viewEngine = new Mock<IViewEngine>(); var view = Mock.Of<IView>(); viewEngine .Setup(e => e.FindPartialView(context, "myview")) .Returns(ViewEngineResult.Found("myview", view)); var viewResult = new PartialViewResult { ViewName = viewName, ViewEngine = viewEngine.Object, StatusCode = 404, ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider()), TempData = Mock.Of<ITempDataDictionary>(), }; // Act await viewResult.ExecuteResultAsync(context); // Assert Assert.Equal(404, httpContext.Response.StatusCode); }