diff options
author | Léo Geoffroy <leo.geoffroy@sonarsource.com> | 2023-08-02 11:31:28 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-08-18 20:02:47 +0000 |
commit | 5f96642125af3af740f79d19e299ca79dbd89545 (patch) | |
tree | afa11af73470ab5fc8bcb7e644399c0d963c37de /server/sonar-db-dao | |
parent | ec36845bbb03ae52ff98f6a2da2eca346336acd5 (diff) | |
download | sonarqube-5f96642125af3af740f79d19e299ca79dbd89545.tar.gz sonarqube-5f96642125af3af740f79d19e299ca79dbd89545.zip |
SONAR-20021 Add clean code attribute to RuleDto and IssueDto
Diffstat (limited to 'server/sonar-db-dao')
8 files changed, 44 insertions, 4 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java index 5a3f2a1214c..6d6d1f8d4c8 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java @@ -142,7 +142,7 @@ public class IssueDaoIT { IssueDto issue = underTest.selectOrFailByKey(db.getSession(), ISSUE_KEY1); assertThat(issue).usingRecursiveComparison() - .ignoringFields("filePath", "issueCreationDate", "issueUpdateDate", "issueCloseDate") + .ignoringFields("filePath", "issueCreationDate", "issueUpdateDate", "issueCloseDate", "cleanCodeAttribute") .isEqualTo(expected); assertThat(issue.parseMessageFormattings()).isEqualTo(MESSAGE_FORMATTING); assertThat(issue.getIssueCreationDate()).isNotNull(); @@ -150,6 +150,7 @@ public class IssueDaoIT { assertThat(issue.getIssueCloseDate()).isNotNull(); assertThat(issue.getRuleRepo()).isEqualTo(RULE.getRepositoryKey()); assertThat(issue.getRule()).isEqualTo(RULE.getRuleKey()); + assertThat(issue.getCleanCodeAttribute()).isEqualTo(RULE.getCleanCodeAttribute()); assertThat(issue.parseLocations()).isNull(); } @@ -776,6 +777,7 @@ public class IssueDaoIT { dto.setCodeVariants(Set.of("variant1", "variant2")); return dto; } + private void prepareTables() { underTest.insert(db.getSession(), newIssueDto(ISSUE_KEY1) .setMessage("the message") diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java index 498680a1873..d705cfdf883 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/rule/RuleDaoIT.java @@ -37,6 +37,7 @@ import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; import org.sonar.api.rule.Severity; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.rules.RuleQuery; import org.sonar.api.rules.RuleType; import org.sonar.api.server.debt.DebtRemediationFunction; @@ -238,6 +239,7 @@ public class RuleDaoIT { assertThat(actual.getRuleDescriptionSectionDtos()).usingRecursiveFieldByFieldElementComparator() .containsExactlyInAnyOrderElementsOf(expected.getRuleDescriptionSectionDtos()); assertThat(actual.getEducationPrinciples()).isEqualTo(expected.getEducationPrinciples()); + assertThat(actual.getCleanCodeAttribute()).isEqualTo(expected.getCleanCodeAttribute()); } @Test @@ -456,6 +458,7 @@ public class RuleDaoIT { .setSystemTags(newHashSet("systag1", "systag2")) .setSecurityStandards(newHashSet("owaspTop10:a1", "cwe:123")) .setType(RuleType.BUG) + .setCleanCodeAttribute(CleanCodeAttribute.CLEAR) .setScope(Scope.ALL) .setCreatedAt(1_500_000_000_000L) .setUpdatedAt(2_000_000_000_000L); @@ -488,6 +491,7 @@ public class RuleDaoIT { assertThat(ruleDto.getDescriptionFormat()).isEqualTo(RuleDto.Format.MARKDOWN); assertThat(ruleDto.getRuleDescriptionSectionDtos()).usingRecursiveFieldByFieldElementComparator() .containsOnly(sectionDto); + assertThat(ruleDto.getCleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CLEAR); } @Test @@ -517,6 +521,7 @@ public class RuleDaoIT { .setSecurityStandards(newHashSet("owaspTop10:a1", "cwe:123")) .setScope(Scope.ALL) .setType(RuleType.BUG) + .setCleanCodeAttribute(CleanCodeAttribute.TRUSTWORTHY) .setUpdatedAt(2_000_000_000_000L); underTest.update(db.getSession(), ruleToUpdate); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java index 06334fd6de6..0cd237eaedb 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java @@ -34,6 +34,7 @@ import javax.annotation.Nullable; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.sonar.api.rule.RuleKey; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.rules.RuleType; import org.sonar.api.utils.Duration; import org.sonar.core.issue.DefaultIssue; @@ -53,6 +54,7 @@ public final class IssueDto implements Serializable { private static final Splitter STRING_LIST_SPLITTER = Splitter.on(STRING_LIST_SEPARATOR).trimResults().omitEmptyStrings(); private int type; + private CleanCodeAttribute cleanCodeAttribute; private String kee; private String componentUuid; private String projectUuid; @@ -492,6 +494,7 @@ public final class IssueDto implements Serializable { this.ruleRepo = rule.getRepositoryKey(); this.language = rule.getLanguage(); this.isExternal = rule.isExternal(); + this.cleanCodeAttribute = rule.getCleanCodeAttribute(); return this; } @@ -744,6 +747,15 @@ public final class IssueDto implements Serializable { return this; } + public CleanCodeAttribute getCleanCodeAttribute() { + return cleanCodeAttribute; + } + + public IssueDto setCleanCodeAttribute(CleanCodeAttribute cleanCodeAttribute) { + this.cleanCodeAttribute = cleanCodeAttribute; + return this; + } + public Optional<String> getClosedChangeData() { return Optional.ofNullable(closedChangeData); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java index d88245d7486..ba3d01d4aa7 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/rule/RuleDto.java @@ -33,6 +33,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.HashCodeBuilder; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.rules.RuleType; import static com.google.common.base.Preconditions.checkArgument; @@ -98,6 +99,7 @@ public class RuleDto { private String systemTagsField = null; private String securityStandardsField = null; private int type = 0; + private CleanCodeAttribute cleanCodeAttribute = null; private Scope scope = null; private RuleKey key = null; @@ -241,7 +243,7 @@ public class RuleDto { return deserializeStringSet(educationPrinciplesField); } - public RuleDto setEducationPrinciples(Set<String> educationPrinciples){ + public RuleDto setEducationPrinciples(Set<String> educationPrinciples) { this.educationPrinciplesField = serializeStringSet(educationPrinciples); return this; } @@ -395,6 +397,15 @@ public class RuleDto { return this; } + public CleanCodeAttribute getCleanCodeAttribute() { + return cleanCodeAttribute; + } + + public RuleDto setCleanCodeAttribute(CleanCodeAttribute cleanCodeAttribute) { + this.cleanCodeAttribute = cleanCodeAttribute; + return this; + } + public long getCreatedAt() { return createdAt; } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml index c24e040a0a0..0a6bb0f7a41 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml @@ -32,6 +32,7 @@ r.plugin_name as ruleRepo, r.language as language, r.security_standards as securityStandards, + r.clean_code_attribute as cleanCodeAttribute, p.kee as componentKey, i.component_uuid as componentUuid, p.path as filePath, @@ -690,6 +691,7 @@ r.rule_type as ruleType, r.plugin_name as ruleRepo, r.plugin_rule_key as ruleKey, + r.clean_code_attribute as cleanCodeAttribute, i.message as message, i.message_formattings as messageFormattings, i.severity as severity, 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 fcd120cd8b5..953157fac29 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 @@ -39,7 +39,8 @@ r.ad_hoc_description as "adHocDescription", r.ad_hoc_severity as "adHocSeverity", r.ad_hoc_type as "adHocType", - r.education_principles as "educationPrinciplesField" + r.education_principles as "educationPrinciplesField", + r.clean_code_attribute as "cleanCodeAttribute" </sql> <sql id="leftOuterJoinRulesDescriptionSections"> @@ -274,6 +275,7 @@ ad_hoc_severity, ad_hoc_type, education_principles, + clean_code_attribute, created_at, updated_at ) @@ -313,6 +315,7 @@ #{adHocSeverity,jdbcType=VARCHAR}, #{adHocType,jdbcType=TINYINT}, #{educationPrinciplesField,jdbcType=VARCHAR}, + #{cleanCodeAttribute,jdbcType=VARCHAR}, #{createdAt,jdbcType=BIGINT}, #{updatedAt,jdbcType=BIGINT} ) @@ -354,6 +357,7 @@ ad_hoc_severity=#{adHocSeverity,jdbcType=VARCHAR}, ad_hoc_type=#{adHocType,jdbcType=TINYINT}, education_principles=#{educationPrinciplesField,jdbcType=VARCHAR}, + clean_code_attribute=#{cleanCodeAttribute,jdbcType=VARCHAR}, updated_at=#{updatedAt,jdbcType=BIGINT} where uuid=#{uuid,jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java index 9949cb0188a..766d78fcf50 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java @@ -30,6 +30,7 @@ import org.apache.commons.lang.time.DateUtils; import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.rule.RuleKey; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.rules.RuleType; import org.sonar.api.utils.Duration; import org.sonar.core.issue.DefaultIssue; @@ -117,13 +118,14 @@ public class IssueDtoTest { public void set_rule() { IssueDto dto = new IssueDto() .setKee("100") - .setRule(new RuleDto().setUuid("uuid-1").setRuleKey("AvoidCycle").setRepositoryKey("java").setIsExternal(true)) + .setRule(new RuleDto().setUuid("uuid-1").setRuleKey("AvoidCycle").setRepositoryKey("java").setIsExternal(true).setCleanCodeAttribute(CleanCodeAttribute.CLEAR)) .setLanguage("xoo"); assertThat(dto.getRuleUuid()).isEqualTo("uuid-1"); assertThat(dto.getRuleRepo()).isEqualTo("java"); assertThat(dto.getRule()).isEqualTo("AvoidCycle"); assertThat(dto.getRuleKey()).hasToString("java:AvoidCycle"); + assertThat(dto.getCleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CLEAR); assertThat(dto.getLanguage()).isEqualTo("xoo"); assertThat(dto.isExternal()).isTrue(); } diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java index 6d5cc8f4cfd..7fbae9e48d5 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/rule/RuleTesting.java @@ -26,6 +26,7 @@ import javax.annotation.Nullable; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; import org.sonar.api.rule.Severity; +import org.sonar.api.rules.CleanCodeAttribute; import org.sonar.api.rules.RuleType; import org.sonar.api.server.rule.RuleParamType; import org.sonar.core.util.UuidFactory; @@ -92,6 +93,7 @@ public class RuleTesting { .setName("name_" + randomAlphanumeric(5)) .setDescriptionFormat(RuleDto.Format.HTML) .setType(CODE_SMELL) + .setCleanCodeAttribute(CleanCodeAttribute.CLEAR) .setStatus(RuleStatus.READY) .setConfigKey("configKey_" + ruleKey.rule()) .setSeverity(Severity.ALL.get(nextInt(Severity.ALL.size()))) |