public void Create_TypeActivatesTypesWithServices()
        {
            // Arrange
            var activator = new DefaultControllerActivator(new TypeActivatorCache());
            var serviceProvider = new Mock<IServiceProvider>(MockBehavior.Strict);
            var testService = new TestService();
            serviceProvider.Setup(s => s.GetService(typeof(TestService)))
                           .Returns(testService)
                           .Verifiable();

            var httpContext = new DefaultHttpContext
            {
                RequestServices = serviceProvider.Object
            };

            var context = new ControllerContext(
                new ActionContext(
                    httpContext,
                    new RouteData(),
                    new ControllerActionDescriptor
                    {
                        ControllerTypeInfo = typeof(TypeDerivingFromControllerWithServices).GetTypeInfo()
                    }));

            // Act
            var instance = activator.Create(context);

            // Assert
            var controller = Assert.IsType<TypeDerivingFromControllerWithServices>(instance);
            Assert.Same(testService, controller.TestService);
            serviceProvider.Verify();
        }
Esempio n. 2
0
    public void CreateActivator_ActivatesControllerInstance()
    {
        // Arrange
        var expected          = new TestService();
        var activator         = new DefaultControllerActivator(Mock.Of <ITypeActivatorCache>());
        var activatorProvider = new ControllerActivatorProvider(activator);
        var descriptor        = new ControllerActionDescriptor
        {
            ControllerTypeInfo = typeof(TestController).GetTypeInfo(),
        };
        var serviceProvider = new ServiceCollection()
                              .AddSingleton(expected)
                              .BuildServiceProvider();
        var context = new ControllerContext
        {
            HttpContext = new DefaultHttpContext
            {
                RequestServices = serviceProvider,
            },
        };

        // Act
        var activatorDelegate = activatorProvider.CreateActivator(descriptor);
        var result            = activatorDelegate(context);

        // Assert
        var actual = Assert.IsType <TestController>(result);

        Assert.Same(expected, actual.TestService);
    }
        public void Activate_PopulatesServicesFromServiceContainer()
        {
            // Arrange
            var urlHelper = Mock.Of <IUrlHelper>();
            var service   = new Mock <IServiceProvider>();

            service.Setup(s => s.GetService(typeof(IUrlHelper)))
            .Returns(urlHelper);

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.RequestServices)
            .Returns(service.Object);
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Same(urlHelper, controller.Helper);
        }
        public void Create_CreatesInstancesOfTypes(Type type)
        {
            // Arrange
            var activator = new DefaultControllerActivator(new TypeActivatorCache());
            var serviceProvider = new Mock<IServiceProvider>(MockBehavior.Strict);

            var httpContext = new DefaultHttpContext
            {
                RequestServices = serviceProvider.Object
            };

            var context = new ControllerContext(
                new ActionContext(
                    httpContext,
                    new RouteData(),
                    new ControllerActionDescriptor
                    {
                        ControllerTypeInfo = type.GetTypeInfo()
                    }));

            // Act
            var instance = activator.Create(context);

            // Assert
            Assert.IsType(type, instance);
        }
        public void Activate_SetsPropertiesFromActionContextHierarchy()
        {
            // Arrange
            var httpRequest = Mock.Of <HttpRequest>();
            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.Request)
            .Returns(httpRequest);
            httpContext.SetupGet(c => c.RequestServices)
            .Returns(Mock.Of <IServiceProvider>());
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Same(context, controller.ActionContext);
            Assert.Same(httpContext.Object, controller.HttpContext);
            Assert.Same(httpRequest, controller.GetHttpRequest());
        }
        public void Activate_SetsPropertiesFromActionContextHierarchy()
        {
            // Arrange
            var httpRequest = Mock.Of<HttpRequest>();
            var httpContext = new Mock<HttpContext>();
            httpContext.SetupGet(c => c.Request)
                       .Returns(httpRequest);
            httpContext.SetupGet(c => c.RequestServices)
                       .Returns(Mock.Of<IServiceProvider>());
            var routeContext = new RouteContext(httpContext.Object);
            var controller = new TestController();
            var context = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Same(context, controller.ActionContext);
            Assert.Same(httpContext.Object, controller.HttpContext);
            Assert.Same(httpRequest, controller.GetHttpRequest());
        }
