public void SelectWithFilteredControllerReturnsCorrectSelection()
        {
            StaticRouteSelector routeSelector = new StaticRouteSelector();

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = TestApplicationModel.Instance.Controller1(),
                ActionModels    = TestApplicationModel.Instance.Controller1().Actions,
            });

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = TestApplicationModel.Instance.Controller2(),
                ActionModels    = TestApplicationModel.Instance.Controller2().Actions,
            });

            FilterRouteSelector filterRouteSelector = new FilterRouteSelector(routeSelector)
            {
                Controller = "Controller1",
            };

            ICollection <RouteSelection> routeSelections = filterRouteSelector.Select(TestApplicationModel.Instance);

            Assert.IsTrue(routeSelections.Count == 1);
            Assert.IsTrue(routeSelections.Single().ControllerModel.ControllerName == "Controller2");
            Assert.IsTrue(routeSelections.Single().ActionModels.Count == 2);
            Assert.IsTrue(routeSelections.Single().ActionModels.First().ActionName == "Action1");
            Assert.IsTrue(routeSelections.Single().ActionModels.Last().ActionName == "Action2");
        }
        public void SelectWithFilteredSimilarActionWithActionArgumentsReturnsCorrectSelection()
        {
            StaticRouteSelector routeSelector = new StaticRouteSelector();

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = TestApplicationModel.Instance.Controller4(),
                ActionModels    = TestApplicationModel.Instance.Controller4().Actions,
            });

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = TestApplicationModel.Instance.Controller2(),
                ActionModels    = TestApplicationModel.Instance.Controller2().Actions,
            });

            FilterRouteSelector filterRouteSelector = new FilterRouteSelector(routeSelector)
            {
                Controller      = "Controller4",
                Action          = "Action1",
                ActionArguments = new[] { typeof(int) },
            };

            ICollection <RouteSelection> routeSelections = filterRouteSelector.Select(TestApplicationModel.Instance);

            Assert.IsTrue(routeSelections.Count == 2);
            Assert.IsTrue(routeSelections.First().ActionModels.Count == 1);
            Assert.IsTrue(routeSelections.First().ActionModels.Single().Parameters.Count == 0);
            Assert.IsTrue(routeSelections.Last().ControllerModel.ControllerName == "Controller2");
            Assert.IsTrue(routeSelections.Last().ActionModels.Count == 2);
            Assert.IsTrue(routeSelections.Last().ActionModels.First().ActionName == "Action1");
            Assert.IsTrue(routeSelections.Last().ActionModels.Last().ActionName == "Action2");
        }
        public void SelectWithFilteredNoTranslatedOptionReturnsCorrectSelection2()
        {
            ApplicationModel applicationModel = TestApplicationModel.Instance;

            StaticRouteSelector routeSelector = new StaticRouteSelector();

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = applicationModel.Controller4(),
                ActionModels    = applicationModel.Controller4().Actions,
            });

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = applicationModel.Controller2(),
                ActionModels    = applicationModel.Controller2().Actions,
            });

            ControllerModel translatedController = applicationModel.Controller4()
                                                   .CreateLocalizedControllerModel(GetLocalizer(), TranslatedRoutesRouteSelectorBuilderTest.Culture);

            foreach (SelectorModel selectorModel in translatedController.GetOriginalModel(GetLocalizer()).Selectors)
            {
                translatedController.Selectors.Add(selectorModel);
            }

            applicationModel.Controllers.Add(translatedController);

            ControllerModel translatedController2 = applicationModel.Controller2()
                                                    .CreateLocalizedControllerModel(GetLocalizer(), FilterRouteSelectorTest.Culture);

            for (int i = 0; i < translatedController2.Actions.Count; i++)
            {
                foreach (SelectorModel selectorModel in translatedController2.GetOriginalModel(GetLocalizer()).Actions[i].Selectors)
                {
                    translatedController2.Actions[i].Selectors.Add(selectorModel);
                }
            }

            applicationModel.Controllers.Add(translatedController2);

            FilterRouteSelector filterRouteSelector = new FilterRouteSelector(routeSelector)
            {
                Controller = "Controller4",
                Action     = "Action1",
                Localizer  = GetLocalizer(),
                Cultures   = new[] { FilterRouteSelectorTest.Culture },
                FilterControllerOrActionWhenNoTranslatedRouteLeft = true,
            };

            ICollection <RouteSelection> routeSelections = filterRouteSelector.Select(applicationModel);

            Assert.IsTrue(routeSelections.Count == 2);
            Assert.IsTrue(routeSelections.First().ActionModels.Count == 0);
            Assert.IsTrue(routeSelections.Last().ControllerModel.ControllerName == "Controller2");
            Assert.IsTrue(routeSelections.Last().ActionModels.Count == 2);
            Assert.IsTrue(routeSelections.Last().ActionModels.First().ActionName == "Action1");
            Assert.IsTrue(routeSelections.Last().ActionModels.Last().ActionName == "Action2");
        }
        public void SelectWithFilteredNoUntranslatedOptionReturnsCorrectSelection1()
        {
            ApplicationModel applicationModel = TestApplicationModel.Instance;

            StaticRouteSelector routeSelector = new StaticRouteSelector();

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = applicationModel.Controller4(),
                ActionModels    = applicationModel.Controller4().Actions,
            });

            routeSelector.RouteSelection.Add(new RouteSelection()
            {
                ControllerModel = applicationModel.Controller2(),
                ActionModels    = applicationModel.Controller2().Actions,
            });

            FilterRouteSelector filterRouteSelector = new FilterRouteSelector(routeSelector)
            {
                Controller      = "Controller4",
                Action          = "Action1",
                ActionArguments = new[] { typeof(int) },
                Localizer       = GetLocalizer(),
                Cultures        = new[] { FilterRouteSelectorTest.Culture },
                FilterControllerOrActionWhenNoUntranslatedRouteLeft = true,
            };

            ICollection <RouteSelection> routeSelections = filterRouteSelector.Select(applicationModel);

            Assert.IsTrue(routeSelections.Count == 2);
            Assert.IsTrue(routeSelections.First().ActionModels.Count == 1);
            Assert.IsTrue(routeSelections.First().ActionModels.Single().Parameters.Count == 0);
            Assert.IsTrue(routeSelections.Last().ControllerModel.ControllerName == "Controller2");
            Assert.IsTrue(routeSelections.Last().ActionModels.Count == 2);
            Assert.IsTrue(routeSelections.Last().ActionModels.First().ActionName == "Action1");
            Assert.IsTrue(routeSelections.Last().ActionModels.Last().ActionName == "Action2");
        }
