浏览代码

SONAR-21776 Fix api/rules/list sorting

tags/10.5.0.89998
Eric Giffon 2 个月前
父节点
当前提交
1b90ac2d10

+ 23
- 2
server/sonar-webserver-webapi/src/it/java/org/sonar/server/rule/ws/ListActionIT.java 查看文件



import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.junit.Rule; import org.junit.Rule;


@Test @Test
public void execute_shouldReturnRules() { 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(); db.getSession().commit();


Rules.ListResponse listResponse = ws.newRequest() Rules.ListResponse listResponse = ws.newRequest()
assertThat(ruleS002.getKey()).isEqualTo(RULE_KEY_2); assertThat(ruleS002.getKey()).isEqualTo(RULE_KEY_2);
assertThat(ruleS002.getInternalKey()).isEqualTo("I002"); assertThat(ruleS002.getInternalKey()).isEqualTo("I002");
assertThat(ruleS002.getName()).isEqualTo("Rule Two"); 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 @Test

+ 5
- 4
server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ListAction.java 查看文件



import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import java.util.Date; import java.util.Date;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
new Change("10.4", "Add pagination"), 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_AVAILABLE_SINCE)),
new Change("10.4", String.format("Add the '%s' parameter", PARAM_QPROFILE)), 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) 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.") .setDescription("Filter rules available since the given date. If no value is provided, all rules are returned. Format is yyyy-MM-dd.")
action.createParam(PARAM_QPROFILE) action.createParam(PARAM_QPROFILE)
.setDescription("Filter rules that are activated in the given quality profile.") .setDescription("Filter rules that are activated in the given quality profile.")
.setSince("10.4"); .setSince("10.4");
action.createSortParams(Set.of("createdAt"), "createdAt", false)
action.createSortParams(Set.of("createdAt"), null, false)
.setSince("10.4"); .setSince("10.4");
action.addPagingParamsSince(100, 500, "10.4"); action.addPagingParamsSince(100, 500, "10.4");
} }
Pagination.forPage(wsRequest.page).andSize(wsRequest.pageSize)); Pagination.forPage(wsRequest.page).andSize(wsRequest.pageSize));
Map<String, RuleDto> rulesByUuid = Maps.uniqueIndex(dbClient.ruleDao().selectByUuids(dbSession, ruleListResult.getUuids()), RuleDto::getUuid); Map<String, RuleDto> rulesByUuid = Maps.uniqueIndex(dbClient.ruleDao().selectByUuids(dbSession, ruleListResult.getUuids()), RuleDto::getUuid);
Set<String> ruleUuids = rulesByUuid.keySet(); 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() List<String> templateRuleUuids = rules.stream()
.map(RuleDto::getTemplateUuid) .map(RuleDto::getTemplateUuid)

正在加载...
取消
保存