Example #1
0
        public void FilterImplementingMultipleType_WhereOneTypeIsOverridden_AppearsOnlyInTheOtherList()
        {
            // Arrange
            IFilter    expectedInstance         = new ActionAndExceptionFilter();
            FilterInfo actionAndExceptionFilter = new FilterInfo(
                expectedInstance,
                FilterScope.Global
                );
            FilterInfo overrideExceptionFilter = new FilterInfo(
                CreateOverride(typeof(IExceptionFilter)),
                FilterScope.Action
                );
            IEnumerable <FilterInfo> filters = new FilterInfo[]
            {
                actionAndExceptionFilter,
                overrideExceptionFilter
            };
            FilterGrouping product = CreateProductUnderTest(filters);

            // Act
            IActionFilter[]    actionFilters    = product.ActionFilters;
            IExceptionFilter[] exceptionFilters = product.ExceptionFilters;

            // Assert
            Assert.NotNull(actionFilters);
            IActionFilter actionFilter = Assert.Single(actionFilters);

            Assert.Same(expectedInstance, actionFilter);
            Assert.NotNull(exceptionFilters);
            Assert.Empty(exceptionFilters);
        }
Example #2
0
        public void ActionFilters_ReturnsAllActionFilters_WhenOverrideScopeIsGlobal()
        {
            // Arrange
            IActionFilter expectedGlobalFilter     = CreateDummyActionFilter();
            FilterInfo    globalFilter             = new FilterInfo(expectedGlobalFilter, FilterScope.Global);
            IActionFilter expectedControllerFilter = CreateDummyActionFilter();
            FilterInfo    controllerFilter         = new FilterInfo(
                expectedControllerFilter,
                FilterScope.Controller
                );
            IActionFilter expectedActionFilter = CreateDummyActionFilter();
            FilterInfo    actionFilter         = new FilterInfo(expectedActionFilter, FilterScope.Action);
            FilterInfo    overrideFilter       = new FilterInfo(
                CreateOverride(typeof(IActionFilter)),
                FilterScope.Global
                );
            IEnumerable <FilterInfo> filters = new FilterInfo[]
            {
                globalFilter,
                controllerFilter,
                actionFilter,
                overrideFilter
            };
            FilterGrouping product = CreateProductUnderTest(filters);

            // Act
            IActionFilter[] actionFilters = product.ActionFilters;

            // Assert
            Assert.NotNull(actionFilters);
            Assert.Equal(3, actionFilters.Length);
            Assert.Same(expectedGlobalFilter, actionFilters[0]);
            Assert.Same(expectedControllerFilter, actionFilters[1]);
            Assert.Same(expectedActionFilter, actionFilters[2]);
        }
Example #3
0
        public void ExceptionFilters_ReturnsActionScopeExceptionFilters_WhenOverrideScopeIsAction()
        {
            // Arrange
            IExceptionFilter expectedGlobalFilter     = CreateDummyExceptionFilter();
            FilterInfo       globalFilter             = new FilterInfo(expectedGlobalFilter, FilterScope.Global);
            IExceptionFilter expectedControllerFilter = CreateDummyExceptionFilter();
            FilterInfo       controllerFilter         = new FilterInfo(
                expectedControllerFilter,
                FilterScope.Controller
                );
            IExceptionFilter expectedActionFilter = CreateDummyExceptionFilter();
            FilterInfo       actionFilter         = new FilterInfo(expectedActionFilter, FilterScope.Action);
            FilterInfo       overrideFilter       = new FilterInfo(
                CreateOverride(typeof(IExceptionFilter)),
                FilterScope.Action
                );
            IEnumerable <FilterInfo> filters = new FilterInfo[]
            {
                globalFilter,
                controllerFilter,
                actionFilter,
                overrideFilter
            };
            FilterGrouping product = CreateProductUnderTest(filters);

            // Act
            IExceptionFilter[] exceptionFilters = product.ExceptionFilters;

            // Assert
            Assert.NotNull(exceptionFilters);
            IExceptionFilter exceptionFilter = Assert.Single(exceptionFilters);

            Assert.Same(expectedActionFilter, exceptionFilter);
        }
        public void ActionFilters_ReturnsEmptyArray_WhenFiltersIsEmpty()
        {
            // Arrange
            IEnumerable <FilterInfo> filters = CreateEmptyFilters();
            FilterGrouping           product = CreateProductUnderTest(filters);

            // Act
            IActionFilter[] actionFilters = product.ActionFilters;

            // Assert
            Assert.NotNull(actionFilters);
            Assert.Empty(actionFilters);
        }
        internal FilterGrouping GetFilterGrouping()
        {
            // Performance-sensitive
            // Filter grouping is expensive so cache whenever possible
            // For compatibility, the virtual method must be called
            Collection <FilterInfo> currentFilterPipeline = GetFilterPipeline();

            if (_filterGrouping == null || _filterPipelineForGrouping != currentFilterPipeline)
            {
                _filterGrouping            = new FilterGrouping(currentFilterPipeline);
                _filterPipelineForGrouping = currentFilterPipeline;
            }
            return(_filterGrouping);
        }