public void PossiblyReleaseController_CorrectFactory_ReleasesController()
        {
            // Arrange
            RequestContext requestContext      = GetRequestContext();
            IHttpHandler   originalHttpHandler = requestContext.HttpContext.Handler;
            Controller     controller          = new ControllerReadOnlySession();

            Mock <IControllerFactory> mockControllerFactory = new Mock <IControllerFactory>();

            mockControllerFactory.Expect(o => o.CreateController(requestContext, "home")).Returns(controller);
            mockControllerFactory.Expect(o => o.ReleaseController(controller)).Verifiable();

            ControllerBuilder controllerBuilder = new ControllerBuilder();

            controllerBuilder.SetControllerFactory(new MvcDynamicSessionControllerFactory(mockControllerFactory.Object));
            MvcDynamicSessionModule module = new MvcDynamicSessionModule()
            {
                ControllerBuilder = controllerBuilder
            };

            // Act
            module.SetSessionStateMode(requestContext.HttpContext, SimpleDynamicSessionStateConfigurator.ExpectMode(ControllerSessionState.ReadOnly));
            MvcDynamicSessionModule.PossiblyReleaseController(requestContext.HttpContext);

            // Assert
            mockControllerFactory.Verify();
        }
        public void SetSessionStateMode_HandlerIsNotMvcHandler_DoesNothing()
        {
            // Arrange
            IHttpHandler expectedHandler = new Mock <IHttpHandler>().Object;

            Mock <HttpContextBase> mockHttpContext = new Mock <HttpContextBase>();

            mockHttpContext.Expect(o => o.Handler).Returns(expectedHandler);
            mockHttpContext.Expect(o => o.Items).Never();

            MvcDynamicSessionModule module = new MvcDynamicSessionModule();

            // Act
            module.SetSessionStateMode(mockHttpContext.Object, SimpleDynamicSessionStateConfigurator.ExpectNever());

            // Assert
            mockHttpContext.Verify();
        }
        public void SetSessionStateMode_HandlerIsMvcHandler_ControllerHasNoAttribute_SetsDefault()
        {
            // Arrange
            RequestContext requestContext      = GetRequestContext();
            IHttpHandler   originalHttpHandler = requestContext.HttpContext.Handler;

            Mock <IControllerFactory> mockControllerFactory = new Mock <IControllerFactory>();

            mockControllerFactory.Expect(o => o.CreateController(requestContext, "home")).Returns(new ControllerWithoutAttribute());

            ControllerBuilder controllerBuilder = new ControllerBuilder();

            controllerBuilder.SetControllerFactory(new MvcDynamicSessionControllerFactory(mockControllerFactory.Object));
            MvcDynamicSessionModule module = new MvcDynamicSessionModule()
            {
                ControllerBuilder = controllerBuilder
            };

            // Act
            module.SetSessionStateMode(requestContext.HttpContext, SimpleDynamicSessionStateConfigurator.ExpectMode(ControllerSessionState.Default));

            // Assert
            Assert.AreEqual(2, requestContext.HttpContext.Items.Count, "Cache + factory weren't properly added to Items.");
        }