]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-19339 Fix propagation of 'resolution' field for api/hotspots/pull
authorJacek Poreda <jacek.poreda@sonarsource.com>
Fri, 2 Jun 2023 12:05:00 +0000 (14:05 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 2 Jun 2023 20:02:46 +0000 (20:02 +0000)
server/sonar-db-dao/src/it/java/org/sonar/db/issue/IssueDaoIT.java
server/sonar-db-dao/src/main/resources/org/sonar/db/issue/IssueMapper.xml

index f9832c2a662014f7bd2caef5966ead28acaa7b4a..332bb74f04edad3cc003452b52667b9c91c75f75 100644 (file)
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
+import javax.annotation.Nullable;
 import org.junit.Rule;
 import org.junit.Test;
 import org.sonar.api.rule.RuleKey;
@@ -227,21 +228,24 @@ public class IssueDaoIT {
     List<String> statusesA = List.of(STATUS_OPEN, STATUS_REVIEWED, STATUS_CLOSED, STATUS_RESOLVED);
     IntStream.range(0, statusesA.size()).forEach(i -> insertBranchIssue(branchA, fileA, rule, "A" + i, statusesA.get(i), updatedAt));
 
+    insertBranchIssue(branchA, fileA, rule, "WithResolution", STATUS_RESOLVED, RESOLUTION_FIXED, updatedAt);
+
     ComponentDto branchB = db.components().insertProjectBranch(project, b -> b.setKey("branchB"));
     ComponentDto fileB = db.components().insertComponent(newFileDto(branchB));
 
     List<String> statusesB = List.of(STATUS_OPEN, STATUS_RESOLVED);
     IntStream.range(0, statusesB.size()).forEach(i -> insertBranchIssue(branchB, fileB, rule, "B" + i, statusesB.get(i), updatedAt));
 
-    List<IssueDto> branchAIssuesA1 = underTest.selectByBranch(db.getSession(), Set.of("issueA0", "issueA1", "issueA3"),
+    List<IssueDto> branchAIssuesA1 = underTest.selectByBranch(db.getSession(), Set.of("issueA0", "issueA1", "issueA3", "issueWithResolution"),
       buildSelectByBranchQuery(branchA, "java", false, changedSince));
 
     assertThat(branchAIssuesA1)
-      .extracting(IssueDto::getKey, IssueDto::getStatus)
+      .extracting(IssueDto::getKey, IssueDto::getStatus, IssueDto::getResolution)
       .containsExactlyInAnyOrder(
-        tuple("issueA0", STATUS_OPEN),
-        tuple("issueA1", STATUS_REVIEWED),
-        tuple("issueA3", STATUS_RESOLVED));
+        tuple("issueA0", STATUS_OPEN, null),
+        tuple("issueA1", STATUS_REVIEWED, null),
+        tuple("issueA3", STATUS_RESOLVED, null),
+        tuple("issueWithResolution", STATUS_RESOLVED, RESOLUTION_FIXED));
 
     assertThat(branchAIssuesA1.get(0))
       .extracting(IssueDto::getMessage, IssueDto::parseMessageFormattings)
@@ -622,12 +626,20 @@ public class IssueDaoIT {
     return RULE_TYPES_EXCEPT_HOTSPOT[nextInt(RULE_TYPES_EXCEPT_HOTSPOT.length)];
   }
 
-  private void insertBranchIssue(ComponentDto branch, ComponentDto file, RuleDto rule, String id, String status, Long updateAt) {
-    db.issues().insert(rule, branch, file, i -> i.setKee("issue" + id).setStatus(status).setUpdatedAt(updateAt).setType(randomRuleTypeExceptHotspot())
+  private void insertBranchIssue(ComponentDto branch, ComponentDto file, RuleDto rule, String id, String status, @Nullable String resolution, Long updateAt) {
+    db.issues().insert(rule, branch, file, i -> i.setKee("issue" + id)
+      .setStatus(status)
+      .setResolution(resolution)
+      .setUpdatedAt(updateAt)
+      .setType(randomRuleTypeExceptHotspot())
       .setMessage("message")
       .setMessageFormattings(MESSAGE_FORMATTING));
   }
 
+  private void insertBranchIssue(ComponentDto branch, ComponentDto file, RuleDto rule, String id, String status, Long updateAt) {
+    insertBranchIssue(branch, file, rule, id, status, null, updateAt);
+  }
+
   private static IssueQueryParams buildSelectByBranchQuery(ComponentDto branch, String language, boolean resolvedOnly, Long changedSince) {
     return new IssueQueryParams(branch.uuid(), List.of(language), List.of(), List.of(), resolvedOnly, changedSince);
   }
index 956359ff38cb8fb8064a080cd7cc3f15e12c1c8f..d1d0849563e692e99223d49c35baccb410e39016 100644 (file)
     i.rule_uuid as ruleUuid,
     i.created_at as createdAt,
     i.status as status,
+    i.resolution as resolution,
     r.rule_type as ruleType,
     r.plugin_name as ruleRepo,
     r.plugin_rule_key as ruleKey,