aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeResult.java13
-rw-r--r--sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java9
-rw-r--r--sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java35
3 files changed, 46 insertions, 11 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeResult.java b/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeResult.java
index 67d764ae042..d401c0ed598 100644
--- a/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeResult.java
+++ b/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeResult.java
@@ -22,14 +22,15 @@ package org.sonar.server.issue;
import org.sonar.api.issue.Issue;
-import java.util.List;
+import java.util.Collection;
+import java.util.Set;
-import static com.google.common.collect.Lists.newArrayList;
+import static com.google.common.collect.Sets.newHashSet;
public class IssueBulkChangeResult {
- private List<Issue> issuesChanged = newArrayList();
- private List<Issue> issuesNotChanged = newArrayList();
+ private Set<Issue> issuesChanged = newHashSet();
+ private Set<Issue> issuesNotChanged = newHashSet();
public void addIssueChanged(Issue issue){
this.issuesChanged.add(issue);
@@ -39,11 +40,11 @@ public class IssueBulkChangeResult {
this.issuesNotChanged.add(issue);
}
- public List<Issue> issuesChanged() {
+ public Collection<Issue> issuesChanged() {
return issuesChanged;
}
- public List<Issue> issuesNotChanged() {
+ public Collection<Issue> issuesNotChanged() {
return issuesNotChanged;
}
}
diff --git a/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java b/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java
index 586280b143e..cc23710a2c6 100644
--- a/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java
+++ b/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java
@@ -35,6 +35,7 @@ import org.sonar.core.issue.db.IssueStorage;
import org.sonar.server.user.UserSession;
import javax.annotation.CheckForNull;
+
import java.util.Date;
import java.util.List;
@@ -75,12 +76,10 @@ public class IssueBulkChangeService {
IssueChangeContext issueChangeContext = IssueChangeContext.createUser(new Date(), userSession.login());
for (Issue issue : issues) {
+ ActionContext actionContext = new ActionContext(issue, issueChangeContext);
for (Action action : bulkActions) {
try {
- ActionContext actionContext = new ActionContext(issue, issueChangeContext);
if (action.supports(issue) && action.execute(issueBulkChangeQuery.properties(action.key()), actionContext)) {
- issueStorage.save((DefaultIssue) issue);
- issueNotifications.sendChanges((DefaultIssue) issue, issueChangeContext, issueQueryResult);
result.addIssueChanged(issue);
} else {
result.addIssueNotChanged(issue);
@@ -90,6 +89,10 @@ public class IssueBulkChangeService {
LOG.info("An error occur when trying to apply the action : "+ action.key() + " on issue : "+ issue.key() + ". This issue has been ignored.", e);
}
}
+ if (result.issuesChanged().contains(issue)) {
+ issueStorage.save((DefaultIssue) issue);
+ issueNotifications.sendChanges((DefaultIssue) issue, issueChangeContext, issueQueryResult);
+ }
}
return result;
}
diff --git a/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java b/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java
index afc79fa4902..0d42dc13c8c 100644
--- a/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java
@@ -57,6 +57,7 @@ public class IssueBulkChangeServiceTest {
private IssueBulkChangeService service;
private Action action = mock(Action.class);
+ private List<Action> actions;
@Before
public void before() {
@@ -67,9 +68,8 @@ public class IssueBulkChangeServiceTest {
when(finder.find(any(IssueQuery.class))).thenReturn(issueQueryResult);
when(issueQueryResult.issues()).thenReturn(newArrayList((Issue) issue));
+ actions = newArrayList();
when(action.key()).thenReturn("assign");
-
- List<Action> actions = newArrayList();
actions.add(action);
service = new IssueBulkChangeService(finder, issueStorage, issueNotifications, actions);
@@ -98,6 +98,37 @@ public class IssueBulkChangeServiceTest {
}
@Test
+ public void should_do_sve_once_per_issue() {
+ Map<String, Object> properties = newHashMap();
+ properties.put("issues", "ABCD");
+ properties.put("actions", "assign,set_severity");
+ properties.put("assign.assignee", "fred");
+ properties.put("set_severity.severity", "MINOR");
+
+ Action setSeverityAction = mock(Action.class);
+ when(setSeverityAction.key()).thenReturn("set_severity");
+ actions.add(setSeverityAction);
+
+ when(action.supports(any(Issue.class))).thenReturn(true);
+ when(action.execute(anyMap(), any(IssueBulkChangeService.ActionContext.class))).thenReturn(true);
+ when(action.execute(eq(properties), any(IssueBulkChangeService.ActionContext.class))).thenReturn(true);
+
+ when(setSeverityAction.supports(any(Issue.class))).thenReturn(true);
+ when(setSeverityAction.execute(anyMap(), any(IssueBulkChangeService.ActionContext.class))).thenReturn(true);
+ when(setSeverityAction.execute(eq(properties), any(IssueBulkChangeService.ActionContext.class))).thenReturn(true);
+
+ IssueBulkChangeQuery issueBulkChangeQuery = new IssueBulkChangeQuery(properties);
+ IssueBulkChangeResult result = service.execute(issueBulkChangeQuery, userSession);
+ assertThat(result.issuesChanged()).hasSize(1);
+ assertThat(result.issuesNotChanged()).isEmpty();
+
+ verify(issueStorage, times(1)).save(eq(issue));
+ verifyNoMoreInteractions(issueStorage);
+ verify(issueNotifications, times(1)).sendChanges(eq(issue), any(IssueChangeContext.class), eq(issueQueryResult));
+ verifyNoMoreInteractions(issueNotifications);
+ }
+
+ @Test
public void should_load_issues_from_issue_keys_with_maximum_page_size() {
Map<String, Object> properties = newHashMap();
properties.put("issues", "ABCD,DEFG");