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