diff options
author | Michal Duda <michal.duda@sonarsource.com> | 2021-03-11 20:52:24 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2021-03-17 20:08:34 +0000 |
commit | 4e76eae61a9cc708dde1e71d1895dfbb810f63ce (patch) | |
tree | 1b268245f8ebfb51e23f00e2588e87ed2661690b /server | |
parent | b65f41e7553d520a095509d3db7fca15302547f3 (diff) | |
download | sonarqube-4e76eae61a9cc708dde1e71d1895dfbb810f63ce.tar.gz sonarqube-4e76eae61a9cc708dde1e71d1895dfbb810f63ce.zip |
SONAR-14192 Add optional return field 'deprecatedKeys' to /api/rules/search
Diffstat (limited to 'server')
11 files changed, 155 insertions, 24 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java index 4225bb87f4d..10a40db90cb 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDao.java @@ -224,6 +224,10 @@ public class RuleDao implements Dao { return mapper(session).selectAllDeprecatedRuleKeys(); } + public Set<DeprecatedRuleKeyDto> selectDeprecatedRuleKeysByRuleUuids(DbSession session, Collection<String> ruleUuids) { + return mapper(session).selectDeprecatedRuleKeysByRuleUuids(ruleUuids); + } + public void deleteDeprecatedRuleKeys(DbSession dbSession, Collection<String> uuids) { if (uuids.isEmpty()) { return; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java index 31a0ef9be7b..d4d61573244 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleMapper.java @@ -19,6 +19,7 @@ */ package org.sonar.db.rule; +import java.util.Collection; import java.util.List; import java.util.Set; import org.apache.ibatis.annotations.Param; @@ -86,6 +87,8 @@ public interface RuleMapper { Set<DeprecatedRuleKeyDto> selectAllDeprecatedRuleKeys(); + Set<DeprecatedRuleKeyDto> selectDeprecatedRuleKeysByRuleUuids(@Param("ruleUuids") Collection<String> ruleUuids); + void deleteDeprecatedRuleKeys(@Param("uuids") List<String> uuids); void insertDeprecatedRuleKey(DeprecatedRuleKeyDto deprecatedRuleKeyDto); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml index e8967deffaa..fb4c67409a8 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/rule/RuleMapper.xml @@ -553,6 +553,24 @@ LEFT OUTER JOIN rules r on r.uuid = drk.rule_uuid </select> + <select id="selectDeprecatedRuleKeysByRuleUuids" resultType="org.sonar.db.rule.DeprecatedRuleKeyDto"> + SELECT + drk.uuid, + drk.rule_uuid as "ruleUuid", + drk.old_repository_key as "oldRepositoryKey", + drk.old_rule_key as "oldRuleKey", + r.plugin_rule_key as "newRuleKey", + r.plugin_name as "newRepositoryKey", + drk.created_at as "createdAt" + FROM + deprecated_rule_keys drk + LEFT OUTER JOIN rules r on r.uuid = drk.rule_uuid + WHERE + <foreach item="uuid" index="index" collection="ruleUuids" open="(" separator=" or " close=")"> + drk.rule_uuid=#{uuid,jdbcType=VARCHAR} + </foreach> + </select> + <delete id="deleteDeprecatedRuleKeys"> DELETE FROM deprecated_rule_keys diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java index 3a2d3fe768f..5180c858067 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/rule/RuleDaoTest.java @@ -19,6 +19,7 @@ */ package org.sonar.db.rule; +import com.google.common.collect.ImmutableSet; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -62,7 +63,7 @@ public class RuleDaoTest { @Rule public DbTester db = DbTester.create(System2.INSTANCE); - private RuleDao underTest = db.getDbClient().ruleDao(); + private final RuleDao underTest = db.getDbClient().ruleDao(); @Test public void selectByKey() { @@ -388,8 +389,8 @@ public class RuleDaoTest { .setLanguage("java")); db.rules().insertOrUpdateMetadata(rule1); - assertThat(underTest.selectByTypeAndLanguages(db.getSession(),singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) - .extracting( RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) + assertThat(underTest.selectByTypeAndLanguages(db.getSession(), singletonList(RuleType.VULNERABILITY.getDbConstant()), singletonList("java"))) + .extracting(RuleDto::getUuid, RuleDto::getLanguage, RuleDto::getType) .isEmpty(); } @@ -904,6 +905,27 @@ public class RuleDaoTest { } @Test + public void selectDeprecatedRuleKeysByRuleUuids() { + RuleDefinitionDto r1 = db.rules().insert(); + RuleDefinitionDto r2 = db.rules().insert(); + RuleDefinitionDto r3 = db.rules().insert(); + RuleDefinitionDto r4 = db.rules().insert(); + + DeprecatedRuleKeyDto drk1 = db.rules().insertDeprecatedKey(r -> r.setRuleUuid(r1.getUuid())); + DeprecatedRuleKeyDto drk2 = db.rules().insertDeprecatedKey(r -> r.setRuleUuid(r1.getUuid())); + DeprecatedRuleKeyDto drk3 = db.rules().insertDeprecatedKey(r -> r.setRuleUuid(r2.getUuid())); + db.rules().insertDeprecatedKey(r -> r.setRuleUuid(r4.getUuid())); + + db.getSession().commit(); + + Set<DeprecatedRuleKeyDto> deprecatedRuleKeyDtos = underTest.selectDeprecatedRuleKeysByRuleUuids( + db.getSession(), ImmutableSet.of(r1.getUuid(), r2.getUuid(), r3.getUuid())); + assertThat(deprecatedRuleKeyDtos) + .extracting(DeprecatedRuleKeyDto::getUuid) + .containsExactlyInAnyOrder(drk1.getUuid(), drk2.getUuid(), drk3.getUuid()); + } + + @Test public void selectAllDeprecatedRuleKeys_return_values_even_if_there_is_no_rule() { db.rules().insertDeprecatedKey(); db.rules().insertDeprecatedKey(); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleMapper.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleMapper.java index c72f2de15f3..8209c953c78 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleMapper.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RuleMapper.java @@ -20,16 +20,20 @@ package org.sonar.server.rule.ws; import com.google.common.base.Function; +import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import org.sonar.api.resources.Language; import org.sonar.api.resources.Languages; +import org.sonar.api.rule.RuleKey; import org.sonar.api.server.debt.DebtRemediationFunction; import org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction; +import org.sonar.db.rule.DeprecatedRuleKeyDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleDto.Scope; @@ -44,7 +48,6 @@ import org.sonarqube.ws.Common; import org.sonarqube.ws.Common.RuleScope; import org.sonarqube.ws.Rules; -import static java.lang.String.format; import static org.sonar.api.utils.DateUtils.formatDateTime; import static org.sonar.core.util.stream.MoreCollectors.toList; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_CREATED_AT; @@ -52,6 +55,7 @@ import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEBT_OVERLOADED; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEBT_REM_FUNCTION; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEFAULT_DEBT_REM_FUNCTION; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEFAULT_REM_FUNCTION; +import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEPRECATED_KEYS; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_EFFORT_TO_FIX_DESCRIPTION; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_GAP_DESCRIPTION; import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_HTML_DESCRIPTION; @@ -89,19 +93,21 @@ public class RuleMapper { public Rules.Rule toWsRule(RuleDefinitionDto ruleDefinitionDto, SearchResult result, Set<String> fieldsToReturn) { Rules.Rule.Builder ruleResponse = Rules.Rule.newBuilder(); - applyRuleDefinition(ruleResponse, ruleDefinitionDto, result, fieldsToReturn); + applyRuleDefinition(ruleResponse, ruleDefinitionDto, result, fieldsToReturn, Collections.emptyMap()); return ruleResponse.build(); } - public Rules.Rule toWsRule(RuleDefinitionDto ruleDefinition, SearchResult result, Set<String> fieldsToReturn, RuleMetadataDto metadata, Map<String, UserDto> usersByUuid) { + public Rules.Rule toWsRule(RuleDefinitionDto ruleDefinition, SearchResult result, Set<String> fieldsToReturn, RuleMetadataDto metadata, + Map<String, UserDto> usersByUuid, Map<String, List<DeprecatedRuleKeyDto>> deprecatedRuleKeysByRuleUuid) { Rules.Rule.Builder ruleResponse = Rules.Rule.newBuilder(); - applyRuleDefinition(ruleResponse, ruleDefinition, result, fieldsToReturn); + applyRuleDefinition(ruleResponse, ruleDefinition, result, fieldsToReturn, deprecatedRuleKeysByRuleUuid); applyRuleMetadata(ruleResponse, ruleDefinition, metadata, usersByUuid, fieldsToReturn); setDebtRemediationFunctionFields(ruleResponse, ruleDefinition, metadata, fieldsToReturn); return ruleResponse.build(); } - private Rules.Rule.Builder applyRuleDefinition(Rules.Rule.Builder ruleResponse, RuleDefinitionDto ruleDefinitionDto, SearchResult result, Set<String> fieldsToReturn) { + private Rules.Rule.Builder applyRuleDefinition(Rules.Rule.Builder ruleResponse, RuleDefinitionDto ruleDefinitionDto, SearchResult result, + Set<String> fieldsToReturn, Map<String, List<DeprecatedRuleKeyDto>> deprecatedRuleKeysByRuleUuid) { // Mandatory fields ruleResponse.setKey(ruleDefinitionDto.getKey().toString()); @@ -125,6 +131,7 @@ public class RuleMapper { setDefaultDebtRemediationFunctionFields(ruleResponse, ruleDefinitionDto, fieldsToReturn); setEffortToFixDescription(ruleResponse, ruleDefinitionDto, fieldsToReturn); setScope(ruleResponse, ruleDefinitionDto, fieldsToReturn); + setDeprecatedKeys(ruleResponse, ruleDefinitionDto, fieldsToReturn, deprecatedRuleKeysByRuleUuid); return ruleResponse; } @@ -181,6 +188,23 @@ public class RuleMapper { } } + private static void setDeprecatedKeys(Rules.Rule.Builder ruleResponse, RuleDefinitionDto ruleDto, Set<String> fieldsToReturn, + Map<String, List<DeprecatedRuleKeyDto>> deprecatedRuleKeysByRuleUuid) { + if (shouldReturnField(fieldsToReturn, FIELD_DEPRECATED_KEYS)) { + List<DeprecatedRuleKeyDto> deprecatedRuleKeyDtos = deprecatedRuleKeysByRuleUuid.get(ruleDto.getUuid()); + if (deprecatedRuleKeyDtos == null) { + return; + } + + List<String> deprecatedKeys = deprecatedRuleKeyDtos.stream() + .map(r -> RuleKey.of(r.getOldRepositoryKey(), r.getOldRuleKey()).toString()) + .collect(Collectors.toList()); + if (!deprecatedKeys.isEmpty()) { + ruleResponse.setDeprecatedKeys(Rules.DeprecatedKeys.newBuilder().addAllDeprecatedKey(deprecatedKeys).build()); + } + } + } + private static RuleScope toWsRuleScope(Scope scope) { switch (scope) { case ALL: @@ -375,7 +399,7 @@ public class RuleMapper { } } - private static boolean shouldReturnField(Set<String> fieldsToReturn, String fieldName) { + public static boolean shouldReturnField(Set<String> fieldsToReturn, String fieldName) { return fieldsToReturn.isEmpty() || fieldsToReturn.contains(fieldName); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java index abcedd10cd2..b301e0d6faf 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/RulesWsParameters.java @@ -100,12 +100,14 @@ public class RulesWsParameters { public static final String FIELD_PARAMS = "params"; public static final String FIELD_ACTIVES = "actives"; + public static final String FIELD_DEPRECATED_KEYS = "deprecatedKeys"; + public static final Set<String> OPTIONAL_FIELDS = ImmutableSet.of(FIELD_REPO, FIELD_NAME, FIELD_CREATED_AT, FIELD_UPDATED_AT, FIELD_SEVERITY, FIELD_STATUS, FIELD_INTERNAL_KEY, FIELD_IS_EXTERNAL, FIELD_IS_TEMPLATE, FIELD_TEMPLATE_KEY, FIELD_TAGS, FIELD_SYSTEM_TAGS, FIELD_LANGUAGE, FIELD_LANGUAGE_NAME, FIELD_HTML_DESCRIPTION, FIELD_MARKDOWN_DESCRIPTION, FIELD_NOTE_LOGIN, FIELD_MARKDOWN_NOTE, FIELD_HTML_NOTE, FIELD_DEFAULT_DEBT_REM_FUNCTION, FIELD_EFFORT_TO_FIX_DESCRIPTION, FIELD_DEBT_OVERLOADED, FIELD_DEBT_REM_FUNCTION, FIELD_DEFAULT_REM_FUNCTION, FIELD_GAP_DESCRIPTION, FIELD_REM_FUNCTION_OVERLOADED, FIELD_REM_FUNCTION, - FIELD_PARAMS, FIELD_ACTIVES, FIELD_SCOPE); + FIELD_PARAMS, FIELD_ACTIVES, FIELD_SCOPE, FIELD_DEPRECATED_KEYS); private RulesWsParameters() { // prevent instantiation diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java index 22e2025522b..63f67a97384 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/SearchAction.java @@ -27,6 +27,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -46,6 +47,7 @@ import org.sonar.api.server.ws.WebService; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbClient; import org.sonar.db.DbSession; +import org.sonar.db.rule.DeprecatedRuleKeyDto; import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.db.rule.RuleDto; import org.sonar.db.rule.RuleParamDto; @@ -78,6 +80,7 @@ import static org.sonar.server.rule.index.RuleIndex.FACET_SONARSOURCE_SECURITY; import static org.sonar.server.rule.index.RuleIndex.FACET_STATUSES; import static org.sonar.server.rule.index.RuleIndex.FACET_TAGS; import static org.sonar.server.rule.index.RuleIndex.FACET_TYPES; +import static org.sonar.server.rule.ws.RulesWsParameters.FIELD_DEPRECATED_KEYS; import static org.sonar.server.rule.ws.RulesWsParameters.OPTIONAL_FIELDS; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_ACTIVE_SEVERITIES; import static org.sonar.server.rule.ws.RulesWsParameters.PARAM_CWE; @@ -205,7 +208,25 @@ public class SearchAction implements RulesWsAction { private void writeRules(DbSession dbSession, SearchResponse.Builder response, SearchResult result, SearchOptions context) { Map<String, UserDto> usersByUuid = ruleWsSupport.getUsersByUuid(dbSession, result.rules); - result.rules.forEach(rule -> response.addRules(mapper.toWsRule(rule.getDefinition(), result, context.getFields(), rule.getMetadata(), usersByUuid))); + Map<String, List<DeprecatedRuleKeyDto>> deprecatedRuleKeysByRuleUuid = getDeprecatedRuleKeysByRuleUuid(dbSession, result.rules, context); + result.rules.forEach(rule -> response.addRules(mapper.toWsRule(rule.getDefinition(), result, context.getFields(), rule.getMetadata(), usersByUuid, + deprecatedRuleKeysByRuleUuid))); + } + + private Map<String, List<DeprecatedRuleKeyDto>> getDeprecatedRuleKeysByRuleUuid(DbSession dbSession, List<RuleDto> rules, SearchOptions context) { + if (!RuleMapper.shouldReturnField(context.getFields(), FIELD_DEPRECATED_KEYS)) { + return Collections.emptyMap(); + } + + Set<String> ruleUuidsSet = rules.stream() + .map(RuleDto::getUuid) + .collect(Collectors.toSet()); + if (ruleUuidsSet.isEmpty()) { + return Collections.emptyMap(); + } else { + return dbClient.ruleDao().selectDeprecatedRuleKeysByRuleUuids(dbSession, ruleUuidsSet).stream() + .collect(Collectors.groupingBy(DeprecatedRuleKeyDto::getRuleUuid)); + } } private static SearchOptions buildSearchOptions(SearchRequest request) { diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java index c4e89e6df48..d5fa9c9cf54 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/ShowAction.java @@ -35,6 +35,7 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonarqube.ws.Rules.ShowResponse; import static java.lang.String.format; +import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static java.util.Optional.ofNullable; import static org.sonar.server.ws.WsUtils.writeProtobuf; @@ -117,7 +118,7 @@ public class ShowAction implements RulesWsAction { ShowResponse.Builder responseBuilder = ShowResponse.newBuilder(); RuleDto rule = searchResult.getRules().get(0); responseBuilder.setRule(mapper.toWsRule(rule.getDefinition(), searchResult, Collections.emptySet(), rule.getMetadata(), - ruleWsSupport.getUsersByUuid(dbSession, searchResult.getRules()))); + ruleWsSupport.getUsersByUuid(dbSession, searchResult.getRules()), emptyMap())); if (request.mandatoryParamAsBoolean(PARAM_ACTIVES)) { activeRuleCompleter.completeShow(dbSession, rule.getDefinition()).forEach(responseBuilder::addActives); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java index 65e86bab8bd..4439524e04c 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/ws/UpdateAction.java @@ -47,6 +47,7 @@ import org.sonarqube.ws.Rules.UpdateResponse; import static com.google.common.collect.Sets.newHashSet; import static java.lang.String.format; +import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static java.util.Optional.ofNullable; import static org.sonar.server.rule.ws.CreateAction.KEY_MAXIMUM_LENGTH; @@ -249,7 +250,8 @@ public class UpdateAction implements RulesWsAction { .setRuleParameters(ruleParameters) .setTotal(1L); responseBuilder - .setRule(mapper.toWsRule(rule.getDefinition(), searchResult, Collections.emptySet(), rule.getMetadata(), ruleWsSupport.getUsersByUuid(dbSession, singletonList(rule)))); + .setRule(mapper.toWsRule(rule.getDefinition(), searchResult, Collections.emptySet(), rule.getMetadata(), + ruleWsSupport.getUsersByUuid(dbSession, singletonList(rule)), emptyMap())); return responseBuilder.build(); } diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java index a6b34dc482b..162ddbc1456 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/SearchActionTest.java @@ -298,6 +298,39 @@ public class SearchActionTest { } @Test + public void return_deprecatedKeys_in_response_on_demand() { + RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); + db.rules().insertDeprecatedKey(r -> r.setRuleUuid(rule1.getUuid()).setOldRuleKey("oldrulekey").setOldRepositoryKey("oldrepositorykey")); + db.rules().insertDeprecatedKey(r -> r.setRuleUuid(rule1.getUuid()).setOldRuleKey("oldrulekey2").setOldRepositoryKey("oldrepositorykey2")); + RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("javascript")); + + indexRules(); + + Rules.SearchResponse response = ws.newRequest() + .setParam(WebService.Param.FIELDS, "deprecatedKeys") + .executeProtobuf(Rules.SearchResponse.class); + + System.err.println(response.getRulesList()); + + assertThat(response.getRulesList()).satisfies(l -> { + assertThat(l).hasSize(2); + + assertThat(l).anySatisfy(e -> { + assertThat(e.getKey()).isEqualTo(rule1.getKey().toString()); + assertThat(e.getType().getNumber()).isEqualTo(rule1.getType()); + assertThat(e.getDeprecatedKeys()).isNotNull(); + assertThat(e.getDeprecatedKeys().getDeprecatedKeyList()).contains("oldrepositorykey:oldrulekey", "oldrepositorykey2:oldrulekey2"); + }); + assertThat(l).anySatisfy(e -> { + assertThat(e.getKey()).isEqualTo(rule2.getKey().toString()); + assertThat(e.getType().getNumber()).isEqualTo(rule2.getType()); + assertThat(e.getDeprecatedKeys()).isNotNull(); + assertThat(e.getDeprecatedKeys().getDeprecatedKeyList()).isEmpty(); + }); + }); + } + + @Test public void should_filter_on_specific_tags() { RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("java")); RuleMetadataDto metadata1 = insertMetadata(rule1, setTags("tag1", "tag2")); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java index 07c800955e0..05873d8f742 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/rule/ws/ShowActionTest.java @@ -22,7 +22,6 @@ package org.sonar.server.rule.ws; import java.util.List; import org.junit.Before; import org.junit.Test; -import org.junit.rules.ExpectedException; import org.sonar.api.resources.Languages; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; @@ -69,13 +68,10 @@ public class ShowActionTest { public UserSessionRule userSession = UserSessionRule.standalone(); @org.junit.Rule public DbTester db = DbTester.create(); - @org.junit.Rule - public ExpectedException thrown = ExpectedException.none(); - - private MacroInterpreter macroInterpreter = mock(MacroInterpreter.class); - private Languages languages = new Languages(newLanguage("xoo", "Xoo")); - private WsActionTester ws = new WsActionTester( + private final MacroInterpreter macroInterpreter = mock(MacroInterpreter.class); + private final Languages languages = new Languages(newLanguage("xoo", "Xoo")); + private final WsActionTester ws = new WsActionTester( new ShowAction(db.getDbClient(), new RuleMapper(languages, macroInterpreter), new ActiveRuleCompleter(db.getDbClient(), languages), new RuleWsSupport(db.getDbClient(), userSession))); @@ -110,7 +106,7 @@ public class ShowActionTest { assertThat(resultRule.getRepo()).isEqualTo(rule.getRepositoryKey()); assertThat(resultRule.getName()).isEqualTo(rule.getName()); assertThat(resultRule.getSeverity()).isEqualTo(rule.getSeverityString()); - assertThat(resultRule.getStatus().toString()).isEqualTo(rule.getStatus().toString()); + assertThat(resultRule.getStatus()).hasToString(rule.getStatus().toString()); assertThat(resultRule.getInternalKey()).isEqualTo(rule.getConfigKey()); assertThat(resultRule.getIsTemplate()).isEqualTo(rule.isTemplate()); assertThat(resultRule.getLang()).isEqualTo(rule.getLanguage()); @@ -166,6 +162,7 @@ public class ShowActionTest { assertThat(resultRule.getRemFnGapMultiplier()).isEqualTo("5d"); assertThat(resultRule.getRemFnBaseEffort()).isEqualTo("10h"); assertThat(resultRule.getRemFnOverloaded()).isFalse(); + assertThat(resultRule.hasDeprecatedKeys()).isFalse(); } @Test @@ -193,6 +190,7 @@ public class ShowActionTest { assertThat(resultRule.getRemFnGapMultiplier()).isEqualTo("5d"); assertThat(resultRule.getRemFnBaseEffort()).isEqualTo("10h"); assertThat(resultRule.getRemFnOverloaded()).isTrue(); + assertThat(resultRule.hasDeprecatedKeys()).isFalse(); } @Test @@ -220,6 +218,7 @@ public class ShowActionTest { assertThat(resultRule.hasRemFnGapMultiplier()).isFalse(); assertThat(resultRule.getRemFnBaseEffort()).isEqualTo("15h"); assertThat(resultRule.getRemFnOverloaded()).isTrue(); + assertThat(resultRule.hasDeprecatedKeys()).isFalse(); } @Test @@ -246,6 +245,7 @@ public class ShowActionTest { assertThat(resultRule.hasRemFnGapMultiplier()).isFalse(); assertThat(resultRule.hasRemFnBaseEffort()).isFalse(); assertThat(resultRule.getRemFnOverloaded()).isFalse(); + assertThat(resultRule.hasDeprecatedKeys()).isFalse(); } @Test @@ -274,6 +274,7 @@ public class ShowActionTest { assertThat(resultRule.hasDebtRemFnCoeff()).isFalse(); assertThat(resultRule.getDebtRemFnOffset()).isEqualTo("15h"); assertThat(resultRule.getDebtOverloaded()).isTrue(); + assertThat(resultRule.hasDeprecatedKeys()).isFalse(); } @Test @@ -388,7 +389,7 @@ public class ShowActionTest { public void show_rule_with_activation() { RuleDefinitionDto rule = db.rules().insert(); RuleParamDto ruleParam = db.rules().insertRuleParam(rule, p -> p.setType("STRING").setDescription("Reg *exp*").setDefaultValue(".*")); - RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null)); + db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null)); QProfileDto qProfile = db.qualityProfiles().insert(); ActiveRuleDto activeRule = db.qualityProfiles().activateRule(qProfile, rule); db.getDbClient().activeRuleDao().insertParam(db.getSession(), activeRule, new ActiveRuleParamDto() @@ -414,9 +415,9 @@ public class ShowActionTest { @Test public void show_rule_without_activation() { RuleDefinitionDto rule = db.rules().insert(); - RuleMetadataDto ruleMetadata = db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null)); + db.rules().insertOrUpdateMetadata(rule, m -> m.setNoteData(null).setNoteUserUuid(null)); QProfileDto qProfile = db.qualityProfiles().insert(); - ActiveRuleDto activeRule = db.qualityProfiles().activateRule(qProfile, rule); + db.qualityProfiles().activateRule(qProfile, rule); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) |