From 4d7df73fa9e3ea63a13a35a5da9fd25b56e18bdf Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Sat, 18 Jun 2016 20:54:34 +0900 Subject: [PATCH] ReviewerApi: Add method to remove the reviewer Change-Id: I7ad74f64a3b17d5f5209bedf7c8afb4b907146ba --- .../acceptance/api/change/ChangeIT.java | 44 +++++++++++++++++++ .../extensions/api/changes/ReviewerApi.java | 6 +++ .../server/api/changes/ReviewerApiImpl.java | 13 ++++++ 3 files changed, 63 insertions(+) diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java index cdbc4be845..47e342079b 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java @@ -520,6 +520,7 @@ public class ChangeIT extends AbstractDaemonTest { @Test public void addReviewer() throws Exception { TestTimeUtil.resetWithClockStep(1, SECONDS); + sender.clear(); PushOneCommit.Result r = createChange(); ChangeResource rsrc = parseResource(r); String oldETag = rsrc.getETag(); @@ -646,6 +647,49 @@ public class ChangeIT extends AbstractDaemonTest { assertThat(m).containsEntry("Code-Review", Short.valueOf((short)-1)); } + @Test + public void removeReviewer() throws Exception { + PushOneCommit.Result r = createChange(); + String changeId = r.getChangeId(); + gApi.changes() + .id(changeId) + .revision(r.getCommit().name()) + .review(ReviewInput.approve()); + + setApiUser(user); + gApi.changes() + .id(changeId) + .revision(r.getCommit().name()) + .review(ReviewInput.recommend()); + + Collection reviewers = gApi.changes() + .id(changeId) + .get() + .reviewers.get(REVIEWER); + + assertThat(reviewers).hasSize(2); + Iterator reviewerIt = reviewers.iterator(); + assertThat(reviewerIt.next()._accountId) + .isEqualTo(admin.getId().get()); + assertThat(reviewerIt.next()._accountId) + .isEqualTo(user.getId().get()); + + setApiUser(admin); + gApi.changes() + .id(changeId) + .reviewer(user.getId().toString()) + .remove(); + + reviewers = gApi.changes() + .id(changeId) + .get() + .reviewers.get(REVIEWER); + assertThat(reviewers).hasSize(1); + reviewerIt = reviewers.iterator(); + assertThat(reviewerIt.next()._accountId) + .isEqualTo(admin.getId().get()); + } + @Test public void deleteVote() throws Exception { PushOneCommit.Result r = createChange(); diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewerApi.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewerApi.java index 5571726794..c66a5b2f90 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewerApi.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ReviewerApi.java @@ -23,6 +23,7 @@ public interface ReviewerApi { Map votes() throws RestApiException; void deleteVote(String label) throws RestApiException; + void remove() throws RestApiException; /** * A default implementation which allows source compatibility @@ -38,5 +39,10 @@ public interface ReviewerApi { public void deleteVote(String label) throws RestApiException { throw new NotImplementedException(); } + + @Override + public void remove() throws RestApiException { + throw new NotImplementedException(); + } } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java index 49b343248b..d8c4c2c082 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.api.changes; import com.google.gerrit.extensions.api.changes.ReviewerApi; import com.google.gerrit.extensions.restapi.RestApiException; +import com.google.gerrit.server.change.DeleteReviewer; import com.google.gerrit.server.change.DeleteVote; import com.google.gerrit.server.change.ReviewerResource; import com.google.gerrit.server.change.VoteResource; @@ -35,13 +36,16 @@ public class ReviewerApiImpl implements ReviewerApi { private final ReviewerResource reviewer; private final Votes.List listVotes; private final DeleteVote deleteVote; + private final DeleteReviewer deleteReviewer; @Inject ReviewerApiImpl(Votes.List listVotes, DeleteVote deleteVote, + DeleteReviewer deleteReviewer, @Assisted ReviewerResource reviewer) { this.listVotes = listVotes; this.deleteVote = deleteVote; + this.deleteReviewer = deleteReviewer; this.reviewer = reviewer; } @@ -62,4 +66,13 @@ public class ReviewerApiImpl implements ReviewerApi { throw new RestApiException("Cannot delete vote", e); } } + + @Override + public void remove() throws RestApiException { + try { + deleteReviewer.apply(reviewer, null); + } catch (UpdateException e) { + throw new RestApiException("Cannot remove reviewer", e); + } + } }