Esempio n. 7
0
    public void Create_TypeActivatesTypesWithServices()
    {
        // Arrange
        var activator       = new DefaultControllerActivator(new TypeActivatorCache());
        var serviceProvider = new Mock <IServiceProvider>(MockBehavior.Strict);
        var testService     = new TestService();

        serviceProvider.Setup(s => s.GetService(typeof(TestService)))
        .Returns(testService)
        .Verifiable();

        var httpContext = new DefaultHttpContext
        {
            RequestServices = serviceProvider.Object
        };

        var context = new ControllerContext(
            new ActionContext(
                httpContext,
                new RouteData(),
                new ControllerActionDescriptor
        {
            ControllerTypeInfo = typeof(TypeDerivingFromControllerWithServices).GetTypeInfo()
        }));

        // Act
        var instance = activator.Create(context);

        // Assert
        var controller = Assert.IsType <TypeDerivingFromControllerWithServices>(instance);

        Assert.Same(testService, controller.TestService);
        serviceProvider.Verify();
    }
        public void Activate_IgnoresPropertiesThatAreNotDecoratedWithActivateAttribute()
        {
            // Arrange
            var services = new Mock <IServiceProvider>();

            services.Setup(s => s.GetService(typeof(IUrlHelper)))
            .Returns(Mock.Of <IUrlHelper>());
            services.Setup(s => s.GetService(typeof(IModelMetadataProvider)))
            .Returns(new EmptyModelMetadataProvider());

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.Response)
            .Returns(Mock.Of <HttpResponse>());
            httpContext.SetupGet(c => c.RequestServices)
            .Returns(services.Object);
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Null(controller.Response);
        }
Esempio n. 9
0
        public void Activate_SetsBindingContext()
        {
            // Arrange
            var bindingContext = new ActionBindingContext();

            var services = GetServices();

            services.GetRequiredService <IScopedInstance <ActionBindingContext> >().Value = bindingContext;

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.RequestServices)
            .Returns(services);
            var routeContext = new RouteContext(httpContext.Object);

            var controller = new TestController();
            var context    = new ActionContext(routeContext, new ActionDescriptor());

            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Same(bindingContext, controller.BindingContext);
        }
Esempio n. 10
0
    public void Create_CreatesInstancesOfTypes(Type type)
    {
        // Arrange
        var activator       = new DefaultControllerActivator(new TypeActivatorCache());
        var serviceProvider = new Mock <IServiceProvider>(MockBehavior.Strict);

        var httpContext = new DefaultHttpContext
        {
            RequestServices = serviceProvider.Object
        };

        var context = new ControllerContext(
            new ActionContext(
                httpContext,
                new RouteData(),
                new ControllerActionDescriptor
        {
            ControllerTypeInfo = type.GetTypeInfo()
        }));

        // Act
        var instance = activator.Create(context);

        // Assert
        Assert.IsType(type, instance);
    }
        public void Activate_SetsViewDatDictionary()
        {
            // Arrange
            var service = new Mock <IServiceProvider>();

            service.Setup(s => s.GetService(typeof(IModelMetadataProvider)))
            .Returns(Mock.Of <IModelMetadataProvider>());

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.RequestServices)
            .Returns(service.Object);
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.NotNull(controller.GetViewData());
        }
Esempio n. 12
0
    public void DefaultControllerActivator_ReleasesNonIDisposableController()
    {
        // Arrange
        var activator  = new DefaultControllerActivator(Mock.Of <ITypeActivatorCache>());
        var controller = new object();

        // Act + Assert (does not throw)
        activator.Release(Mock.Of <ControllerContext>(), controller);
    }
Esempio n. 13
0
    public async Task ReleaseAsync_SynchronouslyDisposesController_IfDisposableAsync()
    {
        // Arrange
        var controller = new MyController();
        var activator  = new DefaultControllerActivator(Mock.Of <ITypeActivatorCache>());

        // Act
        await activator.ReleaseAsync(new ControllerContext(), controller);

        // Assert
        Assert.True(controller.Disposed);
    }
Esempio n. 14
0
    public void Release_DisposesController_IfDisposable()
    {
        // Arrange
        var controller = new MyController();
        var activator  = new DefaultControllerActivator(Mock.Of <ITypeActivatorCache>());

        // Act
        activator.Release(new ControllerContext(), controller);

        // Assert
        Assert.True(controller.Disposed);
    }
Esempio n. 15
0
    public void CreateReleaser_ReturnsNullIfControllerIsNotDisposable()
    {
        // Arrange
        var activator         = new DefaultControllerActivator(Mock.Of <ITypeActivatorCache>());
        var activatorProvider = new ControllerActivatorProvider(activator);
        var descriptor        = new ControllerActionDescriptor
        {
            ControllerTypeInfo = typeof(TestController).GetTypeInfo(),
        };

        // Act
        var releaseDelegate = activatorProvider.CreateReleaser(descriptor);

        // Assert
        Assert.Null(releaseDelegate);
    }
Esempio n. 16
0
    public void CreateReleaser_ReturnsDelegateThatDisposesInstance()
    {
        // Arrange
        var activator         = new DefaultControllerActivator(Mock.Of <ITypeActivatorCache>());
        var activatorProvider = new ControllerActivatorProvider(activator);
        var descriptor        = new ControllerActionDescriptor
        {
            ControllerTypeInfo = typeof(DisposableController).GetTypeInfo(),
        };
        var controller = new DisposableController();

        // Act
        var releaseDelegate = activatorProvider.CreateReleaser(descriptor);

        // Assert
        Assert.NotNull(releaseDelegate);
        releaseDelegate(new ControllerContext(), controller);
        Assert.True(controller.Disposed);
    }