Esempio n. 5
0
        public RouteTranslationBuilder Filter <T>(Expression <Action <T> > expression)
        {
            string actionName = null;

            Type[] actionArguments = null;

            if (expression != null)
            {
                MethodCallExpression methodCall = expression.Body as MethodCallExpression;

                if (methodCall == null)
                {
                    throw new ArgumentException("Expression must be a MethodCallExpression", nameof(expression));
                }

                actionName      = methodCall.Method.Name;
                actionArguments = methodCall.Arguments.Select(x => x.Type).ToArray();
            }

            if (CurrentRouteSelectorFunc == null)
            {
                throw new InvalidOperationException(
                          $"{typeof(FilterRouteSelector)} cannot be used before any RouteSelector is defined.");
            }

            Func <IRouteSelector> previousRouteSelectorFunc = CurrentRouteSelectorFunc;

            CurrentRouteSelectorFunc = (Func <FilterRouteSelector>)(() =>
            {
                FilterRouteSelector filterRouteSelector = new FilterRouteSelector(previousRouteSelectorFunc())
                {
                    Controller          = Regex.Replace(typeof(T).Name, "Controller$", string.Empty),
                    ControllerNamespace = typeof(T).Namespace,
                    Action          = actionName,
                    ActionArguments = actionArguments,
                    Localizer       = RouteTranslationConfiguration.Localizer,
                    Cultures        = CurrentCultures.ToArray(),
                };

                if ((previousRouteSelectorFunc as Func <FilterRouteSelector>) != null)
                {
                    FilterRouteSelector previousFilterRouteSelector = ((Func <FilterRouteSelector>)previousRouteSelectorFunc)();

                    filterRouteSelector.FilterControllerOrActionWhenNoTranslatedRouteLeft = previousFilterRouteSelector
                                                                                            .FilterControllerOrActionWhenNoTranslatedRouteLeft;
                    filterRouteSelector.FilterControllerOrActionWhenNoUntranslatedRouteLeft = previousFilterRouteSelector
                                                                                              .FilterControllerOrActionWhenNoUntranslatedRouteLeft;
                }

                if ((previousRouteSelectorFunc as Func <TranslatedRoutesRouteSelector>) != null)
                {
                    filterRouteSelector.FilterControllerOrActionWhenNoTranslatedRouteLeft = true;
                }

                if ((previousRouteSelectorFunc as Func <UntranslatedRoutesRouteSelector>) != null)
                {
                    filterRouteSelector.FilterControllerOrActionWhenNoUntranslatedRouteLeft = true;
                }

                return(filterRouteSelector);
            });

            return(this);
        }