From: Stephane Gamard Date: Fri, 23 May 2014 12:04:09 +0000 (+0200) Subject: SONAR-5237 - Fixed WS sorting and added WS Medium Tests X-Git-Tag: 4.4-RC1~853 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d4b44194c611e46e3d890a63f96d6f26ce181396;p=sonarqube.git SONAR-5237 - Fixed WS sorting and added WS Medium Tests --- diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java index e89731caec3..be170087a88 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java @@ -78,6 +78,15 @@ public class RuleNormalizer extends BaseNormalizer { return key; } + public static RuleField fromKey(String key){ + for(RuleField ruleField : RuleField.values()){ + if(ruleField.key().equals(key)){ + return ruleField; + } + } + return null; + } + @Override public String toString() { return key; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleQuery.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleQuery.java index a70a328b569..c3fda295626 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleQuery.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleQuery.java @@ -59,7 +59,8 @@ public class RuleQuery { */ @CheckForNull public static SortField valueOfOrNull(@Nullable String s) { - return s == null ? null : valueOf(s); + RuleNormalizer.RuleField ruleField = RuleNormalizer.RuleField.fromKey(s); + return ruleField == null ? null : SortField.valueOf(ruleField.name()); } } diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java index 2370285e09b..0fea3103698 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java @@ -39,6 +39,7 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto; import org.sonar.core.rule.RuleDto; import org.sonar.core.rule.RuleParamDto; import org.sonar.server.qualityprofile.persistence.ActiveRuleDao; +import org.sonar.server.rule2.index.RuleNormalizer; import org.sonar.server.rule2.persistence.RuleDao; import org.sonar.server.search.ws.SearchOptions; import org.sonar.server.tester.ServerTester; @@ -52,6 +53,10 @@ public class RulesWebServiceTest { @ClassRule public static ServerTester tester = new ServerTester(); + private static final String API_ENDPOINT = "api/rules"; + private static final String API_SEARCH_METHOD = "search"; + private static final String API_SHOW_METHOD = "show"; + private static final String API_TAGS_METHOD = "tags"; private RulesWebService ws; private RuleDao ruleDao; @@ -80,13 +85,13 @@ public class RulesWebServiceTest { WebService.Context context = new WebService.Context(); ws.define(context); - WebService.Controller controller = context.controller("api/rules"); + WebService.Controller controller = context.controller(API_ENDPOINT); assertThat(controller).isNotNull(); assertThat(controller.actions()).hasSize(6); - assertThat(controller.action("search")).isNotNull(); - assertThat(controller.action("show")).isNotNull(); - assertThat(controller.action("tags")).isNotNull(); + assertThat(controller.action(API_SEARCH_METHOD)).isNotNull(); + assertThat(controller.action(API_SHOW_METHOD)).isNotNull(); + assertThat(controller.action(API_TAGS_METHOD)).isNotNull(); assertThat(controller.action("set_tags")).isNotNull(); assertThat(controller.action("set_note")).isNotNull(); assertThat(controller.action("app")).isNotNull(); @@ -109,14 +114,14 @@ public class RulesWebServiceTest { MockUserSession.set(); // 1. With Activation - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "show"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SHOW_METHOD); request.setParam(ShowAction.PARAM_KEY, rule.getKey().toString()); request.setParam(ShowAction.PARAM_ACTIVES, "true"); WsTester.Result result = request.execute(); result.assertJson(this.getClass(), "show_rule_active.json", false); // 1. Default Activation (defaults to false) - request = wsTester.newGetRequest("api/rules", "show"); + request = wsTester.newGetRequest(API_ENDPOINT, API_SHOW_METHOD); request.setParam(ShowAction.PARAM_KEY, rule.getKey().toString()); result = request.execute(); result.assertJson(this.getClass(), "show_rule_no_active.json", false); @@ -127,7 +132,7 @@ public class RulesWebServiceTest { public void search_no_rules() throws Exception { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); WsTester.Result result = request.execute(); @@ -141,7 +146,7 @@ public class RulesWebServiceTest { session.commit(); MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); WsTester.Result result = request.execute(); result.assertJson(getClass(), "search_2_rules.json", false); @@ -159,7 +164,7 @@ public class RulesWebServiceTest { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "debtRemFn,debtChar"); WsTester.Result result = request.execute(); result.assertJson(this.getClass(), "search_debt_rule.json"); @@ -181,7 +186,7 @@ public class RulesWebServiceTest { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "S001"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); request.setParam(SearchOptions.PARAM_FIELDS, ""); @@ -213,7 +218,7 @@ public class RulesWebServiceTest { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "S001"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); request.setParam(SearchAction.PARAM_QPROFILE, profile2.getKey().toString()); @@ -260,7 +265,7 @@ public class RulesWebServiceTest { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "S001"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); request.setParam(SearchOptions.PARAM_FIELDS, "params"); @@ -287,7 +292,7 @@ public class RulesWebServiceTest { session.commit(); MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "tags"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_TAGS_METHOD); WsTester.Result result = request.execute(); result.assertJson(this.getClass(), "get_tags.json", false); @@ -306,7 +311,7 @@ public class RulesWebServiceTest { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "htmlNote, mdNote"); WsTester.Result result = request.execute(); result.assertJson(this.getClass(), "get_note_as_markdown_and_html.json"); @@ -323,13 +328,42 @@ public class RulesWebServiceTest { MockUserSession.set(); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "search"); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchAction.PARAM_TAGS, "tag1"); request.setParam(SearchOptions.PARAM_FIELDS, "sysTags, tags"); WsTester.Result result = request.execute(); result.assertJson(this.getClass(), "filter_by_tags.json"); } + @Test + public void sort_by_name() throws Exception { + ruleDao.insert(newRuleDto(RuleKey.of("java", "S001")).setName("a"), session); + ruleDao.insert(newRuleDto(RuleKey.of("java", "S002")).setName("b"), session); + session.commit(); + + + // 1. Sort Name Desc + MockUserSession.set(); + WsTester.TestRequest request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); + request.setParam(SearchOptions.PARAM_FIELDS, ""); + request.setParam(SearchOptions.PARAM_SORT, RuleNormalizer.RuleField.NAME.key()); + request.setParam(SearchOptions.PARAM_ASCENDING, Boolean.TRUE.toString()); + + WsTester.Result result = request.execute(); + result.assertJson("{\"total\":2,\"p\":1,\"ps\":10,\"rules\":[{\"key\":\"java:S001\"},{\"key\":\"java:S002\"}]}"); + + + // 2. Sort Name ASC + request = wsTester.newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); + request.setParam(SearchOptions.PARAM_FIELDS, ""); + request.setParam(SearchOptions.PARAM_SORT, RuleNormalizer.RuleField.NAME.key()); + request.setParam(SearchOptions.PARAM_ASCENDING, Boolean.FALSE.toString()); + + result = request.execute(); + result.assertJson("{\"total\":2,\"p\":1,\"ps\":10,\"rules\":[{\"key\":\"java:S002\"},{\"key\":\"java:S001\"}]}"); + + } + private QualityProfileDto newQualityProfile() { return new QualityProfileDto()