From 543a37ee21219f71d38e2f7ae228bdfb75ef4f9d Mon Sep 17 00:00:00 2001 From: Pierre Date: Fri, 28 Jul 2023 16:46:18 +0200 Subject: [PATCH] SONAR-19372 add default comment when missing --- ...itionIssuesToAnticipatedStatesVisitor.java | 7 +++++-- ...nIssuesToAnticipatedStatesVisitorTest.java | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitor.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitor.java index f3add51501a..976ab894c2e 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitor.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitor.java @@ -22,6 +22,7 @@ package org.sonar.ce.task.projectanalysis.issue; import java.util.Collection; import java.util.List; import java.util.Map; +import org.apache.logging.log4j.util.Strings; import org.sonar.ce.task.projectanalysis.component.Component; import org.sonar.core.issue.AnticipatedTransition; import org.sonar.core.issue.DefaultIssue; @@ -38,7 +39,7 @@ public class TransitionIssuesToAnticipatedStatesVisitor extends IssueVisitor { private Collection anticipatedTransitions; private final AnticipatedTransitionTracker tracker = new AnticipatedTransitionTracker<>(); private final IssueLifecycle issueLifecycle; - + private final AnticipatedTransitionRepository anticipatedTransitionRepository; public TransitionIssuesToAnticipatedStatesVisitor(AnticipatedTransitionRepository anticipatedTransitionRepository, IssueLifecycle issueLifecycle) { @@ -68,7 +69,9 @@ public class TransitionIssuesToAnticipatedStatesVisitor extends IssueVisitor { issue.setBeingClosed(true); issue.setAnticipatedTransitions(true); issueLifecycle.doManualTransition(issue, anticipatedTransition.getTransition(), anticipatedTransition.getUserUuid()); - issueLifecycle.addComment(issue, anticipatedTransition.getComment(), anticipatedTransition.getUserUuid()); + String transitionComment = anticipatedTransition.getComment(); + String comment = Strings.isNotBlank(transitionComment) ? transitionComment : "Automatically transitioned from SonarLint"; + issueLifecycle.addComment(issue, comment, anticipatedTransition.getUserUuid()); } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitorTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitorTest.java index 3039d15c295..b7b76f23a90 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitorTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TransitionIssuesToAnticipatedStatesVisitorTest.java @@ -78,6 +78,22 @@ public class TransitionIssuesToAnticipatedStatesVisitorTest { verifyNoInteractions(issueLifecycle); } + @Test + public void givenMatchingAnticipatedTransitionsWithEmptyComment_transitionsShouldBeAppliedToIssuesAndDefaultCommentApplied() { + Component component = getComponent(Component.Type.FILE); + when(anticipatedTransitionRepository.getAnticipatedTransitionByComponent(component)).thenReturn(getAnticipatedTransitionsWithEmptyComment("projectKey", "fileName")); + + DefaultIssue issue = getDefaultIssue(1, "abcdefghi", "issue message"); + + underTest.beforeComponent(component); + underTest.onIssue(component, issue); + + assertThat(issue.isBeingClosed()).isTrue(); + assertThat(issue.hasAnticipatedTransitions()).isTrue(); + verify(issueLifecycle).doManualTransition(issue, "wontfix", "admin"); + verify(issueLifecycle).addComment(issue, "Automatically transitioned from SonarLint", "admin"); + } + @Test public void givenAFileComponent_theRepositoryIsHitForFetchingAnticipatedTransitions() { Component component = getComponent(Component.Type.FILE); @@ -102,6 +118,10 @@ public class TransitionIssuesToAnticipatedStatesVisitorTest { return Stream.of(new AnticipatedTransition(projecKey, null, "admin", RuleKey.parse("repo:id"), "issue message", fileName, 1, "abcdefghi", "wontfix", "doing the transition in an anticipated way")).collect(Collectors.toList()); } + private Collection getAnticipatedTransitionsWithEmptyComment(String projecKey, String fileName) { + return Stream.of(new AnticipatedTransition(projecKey, null, "admin", RuleKey.parse("repo:id"), "issue message", fileName, 1, "abcdefghi", "wontfix", null)).collect(Collectors.toList()); + } + private Component getComponent(Component.Type type) { ComponentImpl.Builder builder = ComponentImpl.builder(type) .setUuid("componentUuid") -- 2.39.5