]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5237 - Added rule_key param as filter for search
authorStephane Gamard <stephane.gamard@searchbox.com>
Thu, 5 Jun 2014 15:06:46 +0000 (17:06 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Thu, 5 Jun 2014 15:06:46 +0000 (17:06 +0200)
sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java
sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java
sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceTest.java

index 365efd0a01ae4e9f26e79de17b85f25019280e49..2139b3145c2f005c411e6cfec4d7f4ad843f6a2c 100644 (file)
@@ -48,6 +48,7 @@ import java.util.Map;
 public class SearchAction implements RequestHandler {
 
   public static final String PARAM_REPOSITORIES = "repositories";
+  public static final String PARAM_KEY = "rule_key";
   public static final String PARAM_ACTIVATION = "activation";
   public static final String PARAM_QPROFILE = "qprofile";
   public static final String PARAM_SEVERITIES = "severities";
@@ -107,6 +108,11 @@ public class SearchAction implements RequestHandler {
       .setDescription("UTF-8 search query")
       .setExampleValue("xpath");
 
+    action
+      .createParam(PARAM_KEY)
+      .setDescription("Single or list of keys of rule to search for")
+      .setExampleValue("squid:S001");
+
     action
       .createParam(PARAM_REPOSITORIES)
       .setDescription("Comma-separated list of repositories")
@@ -173,7 +179,7 @@ public class SearchAction implements RequestHandler {
       .setPossibleValues(ActiveRule.Inheritance.NONE.name(),
         ActiveRule.Inheritance.INHERITED.name(),
         ActiveRule.Inheritance.OVERRIDES.name())
-      .setExampleValue(ActiveRule.Inheritance.INHERITED.name()+","+
+      .setExampleValue(ActiveRule.Inheritance.INHERITED.name() + "," +
         ActiveRule.Inheritance.OVERRIDES.name());
 
     action
@@ -241,6 +247,7 @@ public class SearchAction implements RequestHandler {
     query.setInheritance(request.paramAsStrings(PARAM_INHERITANCE));
     query.setIsTemplate(request.paramAsBoolean(PARAM_IS_TEMPLATE));
     query.setTemplateKey(request.param(PARAM_TEMPLATE_KEY));
+    query.setKey(request.param(PARAM_KEY));
     return query;
   }
 
index 0bd00f3e9d213283986598cde8bc87415621cbf0..4bdf3c4e3b1ef33e94008b2839df36d70a4c421b 100644 (file)
@@ -226,6 +226,28 @@ public class RuleIndexMediumTest {
     assertThat(index.search(query, new QueryOptions()).getHits()).hasSize(1);
   }
 
+  @Test
+  public void filter_by_key() {
+    dao.insert(dbSession, newRuleDto(RuleKey.of("javascript", "X001")));
+    dao.insert(dbSession, newRuleDto(RuleKey.of("cobol", "X001")));
+    dao.insert(dbSession, newRuleDto(RuleKey.of("php", "S002")));
+    dbSession.commit();
+
+
+    // key
+    RuleQuery query = new RuleQuery().setKey("X001");
+    assertThat(index.search(query, new QueryOptions()).getHits()).hasSize(2);
+
+    // partial key does not match
+    query = new RuleQuery().setQueryText("X00");
+    //TODO fix non-partial match for Key search
+    assertThat(index.search(query, new QueryOptions()).getHits()).isEmpty();
+
+    // repo:key -> nice-to-have !
+    query = new RuleQuery().setQueryText("javascript:X001");
+    assertThat(index.search(query, new QueryOptions()).getHits()).hasSize(1);
+  }
+
   @Test
   public void search_all_rules() throws InterruptedException {
     dao.insert(dbSession, newRuleDto(RuleKey.of("javascript", "S001")));
@@ -737,7 +759,7 @@ public class RuleIndexMediumTest {
     assertThat(index.getByKey(RuleKey.of("java", "S001_MY_CUSTOM")).templateKey()).isEqualTo(RuleKey.of("java", "S001"));
   }
 
-    @Test
+  @Test
   public void paging() {
     dao.insert(dbSession, newRuleDto(RuleKey.of("java", "S001")));
     dao.insert(dbSession, newRuleDto(RuleKey.of("java", "S002")));
index 2631ad291929a265166416d33188a8c9e1bb9595..a3ab5339dd5aa14131564d35b69c29360f3a257f 100644 (file)
@@ -138,6 +138,27 @@ public class RulesWebServiceTest {
     result.assertJson(this.getClass(), "search_no_rules.json");
   }
 
+  @Test
+  public void filter_by_key_rules() throws Exception {
+    ruleDao.insert(session, newRuleDto(RuleKey.of("javascript", "S001")));
+    ruleDao.insert(session, newRuleDto(RuleKey.of("javascript", "S002")));
+    session.commit();
+
+    MockUserSession.set();
+    WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD);
+    request.setParam(SearchAction.PARAM_KEY, RuleKey.of("javascript", "S001").toString());
+    request.setParam(SearchOptions.PARAM_FIELDS, "");
+    WsTester.Result result = request.execute();
+    result.assertJson("{\"total\":1,\"p\":1,\"ps\":10,\"rules\":[{\"key\":\"javascript:S001\"}]}");
+
+    request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD);
+    request.setParam(SearchAction.PARAM_KEY, RuleKey.of("javascript", "S011").toString());
+    result = request.execute();
+    result.assertJson("{\"total\":0,\"p\":1,\"ps\":10,\"rules\":[],\"actives\":{}}");
+    System.out.println("result.outputAsString() = " + result.outputAsString());
+
+  }
+
   @Test
   public void search_2_rules() throws Exception {
     ruleDao.insert(session, newRuleDto(RuleKey.of("javascript", "S001")));
@@ -391,7 +412,8 @@ public class RulesWebServiceTest {
 
   @Test
   public void available_since() throws Exception {
-    ruleDao.insert(session, newRuleDto(RuleKey.of("java", "S002")));;
+    ruleDao.insert(session, newRuleDto(RuleKey.of("java", "S002")));
+    ;
     ruleDao.insert(session, newRuleDto(RuleKey.of("java", "S001")));
     session.commit();