@@ -21,6 +21,8 @@ package org.sonar.server.rule.ws; | |||
import java.text.ParseException; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Comparator; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.Optional; | |||
import org.junit.Rule; | |||
@@ -73,8 +75,9 @@ public class ListActionIT { | |||
@Test | |||
public void execute_shouldReturnRules() { | |||
db.rules().insert(RuleTesting.newRule(RuleKey.parse(RULE_KEY_1)).setConfigKey(null).setName(null)); | |||
db.rules().insert(RuleTesting.newRule(RuleKey.parse(RULE_KEY_2)).setConfigKey("I002").setName("Rule Two")); | |||
List<RuleDto> rules = List.of( | |||
db.rules().insert(RuleTesting.newRule(RuleKey.parse(RULE_KEY_1)).setConfigKey(null).setName(null)), | |||
db.rules().insert(RuleTesting.newRule(RuleKey.parse(RULE_KEY_2)).setConfigKey("I002").setName("Rule Two"))); | |||
db.getSession().commit(); | |||
Rules.ListResponse listResponse = ws.newRequest() | |||
@@ -91,6 +94,24 @@ public class ListActionIT { | |||
assertThat(ruleS002.getKey()).isEqualTo(RULE_KEY_2); | |||
assertThat(ruleS002.getInternalKey()).isEqualTo("I002"); | |||
assertThat(ruleS002.getName()).isEqualTo("Rule Two"); | |||
assertThat(listResponse.getRulesList()).extracting(Rules.Rule::getKey).containsExactly( | |||
rules.stream().sorted(Comparator.comparing(RuleDto::getUuid)).map(rule -> rule.getKey().toString()).toArray(String[]::new)); | |||
} | |||
@Test | |||
public void execute_whenSortingDefined_shouldReturnSortedRules() { | |||
db.rules().insert(RuleTesting.newRule(RuleKey.parse(RULE_KEY_1)).setCreatedAt(2_000_000L)); | |||
db.rules().insert(RuleTesting.newRule(RuleKey.parse(RULE_KEY_2)).setCreatedAt(1_000_000L)); | |||
db.getSession().commit(); | |||
Rules.ListResponse listResponse = ws.newRequest() | |||
.setParam(WebService.Param.SORT, "createdAt") | |||
.setParam(WebService.Param.ASCENDING, "true") | |||
.executeProtobuf(Rules.ListResponse.class); | |||
assertThat(listResponse.getRulesCount()).isEqualTo(2); | |||
assertThat(listResponse.getRulesList()).extracting(Rules.Rule::getKey).containsExactly(RULE_KEY_2, RULE_KEY_1); | |||
} | |||
@Test |
@@ -21,7 +21,6 @@ package org.sonar.server.rule.ws; | |||
import com.google.common.collect.Maps; | |||
import java.util.Date; | |||
import java.util.LinkedList; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.Objects; | |||
@@ -81,7 +80,9 @@ public class ListAction implements RulesWsAction { | |||
new Change("10.4", "Add pagination"), | |||
new Change("10.4", String.format("Add the '%s' parameter", PARAM_AVAILABLE_SINCE)), | |||
new Change("10.4", String.format("Add the '%s' parameter", PARAM_QPROFILE)), | |||
new Change("10.4", "Add the 'createdAt' sorting parameter")); | |||
new Change("10.4", "Add the 'createdAt' sorting field"), | |||
new Change("10.5", String.format("The sorting parameter '%s' no longer has a default value (was 'createdAt')", | |||
WebService.Param.SORT))); | |||
action.createParam(PARAM_AVAILABLE_SINCE) | |||
.setDescription("Filter rules available since the given date. If no value is provided, all rules are returned. Format is yyyy-MM-dd.") | |||
@@ -90,7 +91,7 @@ public class ListAction implements RulesWsAction { | |||
action.createParam(PARAM_QPROFILE) | |||
.setDescription("Filter rules that are activated in the given quality profile.") | |||
.setSince("10.4"); | |||
action.createSortParams(Set.of("createdAt"), "createdAt", false) | |||
action.createSortParams(Set.of("createdAt"), null, false) | |||
.setSince("10.4"); | |||
action.addPagingParamsSince(100, 500, "10.4"); | |||
} | |||
@@ -139,7 +140,7 @@ public class ListAction implements RulesWsAction { | |||
Pagination.forPage(wsRequest.page).andSize(wsRequest.pageSize)); | |||
Map<String, RuleDto> rulesByUuid = Maps.uniqueIndex(dbClient.ruleDao().selectByUuids(dbSession, ruleListResult.getUuids()), RuleDto::getUuid); | |||
Set<String> ruleUuids = rulesByUuid.keySet(); | |||
List<RuleDto> rules = new LinkedList<>(rulesByUuid.values()); | |||
List<RuleDto> rules = ruleListResult.getUuids().stream().map(rulesByUuid::get).toList(); | |||
List<String> templateRuleUuids = rules.stream() | |||
.map(RuleDto::getTemplateUuid) |