]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5237 - Fixed WS sorting and added WS Medium Tests
authorStephane Gamard <stephane.gamard@searchbox.com>
Fri, 23 May 2014 12:04:09 +0000 (14:04 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Fri, 23 May 2014 15:39:03 +0000 (17:39 +0200)
sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java
sonar-server/src/main/java/org/sonar/server/rule2/index/RuleQuery.java
sonar-server/src/test/java/org/sonar/server/rule2/ws/RulesWebServiceTest.java

index e89731caec3eaa3713579a78a572922167e8d86b..be170087a8897ddeb6001f36310577f423b73806 100644 (file)
@@ -78,6 +78,15 @@ public class RuleNormalizer extends BaseNormalizer<RuleDto, RuleKey> {
       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;
index a70a328b56958f0c571053d45536ead9f9906d69..c3fda295626a7a1d99f0e5680fc0a1c0413eac67 100644 (file)
@@ -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());
     }
   }
 
index 2370285e09bea412777b8089e38d8ef908b9aae4..0fea31036982e609ec9938635608c42f15c18ffd 100644 (file)
@@ -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()