public void FindPartialView_ReturnsNotFound_IfAllViewEnginesReturnNotFound() { // Arrange var viewName = "foo"; var engine1 = new Mock <IViewEngine>(); var engine2 = new Mock <IViewEngine>(); var engine3 = new Mock <IViewEngine>(); engine1.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "1", "2" })); engine2.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "3" })); engine3.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "4", "5" })); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine1.Object); optionsAccessor.Options.ViewEngines.Add(engine2.Object); optionsAccessor.Options.ViewEngines.Add(engine3.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of <ITypeActivatorCache>(), Mock.Of <IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.False(result.Success); Assert.Equal(new[] { "1", "2", "3", "4", "5" }, result.SearchedLocations); }
public void ViewEngines_ReturnsInstantiatedListOfViewEngines() { // Arrange var service = Mock.Of <ITestService>(); var viewEngine = Mock.Of <IViewEngine>(); var type = typeof(TestViewEngine); var serviceProvider = new Mock <IServiceProvider>(); serviceProvider.Setup(p => p.GetService(typeof(ITestService))) .Returns(service); var typeActivatorCache = new DefaultTypeActivatorCache(); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(viewEngine); optionsAccessor.Options.ViewEngines.Add(type); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, typeActivatorCache, serviceProvider.Object); // Act var result = compositeViewEngine.ViewEngines; // Assert Assert.Collection(result, actual => Assert.Same(viewEngine, actual), actual => { var testViewEngine = Assert.IsType <TestViewEngine>(actual); Assert.Same(service, testViewEngine.Service); }); }
public void FindPartialView_ReturnsViewFromFirstViewEngineWithFoundResult() { // Arrange var viewName = "bar"; var engine1 = new Mock <IViewEngine>(); var engine2 = new Mock <IViewEngine>(); var engine3 = new Mock <IViewEngine>(); var view2 = Mock.Of <IView>(); var view3 = Mock.Of <IView>(); engine1.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound(viewName, Enumerable.Empty <string>())); engine2.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.Found(viewName, view2)); engine3.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.Found(viewName, view3)); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine1.Object); optionsAccessor.Options.ViewEngines.Add(engine2.Object); optionsAccessor.Options.ViewEngines.Add(engine3.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of <ITypeActivatorCache>(), Mock.Of <IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.True(result.Success); Assert.Same(view2, result.View); Assert.Equal(viewName, result.ViewName); }
public void ViewEngines_ReturnsInstantiatedListOfViewEngines() { // Arrange var service = Mock.Of<ITestService>(); var viewEngine = Mock.Of<IViewEngine>(); var type = typeof(TestViewEngine); var serviceProvider = new Mock<IServiceProvider>(); serviceProvider.Setup(p => p.GetService(typeof(ITestService))) .Returns(service); var typeActivatorCache = new DefaultTypeActivatorCache(); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(viewEngine); optionsAccessor.Options.ViewEngines.Add(type); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, typeActivatorCache, serviceProvider.Object); // Act var result = compositeViewEngine.ViewEngines; // Assert Assert.Collection(result, actual => Assert.Same(viewEngine, actual), actual => { var testViewEngine = Assert.IsType<TestViewEngine>(actual); Assert.Same(service, testViewEngine.Service); }); }
private static ActionContext CreateMockActionContext( IEnumerable <IOutputFormatter> outputFormatters, HttpResponse response = null, string requestAcceptHeader = "application/*", string requestContentType = "application/json", string requestAcceptCharsetHeader = "", bool respectBrowserAcceptHeader = false, bool setupActionBindingContext = true) { var httpContext = new Mock <HttpContext>(); if (response != null) { httpContext.Setup(o => o.Response).Returns(response); } var content = "{name: 'Person Name', Age: 'not-an-age'}"; var contentBytes = Encoding.UTF8.GetBytes(content); var request = new DefaultHttpContext().Request; request.Headers["Accept-Charset"] = requestAcceptCharsetHeader; request.Headers["Accept"] = requestAcceptHeader; request.ContentType = requestContentType; request.Body = new MemoryStream(contentBytes); httpContext.Setup(o => o.Request).Returns(request); httpContext.Setup(o => o.RequestServices).Returns(GetServiceProvider()); var optionsAccessor = new MockMvcOptionsAccessor(); foreach (var formatter in outputFormatters) { optionsAccessor.Options.OutputFormatters.Add(formatter); } optionsAccessor.Options.RespectBrowserAcceptHeader = respectBrowserAcceptHeader; httpContext.Setup(o => o.RequestServices.GetService(typeof(IOptions <MvcOptions>))) .Returns(optionsAccessor); httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger <ObjectResult>))) .Returns(new Mock <ILogger <ObjectResult> >().Object); ActionBindingContext actionBindingContext = null; if (setupActionBindingContext) { actionBindingContext = new ActionBindingContext { OutputFormatters = outputFormatters.ToList() }; } httpContext.Setup(o => o.RequestServices.GetService(typeof(IActionBindingContextAccessor))) .Returns(new ActionBindingContextAccessor() { ActionBindingContext = actionBindingContext }); return(new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor())); }
public void FindPartialView_ReturnsNotFoundResult_WhenNoViewEnginesAreRegistered() { // Arrange var viewName = "my-partial-view"; var optionsAccessor = new MockMvcOptionsAccessor(); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of <ITypeActivatorCache>(), Mock.Of <IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.False(result.Success); Assert.Empty(result.SearchedLocations); }
private static DefaultControllerActionArgumentBinder GetArgumentBinder(IObjectModelValidator validator = null) { var options = new MockMvcOptionsAccessor(); options.Options.MaxModelValidationErrors = 5; if (validator == null) { var mockValidator = new Mock <IObjectModelValidator>(MockBehavior.Strict); mockValidator.Setup(o => o.Validate(It.IsAny <ModelValidationContext>())); validator = mockValidator.Object; } return(new DefaultControllerActionArgumentBinder( TestModelMetadataProvider.CreateDefaultProvider(), validator, options)); }
public void FindView_ReturnsNotFoundResult_WhenNoViewEnginesAreRegistered() { // Arrange var viewName = "test-view"; var actionContext = GetActionContext(); var optionsAccessor = new MockMvcOptionsAccessor(); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of<ITypeActivatorCache>(), Mock.Of<IServiceProvider>()); // Act var result = compositeViewEngine.FindView(actionContext, viewName); // Assert Assert.False(result.Success); Assert.Empty(result.SearchedLocations); }
public void FindView_ReturnsNotFoundResult_WhenExactlyOneViewEngineIsRegisteredWhichReturnsNotFoundResult() { // Arrange var viewName = "test-view"; var engine = new Mock<IViewEngine>(); engine.Setup(e => e.FindView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "controller/test-view" })); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of<ITypeActivatorCache>(), Mock.Of<IServiceProvider>()); // Act var result = compositeViewEngine.FindView(GetActionContext(), viewName); // Assert Assert.False(result.Success); Assert.Equal(new[] { "controller/test-view" }, result.SearchedLocations); }
private IServiceProvider CreateServices() { var services = new ServiceCollection(); services.Add(new ServiceDescriptor( typeof(ILogger<ObjectResult>), new Logger<ObjectResult>(NullLoggerFactory.Instance))); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter()); services.Add(new ServiceDescriptor(typeof(IOptions<MvcOptions>), optionsAccessor)); var bindingContext = new ActionBindingContext { OutputFormatters = optionsAccessor.Options.OutputFormatters, }; var bindingContextAccessor = new ActionBindingContextAccessor { ActionBindingContext = bindingContext, }; services.Add(new ServiceDescriptor(typeof(IActionBindingContextAccessor), bindingContextAccessor)); return services.BuildServiceProvider(); }
public void FindView_ReturnsNotFoundResult_WhenExactlyOneViewEngineIsRegisteredWhichReturnsNotFoundResult() { // Arrange var viewName = "test-view"; var engine = new Mock <IViewEngine>(); engine.Setup(e => e.FindView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "controller/test-view" })); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of <ITypeActivatorCache>(), Mock.Of <IServiceProvider>()); // Act var result = compositeViewEngine.FindView(GetActionContext(), viewName); // Assert Assert.False(result.Success); Assert.Equal(new[] { "controller/test-view" }, result.SearchedLocations); }
public void FindPartialView_ReturnsView_WhenExactlyOneViewEngineIsRegisteredWhichReturnsAFoundResult() { // Arrange var viewName = "test-view"; var engine = new Mock <IViewEngine>(); var view = Mock.Of <IView>(); engine.Setup(e => e.FindPartialView(It.IsAny <ActionContext>(), It.IsAny <string>())) .Returns(ViewEngineResult.Found(viewName, view)); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of <ITypeActivatorCache>(), Mock.Of <IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.True(result.Success); Assert.Same(view, result.View); }
private ControllerActionDescriptorProvider GetProvider( TypeInfo controllerTypeInfo, IApplicationModelConvention convention) { var options = new MockMvcOptionsAccessor(); options.Options.Conventions.Add(convention); var controllerTypeProvider = new FixedSetControllerTypeProvider(new[] { controllerTypeInfo }); var modelProvider = new DefaultApplicationModelProvider(options); var provider = new ControllerActionDescriptorProvider( controllerTypeProvider, new[] { modelProvider }, options); return provider; }
private ControllerActionDescriptorProvider GetProvider( params TypeInfo[] controllerTypeInfos) { var options = new MockMvcOptionsAccessor(); var controllerTypeProvider = new FixedSetControllerTypeProvider(controllerTypeInfos); var modelProvider = new DefaultApplicationModelProvider(options); var provider = new ControllerActionDescriptorProvider( controllerTypeProvider, new[] { modelProvider }, options); return provider; }
private ControllerActionDescriptorProvider GetProvider( TypeInfo controllerTypeInfo, IEnumerable<IFilterMetadata> filters = null) { var options = new MockMvcOptionsAccessor(); if (filters != null) { foreach (var filter in filters) { options.Options.Filters.Add(filter); } } var controllerTypeProvider = new FixedSetControllerTypeProvider(new[] { controllerTypeInfo }); var modelProvider = new DefaultApplicationModelProvider(options); var provider = new ControllerActionDescriptorProvider( controllerTypeProvider, new[] { modelProvider }, options); return provider; }
public void ApplyConventions_RunsInOrderOfDecreasingScope() { // Arrange var sequence = 0; var applicationConvention = new Mock<IApplicationModelConvention>(); applicationConvention .Setup(c => c.Apply(It.IsAny<ApplicationModel>())) .Callback(() => { Assert.Equal(0, sequence++); }); var controllerConvention = new Mock<IControllerModelConvention>(); controllerConvention .Setup(c => c.Apply(It.IsAny<ControllerModel>())) .Callback(() => { Assert.Equal(1, sequence++); }); var actionConvention = new Mock<IActionModelConvention>(); actionConvention .Setup(c => c.Apply(It.IsAny<ActionModel>())) .Callback(() => { Assert.Equal(2, sequence++); }); var parameterConvention = new Mock<IParameterModelConvention>(); parameterConvention .Setup(c => c.Apply(It.IsAny<ParameterModel>())) .Callback(() => { Assert.Equal(3, sequence++); }); var options = new MockMvcOptionsAccessor(); options.Options.Conventions.Add(applicationConvention.Object); var applicationModel = new ApplicationModel(); var controller = new ControllerModel(typeof(ConventionsController).GetTypeInfo(), new List<object>() { controllerConvention.Object }); controller.Application = applicationModel; applicationModel.Controllers.Add(controller); var methodInfo = typeof(ConventionsController).GetMethod("Create"); var actionModel = new ActionModel(methodInfo, new List<object>() { actionConvention.Object }); actionModel.Controller = controller; controller.Actions.Add(actionModel); var parameterInfo = actionModel.ActionMethod.GetParameters().Single(); var parameterModel = new ParameterModel(parameterInfo, new List<object>() { parameterConvention.Object }); parameterModel.Action = actionModel; actionModel.Parameters.Add(parameterModel); // Act ApplicationModelConventions.ApplyConventions(applicationModel, options.Options.Conventions); // Assert Assert.Equal(4, sequence); }
private ControllerActionDescriptorProvider GetProvider( TypeInfo type, IApplicationModelConvention convention) { var controllerTypeProvider = new FixedSetControllerTypeProvider(new[] { type }); var modelBuilder = new DefaultControllerModelBuilder(new DefaultActionModelBuilder(null), NullLoggerFactory.Instance, null); var options = new MockMvcOptionsAccessor(); options.Options.Conventions.Add(convention); return new ControllerActionDescriptorProvider( controllerTypeProvider, modelBuilder, new TestGlobalFilterProvider(), options, new NullLoggerFactory()); }
private RouteContext CreateRouteContext( ActionDescriptor actionDescriptor = null, IActionSelector actionSelector = null, IActionInvokerFactory invokerFactory = null, ILoggerFactory loggerFactory = null, IOptions<MvcOptions> optionsAccessor = null, object notificationListener = null) { var mockContextAccessor = new Mock<IScopedInstance<ActionContext>>(); if (actionDescriptor == null) { var mockAction = new Mock<ActionDescriptor>(); actionDescriptor = mockAction.Object; } if (actionSelector == null) { var mockActionSelector = new Mock<IActionSelector>(); mockActionSelector.Setup(a => a.SelectAsync(It.IsAny<RouteContext>())) .Returns(Task.FromResult(actionDescriptor)); actionSelector = mockActionSelector.Object; } if (invokerFactory == null) { var mockInvoker = new Mock<IActionInvoker>(); mockInvoker.Setup(i => i.InvokeAsync()) .Returns(Task.FromResult(true)); var mockInvokerFactory = new Mock<IActionInvokerFactory>(); mockInvokerFactory.Setup(f => f.CreateInvoker(It.IsAny<ActionContext>())) .Returns(mockInvoker.Object); invokerFactory = mockInvokerFactory.Object; } if (loggerFactory == null) { loggerFactory = NullLoggerFactory.Instance; } if (optionsAccessor == null) { optionsAccessor = new MockMvcOptionsAccessor(); } var notifier = new Notifier(new NotifierMethodAdapter()); if (notificationListener != null) { notifier.EnlistTarget(notificationListener); } var httpContext = new Mock<HttpContext>(); httpContext.Setup(h => h.RequestServices.GetService(typeof(IScopedInstance<ActionContext>))) .Returns(mockContextAccessor.Object); httpContext.Setup(h => h.RequestServices.GetService(typeof(IActionSelector))) .Returns(actionSelector); httpContext.Setup(h => h.RequestServices.GetService(typeof(IActionInvokerFactory))) .Returns(invokerFactory); httpContext.Setup(h => h.RequestServices.GetService(typeof(ILoggerFactory))) .Returns(loggerFactory); httpContext.Setup(h => h.RequestServices.GetService(typeof(MvcMarkerService))) .Returns(new MvcMarkerService()); httpContext.Setup(h => h.RequestServices.GetService(typeof(IOptions<MvcOptions>))) .Returns(optionsAccessor); httpContext.Setup(h => h.RequestServices.GetService(typeof(INotifier))) .Returns(notifier); return new RouteContext(httpContext.Object); }
private static HttpContext GetHttpContext() { var httpContext = new DefaultHttpContext(); httpContext.Request.PathBase = new PathString(""); httpContext.Response.Body = new MemoryStream(); var services = new Mock<IServiceProvider>(); httpContext.RequestServices = services.Object; var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter()); optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter()); services.Setup(p => p.GetService(typeof(IOptions<MvcOptions>))) .Returns(optionsAccessor); services.Setup(s => s.GetService(typeof(ILogger<ObjectResult>))) .Returns(new Mock<ILogger<ObjectResult>>().Object); var mockContextAccessor = new Mock<IScopedInstance<ActionBindingContext>>(); mockContextAccessor .SetupGet(o => o.Value) .Returns(new ActionBindingContext() { OutputFormatters = optionsAccessor.Options.OutputFormatters }); services.Setup(o => o.GetService(typeof(IScopedInstance<ActionBindingContext>))) .Returns(mockContextAccessor.Object); return httpContext; }
private ControllerActionDescriptorProvider GetActionDescriptorProvider() { var controllerTypes = typeof(DefaultActionSelectorTests) .GetNestedTypes(BindingFlags.NonPublic) .Select(t => t.GetTypeInfo()) .ToList(); var options = new MockMvcOptionsAccessor(); var controllerTypeProvider = new FixedSetControllerTypeProvider(controllerTypes); var modelProvider = new DefaultApplicationModelProvider(options); var provider = new ControllerActionDescriptorProvider( controllerTypeProvider, new[] { modelProvider }, options); return provider; }
private static HttpContext GetHttpContext() { var httpContext = new Mock<HttpContext>(); var realContext = new DefaultHttpContext(); var request = realContext.Request; request.PathBase = new PathString(""); var response = realContext.Response; response.Body = new MemoryStream(); httpContext.Setup(o => o.Request) .Returns(request); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter()); optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter()); httpContext.Setup(o => o.RequestServices.GetService(typeof(IOptions<MvcOptions>))) .Returns(optionsAccessor); httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger<ObjectResult>))) .Returns(new Mock<ILogger<ObjectResult>>().Object); httpContext.Setup(o => o.Response) .Returns(response); httpContext.Setup(o => o.RequestServices.GetService(typeof(IActionBindingContextAccessor))) .Returns(new ActionBindingContextAccessor()); return httpContext.Object; }
public void FindPartialView_ReturnsView_WhenExactlyOneViewEngineIsRegisteredWhichReturnsAFoundResult() { // Arrange var viewName = "test-view"; var engine = new Mock<IViewEngine>(); var view = Mock.Of<IView>(); engine.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.Found(viewName, view)); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of<ITypeActivatorCache>(), Mock.Of<IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.True(result.Success); Assert.Same(view, result.View); }
private static ActionContext CreateMockActionContext( HttpResponse response = null, string requestAcceptHeader = "application/*", string requestContentType = "application/json", string requestAcceptCharsetHeader = "", bool respectBrowserAcceptHeader = false) { var httpContext = new Mock<HttpContext>(); if (response != null) { httpContext.Setup(o => o.Response).Returns(response); } var content = "{name: 'Person Name', Age: 'not-an-age'}"; var contentBytes = Encoding.UTF8.GetBytes(content); var request = new DefaultHttpContext().Request; request.Headers["Accept-Charset"] = requestAcceptCharsetHeader; request.Headers["Accept"] = requestAcceptHeader; request.ContentType = requestContentType; request.Body = new MemoryStream(contentBytes); httpContext.Setup(o => o.Request).Returns(request); httpContext.Setup(o => o.RequestServices).Returns(GetServiceProvider()); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.OutputFormatters.Add(new StringOutputFormatter()); optionsAccessor.Options.OutputFormatters.Add(new JsonOutputFormatter()); optionsAccessor.Options.RespectBrowserAcceptHeader = respectBrowserAcceptHeader; var mockContextAccessor = new Mock<IScopedInstance<ActionBindingContext>>(); mockContextAccessor .SetupGet(o => o.Value) .Returns(new ActionBindingContext() { OutputFormatters = optionsAccessor.Options.OutputFormatters }); httpContext.Setup(o => o.RequestServices.GetService(typeof(IScopedInstance<ActionBindingContext>))) .Returns(mockContextAccessor.Object); httpContext.Setup(o => o.RequestServices.GetService(typeof(IOptions<MvcOptions>))) .Returns(optionsAccessor); httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger<ObjectResult>))) .Returns(new Mock<ILogger<ObjectResult>>().Object); return new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); }
public void FindPartialView_ReturnsViewFromFirstViewEngineWithFoundResult() { // Arrange var viewName = "bar"; var engine1 = new Mock<IViewEngine>(); var engine2 = new Mock<IViewEngine>(); var engine3 = new Mock<IViewEngine>(); var view2 = Mock.Of<IView>(); var view3 = Mock.Of<IView>(); engine1.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.NotFound(viewName, Enumerable.Empty<string>())); engine2.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.Found(viewName, view2)); engine3.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.Found(viewName, view3)); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine1.Object); optionsAccessor.Options.ViewEngines.Add(engine2.Object); optionsAccessor.Options.ViewEngines.Add(engine3.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of<ITypeActivatorCache>(), Mock.Of<IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.True(result.Success); Assert.Same(view2, result.View); Assert.Equal(viewName, result.ViewName); }
private static ActionContext CreateMockActionContext( IEnumerable<IOutputFormatter> outputFormatters, HttpResponse response = null, string requestAcceptHeader = "application/*", string requestContentType = "application/json", string requestAcceptCharsetHeader = "", bool respectBrowserAcceptHeader = false, bool setupActionBindingContext = true) { var httpContext = new Mock<HttpContext>(); if (response != null) { httpContext.Setup(o => o.Response).Returns(response); } var content = "{name: 'Person Name', Age: 'not-an-age'}"; var contentBytes = Encoding.UTF8.GetBytes(content); var request = new DefaultHttpContext().Request; request.Headers["Accept-Charset"] = requestAcceptCharsetHeader; request.Headers["Accept"] = requestAcceptHeader; request.ContentType = requestContentType; request.Body = new MemoryStream(contentBytes); httpContext.Setup(o => o.Request).Returns(request); httpContext.Setup(o => o.RequestServices).Returns(GetServiceProvider()); var optionsAccessor = new MockMvcOptionsAccessor(); foreach (var formatter in outputFormatters) { optionsAccessor.Options.OutputFormatters.Add(formatter); } optionsAccessor.Options.RespectBrowserAcceptHeader = respectBrowserAcceptHeader; httpContext.Setup(o => o.RequestServices.GetService(typeof(IOptions<MvcOptions>))) .Returns(optionsAccessor); httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger<ObjectResult>))) .Returns(new Mock<ILogger<ObjectResult>>().Object); ActionBindingContext actionBindingContext = null; if (setupActionBindingContext) { actionBindingContext = new ActionBindingContext { OutputFormatters = outputFormatters.ToList() }; } httpContext.Setup(o => o.RequestServices.GetService(typeof(IActionBindingContextAccessor))) .Returns(new ActionBindingContextAccessor() { ActionBindingContext = actionBindingContext }); return new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); }
public void FindPartialView_ReturnsNotFound_IfAllViewEnginesReturnNotFound() { // Arrange var viewName = "foo"; var engine1 = new Mock<IViewEngine>(); var engine2 = new Mock<IViewEngine>(); var engine3 = new Mock<IViewEngine>(); engine1.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "1", "2" })); engine2.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "3" })); engine3.Setup(e => e.FindPartialView(It.IsAny<ActionContext>(), It.IsAny<string>())) .Returns(ViewEngineResult.NotFound(viewName, new[] { "4", "5" })); var optionsAccessor = new MockMvcOptionsAccessor(); optionsAccessor.Options.ViewEngines.Add(engine1.Object); optionsAccessor.Options.ViewEngines.Add(engine2.Object); optionsAccessor.Options.ViewEngines.Add(engine3.Object); var compositeViewEngine = new CompositeViewEngine( optionsAccessor, Mock.Of<ITypeActivatorCache>(), Mock.Of<IServiceProvider>()); // Act var result = compositeViewEngine.FindPartialView(GetActionContext(), viewName); // Assert Assert.False(result.Success); Assert.Equal(new[] { "1", "2", "3", "4", "5" }, result.SearchedLocations); }