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";
.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")
.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
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;
}
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")));
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")));
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")));
@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();