diff options
author | Julien Lancelot <julien.lancelot@gmail.com> | 2013-06-21 16:56:06 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@gmail.com> | 2013-06-21 16:56:06 +0200 |
commit | ab2236ec122f07a178dd1029c5583ba65520f8ea (patch) | |
tree | c2d497649d71346af7f79a46ca0d2c7e562cc4d5 | |
parent | 50fc551d962c4563c8d4d09044b1cdaeca55ef9c (diff) | |
download | sonarqube-ab2236ec122f07a178dd1029c5583ba65520f8ea.tar.gz sonarqube-ab2236ec122f07a178dd1029c5583ba65520f8ea.zip |
SONAR-3714 add bulk change in ruby service
4 files changed, 65 insertions, 32 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java b/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java index 3da16a249bb..d3b9ca5d0cb 100644 --- a/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java +++ b/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java @@ -68,12 +68,13 @@ public class InternalRubyIssueService implements ServerComponent { private final ResourceDao resourceDao; private final ActionService actionService; private final IssueFilterService issueFilterService; + private final IssueBulkChangeService issueBulkChangeService; public InternalRubyIssueService(IssueService issueService, IssueCommentService commentService, IssueChangelogService changelogService, ActionPlanService actionPlanService, IssueStatsFinder issueStatsFinder, ResourceDao resourceDao, ActionService actionService, - IssueFilterService issueFilterService) { + IssueFilterService issueFilterService, IssueBulkChangeService issueBulkChangeService) { this.issueService = issueService; this.commentService = commentService; this.changelogService = changelogService; @@ -82,6 +83,7 @@ public class InternalRubyIssueService implements ServerComponent { this.resourceDao = resourceDao; this.actionService = actionService; this.issueFilterService = issueFilterService; + this.issueBulkChangeService = issueBulkChangeService; } public IssueStatsFinder.IssueStatsResult findIssueAssignees(Map<String, Object> params) { @@ -403,7 +405,7 @@ public class InternalRubyIssueService implements ServerComponent { } } - public String serializeFilterQuery(Map<String, Object> filterQuery){ + public String serializeFilterQuery(Map<String, Object> filterQuery) { return issueFilterService.serializeFilterQuery(filterQuery); } @@ -426,12 +428,12 @@ public class InternalRubyIssueService implements ServerComponent { return issueFilterService.execute(issueQuery); } - private void overrideProps(Map<String, Object> props, Map<String, Object> overrideProps){ + private void overrideProps(Map<String, Object> props, Map<String, Object> overrideProps) { overrideProp(props, overrideProps, "pageSize"); overrideProp(props, overrideProps, "pageIndex"); } - private void overrideProp(Map<String, Object> props, Map<String, Object> overrideProps, String key){ + private void overrideProp(Map<String, Object> props, Map<String, Object> overrideProps, String key) { if (overrideProps.containsKey(key)) { props.put(key, overrideProps.get(key)); } @@ -583,4 +585,29 @@ public class InternalRubyIssueService implements ServerComponent { } } + /** + * Execute a bulk change + */ + public Result<List<Issue>> executebulkChange(Map<String, Object> props) { + Result<List<Issue>> result = Result.of(); + try { + IssueBulkChangeQuery issueBulkChangeQuery = toIssueBulkChangeQuery(props); + result.set(issueBulkChangeService.execute(issueBulkChangeQuery, UserSession.get())); + } catch (Exception e) { + result.addError(e.getMessage()); + } + return result; + } + + private IssueBulkChangeQuery toIssueBulkChangeQuery(Map<String, Object> props) { + return IssueBulkChangeQuery.builder() + .issueKeys(RubyUtils.toStrings(props.get("issues"))) + .assignee((String) props.get("assignee")) + .plan((String) props.get("plan")) + .severity((String) props.get("severity")) + .transition((String) props.get("transition")) + .comment((String) props.get("comment")) + .build(); + } + }
\ No newline at end of file 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 d399748e7b5..8480c44eff1 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 @@ -60,8 +60,7 @@ public class IssueBulkChangeService { this.userFinder = userFinder; } - public Result<List<Issue>> execute(IssueBulkChangeQuery issueBulkChangeQuery, UserSession userSession) { - Result<List<Issue>> result = Result.of(); + public List<Issue> execute(IssueBulkChangeQuery issueBulkChangeQuery, UserSession userSession) { List<Issue> issues = newArrayList(); verifyLoggedIn(userSession); @@ -103,11 +102,10 @@ public class IssueBulkChangeService { issueNotifications.sendChanges(defaultIssue, context, issueQueryResult); issues.add(defaultIssue); } catch (Exception e) { - result.addError(e.getMessage()); + // Do nothing, just go to the next issue } } - result.set(issues); - return result; + return issues; } private void verifyLoggedIn(UserSession userSession) { diff --git a/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java b/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java index 54d592260e8..bd53b68fce5 100644 --- a/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java @@ -54,12 +54,14 @@ public class InternalRubyIssueServiceTest { IssueStatsFinder issueStatsFinder = mock(IssueStatsFinder.class); ActionService actionService = mock(ActionService.class); IssueFilterService issueFilterService = mock(IssueFilterService.class); + IssueBulkChangeService issueBulkChangeService = mock(IssueBulkChangeService.class); @Before public void setUp() { ResourceDto project = new ResourceDto().setKey("org.sonar.Sample"); when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(project); - service = new InternalRubyIssueService(issueService, commentService, changelogService, actionPlanService, issueStatsFinder, resourceDao, actionService, issueFilterService); + service = new InternalRubyIssueService(issueService, commentService, changelogService, actionPlanService, issueStatsFinder, resourceDao, actionService, + issueFilterService, issueBulkChangeService); } @Test @@ -530,6 +532,21 @@ public class InternalRubyIssueServiceTest { verify(issueFilterService).verifyCurrentUserCanReadFilter(eq(issueFilter), any(UserSession.class)); } + @Test + public void should_execute_bulk_change() { + service.executebulkChange(Maps.<String, Object>newHashMap()); + verify(issueBulkChangeService).execute(any(IssueBulkChangeQuery.class), any(UserSession.class)); + } + + @Test + public void should_no_execute_bulk_change_if_unexpected_error() { + doThrow(new RuntimeException("Error")).when(issueBulkChangeService).execute(any(IssueBulkChangeQuery.class), any(UserSession.class)); + + Result result = service.executebulkChange(Maps.<String, Object>newHashMap()); + assertThat(result.ok()).isFalse(); + assertThat(((Result.Message) result.errors().get(0)).text()).contains("Error"); + } + private String createLongString(int size) { String result = ""; for (int i = 0; i < size; i++) { 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 eac959c0105..5237982fcd1 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 @@ -78,9 +78,8 @@ public class IssueBulkChangeServiceTest { when(userFinder.findByLogin(assignee)).thenReturn(new DefaultUser()); IssueBulkChangeQuery issueBulkChangeQuery = IssueBulkChangeQuery.builder().issueKeys(newArrayList(issue.key())).assignee(assignee).build(); - Result result = service.execute(issueBulkChangeQuery, userSession); - assertThat(result.ok()).isTrue(); - assertThat((List)result.get()).hasSize(1); + List<Issue> result = service.execute(issueBulkChangeQuery, userSession); + assertThat(result).hasSize(1); verify(issueUpdater).assign(eq(issue), eq(assignee), any(IssueChangeContext.class)); verifyNoMoreInteractions(issueUpdater); @@ -96,9 +95,8 @@ public class IssueBulkChangeServiceTest { when(actionPlanService.findByKey(actionPlanKey, userSession)).thenReturn(new DefaultActionPlan()); IssueBulkChangeQuery issueBulkChangeQuery = IssueBulkChangeQuery.builder().issueKeys(newArrayList(issue.key())).plan(actionPlanKey).build(); - Result result = service.execute(issueBulkChangeQuery, userSession); - assertThat(result.ok()).isTrue(); - assertThat((List)result.get()).hasSize(1); + List<Issue> result = service.execute(issueBulkChangeQuery, userSession); + assertThat(result).hasSize(1); verify(issueUpdater).plan(eq(issue), eq(actionPlanKey), any(IssueChangeContext.class)); verifyNoMoreInteractions(issueUpdater); @@ -113,9 +111,8 @@ public class IssueBulkChangeServiceTest { String severity = "MINOR"; IssueBulkChangeQuery issueBulkChangeQuery = IssueBulkChangeQuery.builder().issueKeys(newArrayList(issue.key())).severity(severity).build(); - Result result = service.execute(issueBulkChangeQuery, userSession); - assertThat(result.ok()).isTrue(); - assertThat((List)result.get()).hasSize(1); + List<Issue> result = service.execute(issueBulkChangeQuery, userSession); + assertThat(result).hasSize(1); verify(issueUpdater).setManualSeverity(eq(issue), eq(severity), any(IssueChangeContext.class)); verifyNoMoreInteractions(issueUpdater); @@ -132,9 +129,8 @@ public class IssueBulkChangeServiceTest { when(workflow.doTransition(eq(issue), eq(transition), any(IssueChangeContext.class))).thenReturn(true); IssueBulkChangeQuery issueBulkChangeQuery = IssueBulkChangeQuery.builder().issueKeys(newArrayList(issue.key())).transition(transition).build(); - Result result = service.execute(issueBulkChangeQuery, userSession); - assertThat(result.ok()).isTrue(); - assertThat((List)result.get()).hasSize(1); + List<Issue> result = service.execute(issueBulkChangeQuery, userSession); + assertThat(result).hasSize(1); verify(workflow).doTransition(eq(issue), eq(transition), any(IssueChangeContext.class)); verifyNoMoreInteractions(issueUpdater); @@ -149,9 +145,8 @@ public class IssueBulkChangeServiceTest { String comment = "Bulk change comment"; IssueBulkChangeQuery issueBulkChangeQuery = IssueBulkChangeQuery.builder().issueKeys(newArrayList(issue.key())).comment(comment).build(); - Result result = service.execute(issueBulkChangeQuery, userSession); - assertThat(result.ok()).isTrue(); - assertThat((List)result.get()).hasSize(1); + List<Issue> result = service.execute(issueBulkChangeQuery, userSession); + assertThat(result).hasSize(1); verify(issueUpdater).addComment(eq(issue), eq(comment), any(IssueChangeContext.class)); verifyNoMoreInteractions(issueUpdater); @@ -171,13 +166,9 @@ public class IssueBulkChangeServiceTest { // The first call the change severity is ok, the second will fail when(issueUpdater.setManualSeverity(any(DefaultIssue.class), eq("MAJOR"),any(IssueChangeContext.class))).thenReturn(true).thenThrow(new RuntimeException("Cant change severity")); - Result result = service.execute(issueBulkChangeQuery, userSession); - assertThat(result.ok()).isFalse(); - assertThat(((Result.Message) result.errors().get(0)).text()).isEqualTo("Cant change severity"); - - List<Issue> issues = (List) result.get(); - assertThat(issues).hasSize(1); - assertThat(issues.get(0).key()).isEqualTo("ABCD"); + List<Issue> result = service.execute(issueBulkChangeQuery, userSession); + assertThat(result).hasSize(1); + assertThat(result.get(0).key()).isEqualTo("ABCD"); verify(issueStorage).save(eq(issue)); verifyNoMoreInteractions(issueStorage); |