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"); }
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); }