public async Task NoModelToProvide_Fails()
        {
            var modelProvider = new Mock <IRequestModelProvider>();

            modelProvider.Setup(x => x.GetCurrentRequestModel()).Returns(null);
            var configurationProvider = new Mock <IListConfigurationProvider>();

            var actionFilter = new PostRedirectGetActionFilter(modelProvider.Object, configurationProvider.Object);

            var httpContext   = new Mock <HttpContext>();
            var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ControllerActionDescriptor());

            actionFilter.Order.Should().Be(1);
            var httpRequest             = new Mock <HttpRequest>();
            var actionExecutionDelegate = new Mock <ActionExecutionDelegate>();

            httpRequest.SetupGet(x => x.Method).Returns("POST");
            httpContext.SetupGet(x => x.Request).Returns(httpRequest.Object);

            var controller = new Mock <Controller>();

            var actionExecutingContext = new ActionExecutingContext(actionContext, new List <IFilterMetadata>(), new RouteValueDictionary(), controller.Object);

            await actionFilter.OnActionExecutionAsync(actionExecutingContext, actionExecutionDelegate.Object);

            actionExecutingContext.Result.Should().BeNull();
        }
        public async Task Succeeds()
        {
            var model         = new TestRequest();
            var modelProvider = new Mock <IRequestModelProvider>();

            modelProvider.Setup(x => x.GetCurrentRequestModel()).Returns(model);
            var configurationProvider = new Mock <IListConfigurationProvider>();

            var listConfiguration = new ListConfiguration(typeof(TestRequest), typeof(TestItem), typeof(TestResult))
            {
                PostRedirectGetConfiguration = new PostRedirectGetConfiguration("Index", true),
                PageConfiguration            = new PageConfiguration("Page", 1),
                RowsConfiguration            = new RowsConfiguration("Rows", 20),
                SortColumnConfiguration      = new SortColumnConfiguration("Ordx", "Text"),
                SortDirectionConfiguration   = new SortDirectionConfiguration("Ordd", Direction.Ascending)
            };

            configurationProvider.Setup(x => x.GetConfiguration(It.IsAny <Type>())).Returns(listConfiguration);

            var actionFilter = new PostRedirectGetActionFilter(modelProvider.Object, configurationProvider.Object);

            actionFilter.Order.Should().Be(1);
            var httpContext   = new Mock <HttpContext>();
            var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ControllerActionDescriptor()
            {
                ActionName = "Index"
            });

            var httpRequest             = new Mock <HttpRequest>();
            var actionExecutionDelegate = new Mock <ActionExecutionDelegate>();

            httpRequest.SetupGet(x => x.Method).Returns("POST");
            httpContext.SetupGet(x => x.Request).Returns(httpRequest.Object);

            var controller = new Mock <Controller>();

            var actionExecutingContext = new ActionExecutingContext(actionContext, new List <IFilterMetadata>(), new RouteValueDictionary(), controller.Object);

            await actionFilter.OnActionExecutionAsync(actionExecutingContext, actionExecutionDelegate.Object);

            actionExecutingContext.Result.Should().BeOfType <RedirectToActionResult>();
        }
        public async Task Enabled_False_Fails()
        {
            var model         = new TestRequest();
            var modelProvider = new Mock <IRequestModelProvider>();

            modelProvider.Setup(x => x.GetCurrentRequestModel()).Returns(model);
            var configurationProvider = new Mock <IListConfigurationProvider>();

            var listConfiguration = new ListConfiguration(typeof(TestRequest), typeof(TestItem), typeof(TestResult))
            {
                PostRedirectGetConfiguration = new PostRedirectGetConfiguration("Index", false)
            };

            configurationProvider.Setup(x => x.GetConfiguration(It.IsAny <Type>())).Returns(listConfiguration);

            var actionFilter = new PostRedirectGetActionFilter(modelProvider.Object, configurationProvider.Object);

            actionFilter.Order.Should().Be(1);
            var httpContext   = new Mock <HttpContext>();
            var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ControllerActionDescriptor()
            {
                ActionName = "Index"
            });

            var httpRequest             = new Mock <HttpRequest>();
            var actionExecutionDelegate = new Mock <ActionExecutionDelegate>();

            httpRequest.SetupGet(x => x.Method).Returns("POST");
            httpContext.SetupGet(x => x.Request).Returns(httpRequest.Object);

            var controller = new Mock <Controller>();

            var actionExecutingContext = new ActionExecutingContext(actionContext, new List <IFilterMetadata>(), new RouteValueDictionary(), controller.Object);

            await actionFilter.OnActionExecutionAsync(actionExecutingContext, actionExecutionDelegate.Object);

            actionExecutingContext.Result.Should().BeNull();
        }