public void Create_ThrowsIfModelIsNotRegisteredInServiceProvider()
        {
            // Arrange
            var expected = "No service for type '" + typeof(DISimpleModel) + "' has been registered.";
            var model    = new DISimpleModel();

            var httpContext = new DefaultHttpContext
            {
                RequestServices = Mock.Of <IServiceProvider>()
            };

            var activatorProvider = new ServiceBasedPageModelActivatorProvider();
            var context           = new PageContext
            {
                HttpContext      = httpContext,
                ActionDescriptor = new CompiledPageActionDescriptor
                {
                    ModelTypeInfo = typeof(DISimpleModel).GetTypeInfo(),
                }
            };

            // Act and Assert
            var activator = activatorProvider.CreateActivator(context.ActionDescriptor);
            var ex        = Assert.Throws <InvalidOperationException>(
                () => activator(context));

            Assert.Equal(expected, ex.Message);
        }
        public void CreateActivator_CreatesModelInstance()
        {
            // Arrange
            var simpleModel     = new DISimpleModel();
            var serviceProvider = new Mock <IServiceProvider>(MockBehavior.Strict);

            serviceProvider.Setup(s => s.GetService(typeof(DISimpleModel)))
            .Returns(simpleModel)
            .Verifiable();

            var activatorProvider = new ServiceBasedPageModelActivatorProvider();
            var pageContext       = new PageContext
            {
                HttpContext = new DefaultHttpContext
                {
                    RequestServices = serviceProvider.Object,
                },
                ActionDescriptor = new CompiledPageActionDescriptor
                {
                    ModelTypeInfo = typeof(DISimpleModel).GetTypeInfo(),
                }
            };

            // Act
            var activator = activatorProvider.CreateActivator(pageContext.ActionDescriptor);
            var model     = activator(pageContext);

            // Assert
            var simpleModel2 = Assert.IsType <DISimpleModel>(model);

            Assert.NotNull(simpleModel2);
        }
        public void Create_GetsServicesFromServiceProvider()
        {
            // Arrange
            var simpleModel     = new DISimpleModel();
            var serviceProvider = new Mock <IServiceProvider>(MockBehavior.Strict);

            serviceProvider.Setup(s => s.GetService(typeof(DISimpleModel)))
            .Returns(simpleModel)
            .Verifiable();

            var activatorProvider = new ServiceBasedPageModelActivatorProvider();
            var pageContext       = new PageContext
            {
                HttpContext = new DefaultHttpContext
                {
                    RequestServices = serviceProvider.Object,
                },
                ActionDescriptor = new CompiledPageActionDescriptor
                {
                    ModelTypeInfo = typeof(DISimpleModel).GetTypeInfo(),
                }
            };

            // Act
            var activator = activatorProvider.CreateActivator(pageContext.ActionDescriptor);
            var instance  = activator(pageContext);

            // Assert
            Assert.Same(simpleModel, instance);
            serviceProvider.Verify();
        }
        public void CreateActivator_ThrowsIfModelTypeInfoOnActionDescriptorIsNull()
        {
            // Arrange
            var activatorProvider = new ServiceBasedPageModelActivatorProvider();
            var descriptor        = new CompiledPageActionDescriptor();

            // Act & Assert
            ExceptionAssert.ThrowsArgument(
                () => activatorProvider.CreateActivator(descriptor),
                "descriptor",
                "The 'ModelTypeInfo' property of 'descriptor' must not be null.");
        }
        public void CreateReleaser_ReturnsNullForPageModels(Type pageType)
        {
            // Arrange
            var context          = new PageContext();
            var activator        = new ServiceBasedPageModelActivatorProvider();
            var actionDescriptor = new CompiledPageActionDescriptor
            {
                PageTypeInfo = pageType.GetTypeInfo(),
            };

            // Act
            var releaser = activator.CreateReleaser(actionDescriptor);

            // Assert
            Assert.Null(releaser);
        }