public void ChoosesActionWith2MatchingParametersOverActionWith1MatchingParameter() { // Arrange var incomingValues = new RouteValueDictionary(new{ a = 1, b = 2 }); var actions = new[] { new ControllerActionDescriptor { ControllerName = "Controller", ControllerTypeInfo = typeof(AController).GetTypeInfo(), MethodInfo = typeof(AController).GetMethod("A1", new[] { typeof(int) }), DisplayName = "A1", Parameters = new [] { new ParameterDescriptor { Name = "a", ParameterType = typeof(int) } } }, new ControllerActionDescriptor { ControllerName = "Controller", ControllerTypeInfo = typeof(AController).GetTypeInfo(), MethodInfo = typeof(AController).GetMethod("A2", new[] { typeof(int), typeof(float) }), DisplayName = "A2", Parameters = new [] { new ParameterDescriptor { Name = "a", ParameterType = typeof(int) }, new ParameterDescriptor { Name = "b", ParameterType = typeof(float) }, } }, new ControllerActionDescriptor { ControllerName = "Controller", ControllerTypeInfo = typeof(AController).GetTypeInfo(), MethodInfo = typeof(AController).GetMethod("A3", new[] { typeof(int), typeof(int) }), DisplayName = "A3", Parameters = new [] { new ParameterDescriptor { Name = "a", ParameterType = typeof(int) }, new ParameterDescriptor { Name = "b", ParameterType = typeof(int) }, } } }; // Act actions .OrderByDescending(a => ScoreByParameterNameAndConvertibility.Score(incomingValues, a)) .Select(a => a.DisplayName) .ShouldEqualByValue(new[] { "A3", "A2", "A1" }); }
public void ScoreGivenRouteValuesA1BBCC_IsAsPerAlgorithm(Type type, int expectedScore) { var incomingValues = new RouteValueDictionary(new { a = 1, b = "b", c = "c" }); var action = new ActionDescriptor { Parameters = new[] { new ParameterDescriptor { Name = "a", ParameterType = type } } }; ScoreByParameterNameAndConvertibility.Score(incomingValues, action).ShouldBe(expectedScore); }