summaryrefslogtreecommitdiffstats
path: root/server/sonar-server
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2019-05-21 15:40:33 +0200
committerSonarTech <sonartech@sonarsource.com>2019-05-22 20:21:16 +0200
commit5de8118567b608c8ea4f183986141c51c91ee868 (patch)
tree8ce2e17759fb25b520db626310b4a9fb8ed1a3cd /server/sonar-server
parentd9a282856e5da34b7942ee02f4709d67bf33486b (diff)
downloadsonarqube-5de8118567b608c8ea4f183986141c51c91ee868.tar.gz
sonarqube-5de8118567b608c8ea4f183986141c51c91ee868.zip
SONAR-11989 Send notification when doing bulk changes on Security Hotspots
Diffstat (limited to 'server/sonar-server')
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java1
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java28
2 files changed, 20 insertions, 9 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java
index 4b4bba89e88..d4662b0a5c3 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java
@@ -267,7 +267,6 @@ public class BulkChangeAction implements IssuesWsAction {
return;
}
Set<ChangedIssue> changedIssues = issues.stream()
- .filter(issue -> issue.type() != RuleType.SECURITY_HOTSPOT)
// should not happen but filter it out anyway to avoid NPE in oldestUpdateDate call below
.filter(issue -> issue.updateDate() != null)
.map(issue -> toNotification(bulkChangeData, userDtoByUuid, issue))
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java
index 127e87d2530..edcfca9ce0f 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/BulkChangeActionTest.java
@@ -74,15 +74,16 @@ import static java.util.Objects.requireNonNull;
import static java.util.Optional.ofNullable;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.sonar.api.issue.DefaultTransitions.SET_AS_IN_REVIEW;
import static org.sonar.api.issue.Issue.RESOLUTION_FIXED;
import static org.sonar.api.issue.Issue.STATUS_CLOSED;
import static org.sonar.api.issue.Issue.STATUS_CONFIRMED;
+import static org.sonar.api.issue.Issue.STATUS_IN_REVIEW;
import static org.sonar.api.issue.Issue.STATUS_OPEN;
+import static org.sonar.api.issue.Issue.STATUS_TO_REVIEW;
import static org.sonar.api.rule.Severity.MAJOR;
import static org.sonar.api.rule.Severity.MINOR;
import static org.sonar.api.rules.RuleType.BUG;
@@ -90,6 +91,7 @@ import static org.sonar.api.rules.RuleType.CODE_SMELL;
import static org.sonar.api.rules.RuleType.SECURITY_HOTSPOT;
import static org.sonar.api.rules.RuleType.VULNERABILITY;
import static org.sonar.api.web.UserRole.ISSUE_ADMIN;
+import static org.sonar.api.web.UserRole.SECURITYHOTSPOT_ADMIN;
import static org.sonar.api.web.UserRole.USER;
import static org.sonar.db.component.ComponentTesting.newFileDto;
import static org.sonar.db.issue.IssueChangeDto.TYPE_COMMENT;
@@ -333,24 +335,34 @@ public class BulkChangeActionTest {
}
@Test
- public void hotspots_are_ignored_and_no_notification_is_sent() {
+ public void send_notification_on_hotspots() {
UserDto user = db.users().insertUser();
userSession.logIn(user);
ComponentDto project = db.components().insertMainBranch();
ComponentDto file = db.components().insertComponent(newFileDto(project));
- addUserProjectPermissions(user, project, USER, ISSUE_ADMIN);
+ addUserProjectPermissions(user, project, USER, SECURITYHOTSPOT_ADMIN);
RuleDefinitionDto rule = db.rules().insert();
IssueDto issue = db.issues().insert(rule, project, file, i -> i.setType(SECURITY_HOTSPOT)
- .setStatus(STATUS_OPEN).setResolution(null));
+ .setStatus(STATUS_TO_REVIEW).setResolution(null));
BulkChangeWsResponse response = call(builder()
.setIssues(singletonList(issue.getKey()))
- .setDoTransition("resetastoreview")
+ .setDoTransition(SET_AS_IN_REVIEW)
.setSendNotifications(true)
.build());
- checkResponse(response, 1, 0, 1, 0);
- verify(notificationManager, never()).scheduleForSending(any());
+ checkResponse(response, 1, 1, 0, 0);
+ verify(notificationManager).scheduleForSending(issueChangeNotificationCaptor.capture());
+ IssuesChangesNotificationBuilder builder = issuesChangesSerializer.from(issueChangeNotificationCaptor.getValue());
+ assertThat(builder.getIssues()).hasSize(1);
+ ChangedIssue changedIssue = builder.getIssues().iterator().next();
+ assertThat(changedIssue.getKey()).isEqualTo(issue.getKey());
+ assertThat(changedIssue.getNewStatus()).isEqualTo(STATUS_IN_REVIEW);
+ assertThat(changedIssue.getNewResolution()).isEmpty();
+ assertThat(changedIssue.getAssignee()).isEmpty();
+ assertThat(changedIssue.getRule()).isEqualTo(ruleOf(rule));
+ assertThat(builder.getChange()).isEqualTo(new UserChange(NOW, userOf(user)));
+ verifyPostProcessorCalled(file);
}
@Test