Esempio n. 17
0
        public void Activate_SetsViewDatDictionary()
        {
            // Arrange
            var services = GetServices();

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.RequestServices)
            .Returns(services);
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor());
            var activator    = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.NotNull(controller.GetViewData());
        }
Esempio n. 18
0
        public void Activate_PopulatesServicesFromServiceContainer()
        {
            // Arrange
            var services  = GetServices();
            var urlHelper = services.GetRequiredService <IUrlHelper>();

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.RequestServices)
            .Returns(services);
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor());
            var activator    = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Same(urlHelper, controller.Helper);
        }
Esempio n. 19
0
        public void Activate_IgnoresPropertiesThatAreNotDecoratedWithActivateAttribute()
        {
            // Arrange
            var services = GetServices();

            var httpContext = new Mock <HttpContext>();

            httpContext.SetupGet(c => c.Response)
            .Returns(Mock.Of <HttpResponse>());
            httpContext.SetupGet(c => c.RequestServices)
            .Returns(services);
            var routeContext = new RouteContext(httpContext.Object);
            var controller   = new TestController();
            var context      = new ActionContext(routeContext, new ActionDescriptor());
            var activator    = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Null(controller.Response);
        }
Esempio n. 20
0
        public void Activate_SetsViewDatDictionary()
        {
            // Arrange
            var service = new Mock<IServiceProvider>();
            service.Setup(s => s.GetService(typeof(IModelMetadataProvider)))
                   .Returns(Mock.Of<IModelMetadataProvider>());

            var httpContext = new Mock<HttpContext>();
            httpContext.SetupGet(c => c.RequestServices)
                       .Returns(service.Object);
            var routeContext = new RouteContext(httpContext.Object);
            var controller = new TestController();
            var context = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.NotNull(controller.GetViewData());
        }
 public ControllerActivator(IConfigurationRoot config)
 {
     Configuration      = config;
     TypeActivatorCache = new TypeActivatorCache();
     DefaultActivator   = new DefaultControllerActivator(TypeActivatorCache);
 }
Esempio n. 22
0
 public ControllerActivator(IConfigurationRoot configuration)
 {
     typeActivatorCache = new TypeActivatorCache();
     defaultActivator   = new DefaultControllerActivator(typeActivatorCache);
     this.configuration = configuration;
 }
Esempio n. 23
0
 public void Setup()
 {
     _container = new Mock <IComponentProvider>(MockBehavior.Strict);
     _activator = new DefaultControllerActivator(_container.Object);
 }
Esempio n. 24
0
        public void Activate_IgnoresPropertiesThatAreNotDecoratedWithActivateAttribute()
        {
            // Arrange
            var httpContext = new Mock<HttpContext>();
            httpContext.SetupGet(c => c.Response)
                       .Returns(Mock.Of<HttpResponse>());
            httpContext.SetupGet(c => c.RequestServices)
                       .Returns(Mock.Of<IServiceProvider>());
            var routeContext = new RouteContext(httpContext.Object);
            var controller = new TestController();
            var context = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Null(controller.Response);
        }
Esempio n. 25
0
        public void Activate_PopulatesServicesFromServiceContainer()
        {
            // Arrange
            var urlHelper = Mock.Of<IUrlHelper>();
            var service = new Mock<IServiceProvider>();
            service.Setup(s => s.GetService(typeof(IUrlHelper)))
                   .Returns(urlHelper);

            var httpContext = new Mock<HttpContext>();
            httpContext.SetupGet(c => c.RequestServices)
                       .Returns(service.Object);
            var routeContext = new RouteContext(httpContext.Object);
            var controller = new TestController();
            var context = new ActionContext(routeContext, new ActionDescriptor())
            {
                Controller = controller
            };
            var activator = new DefaultControllerActivator();

            // Act
            activator.Activate(controller, context);

            // Assert
            Assert.Same(urlHelper, controller.Helper);
        }
Esempio n. 26
0
 public void Teardown()
 {
     _container = null;
     _activator = null;
 }
        public void Release_DisposesController_IfDisposable()
        {
            // Arrange
            var controller = new MyController();
            var activator = new DefaultControllerActivator(Mock.Of<ITypeActivatorCache>());

            // Act
            activator.Release(new ControllerContext(), controller);

            // Assert
            Assert.Equal(true, controller.Disposed);
        }
        public void DefaultControllerActivator_ReleasesNonIDisposableController()
        {
            // Arrange
            var activator = new DefaultControllerActivator(Mock.Of<ITypeActivatorCache>());
            var controller = new object();

            // Act + Assert (does not throw)
            activator.Release(Mock.Of<ControllerContext>(), controller);
        }