示例#1
0
        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);
        }
示例#2
0
        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);
            });
        }
示例#3
0
        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);
        }
示例#4
0
        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);
                });
        }
示例#5
0
        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()));
        }
示例#6
0
        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);
        }
示例#7
0
        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));
        }
示例#8
0
        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);
        }
示例#9
0
        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();
        }
示例#11
0
        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);
        }
示例#12
0
        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;
        }
示例#20
0
        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;
        }
示例#22
0
        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());
        }
示例#24
0
        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);
        }
示例#25
0
        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());
        }
示例#26
0
        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);
        }