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 3639d2ada6..b21d715268 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 @@ -2086,6 +2086,40 @@ public class ChangeIT extends AbstractDaemonTest { gApi.changes().id(r.getChangeId()).reviewer("self").remove(); } + @Test + public void removeReviewerSelfFromAbandonedChangePermitted() throws Exception { + PushOneCommit.Result r = createChange(); + String changeId = r.getChangeId(); + + setApiUser(user); + recommend(changeId); + + setApiUser(admin); + gApi.changes().id(changeId).abandon(); + + setApiUser(user); + gApi.changes().id(r.getChangeId()).reviewer("self").remove(); + eventRecorder.assertReviewerDeletedEvents(changeId, user.email); + } + + @Test + public void removeOtherReviewerFromAbandonedChangeNotPermitted() throws Exception { + PushOneCommit.Result r = createChange(); + String changeId = r.getChangeId(); + + setApiUser(user); + recommend(changeId); + + setApiUser(admin); + approve(changeId); + gApi.changes().id(changeId).abandon(); + + setApiUser(user); + exception.expect(AuthException.class); + exception.expectMessage("remove reviewer not permitted"); + gApi.changes().id(r.getChangeId()).reviewer(admin.getId().toString()).remove(); + } + @Test public void deleteVote() throws Exception { PushOneCommit.Result r = createChange(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/RemoveReviewerControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/RemoveReviewerControl.java index 29db1323e4..d4c0f53df2 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/RemoveReviewerControl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/RemoveReviewerControl.java @@ -100,7 +100,7 @@ public class RemoveReviewerControl { private boolean canRemoveReviewerWithoutPermissionCheck( Change change, CurrentUser currentUser, Account.Id reviewer, int value) throws NoSuchProjectException, IOException { - if (!change.getStatus().isOpen()) { + if (change.getStatus().equals(Change.Status.MERGED)) { return false; }