From: Stephane Gamard Date: Thu, 5 Jun 2014 15:06:46 +0000 (+0200) Subject: SONAR-5237 - Added rule_key param as filter for search X-Git-Tag: 4.4-RC1~594 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8b902f1e952ff82a64edcd39c98b1471bfd02816;p=sonarqube.git SONAR-5237 - Added rule_key param as filter for search --- diff --git a/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java b/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java index 365efd0a01a..2139b3145c2 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java @@ -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; } diff --git a/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java b/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java index 0bd00f3e9d2..4bdf3c4e3b1 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java @@ -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"))); diff --git a/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceTest.java b/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceTest.java index 2631ad29192..a3ab5339dd5 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceTest.java @@ -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();