ChangeApi: Add method to list change reviewers
Change-Id: I43e91247615cd6549760058881b95d94a6dc2698
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 b21d715..1ee3582 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
@@ -1612,6 +1612,23 @@
}
@Test
+ public void listReviewers() throws Exception {
+ PushOneCommit.Result r = createChange();
+ AddReviewerInput in = new AddReviewerInput();
+ in.reviewer = user.email;
+ gApi.changes().id(r.getChangeId()).addReviewer(in);
+ assertThat(gApi.changes().id(r.getChangeId()).reviewers()).hasSize(1);
+
+ TestAccount user1 =
+ accountCreator.create(name("user1"), name("user1") + "@example.com", "User 1");
+ in.reviewer = user1.email;
+ in.state = ReviewerState.CC;
+ gApi.changes().id(r.getChangeId()).addReviewer(in);
+ assertThat(gApi.changes().id(r.getChangeId()).reviewers().stream().map(a -> a.username))
+ .containsExactly(user.username, user1.username);
+ }
+
+ @Test
public void notificationsForAddedWorkInProgressReviewers() throws Exception {
AddReviewerInput in = new AddReviewerInput();
in.reviewer = user.email;
diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ChangeApi.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ChangeApi.java
index a1b4578..5183a89 100644
--- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ChangeApi.java
+++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/ChangeApi.java
@@ -183,6 +183,11 @@
SuggestedReviewersRequest suggestReviewers(String query) throws RestApiException;
+ /**
+ * Retrieve reviewers ({@code ReviewerState.REVIEWER} and {@code ReviewerState.CC}) on the change.
+ */
+ List<ReviewerInfo> reviewers() throws RestApiException;
+
ChangeInfo get(EnumSet<ListChangesOption> options) throws RestApiException;
default ChangeInfo get(Iterable<ListChangesOption> options) throws RestApiException {
@@ -454,6 +459,11 @@
}
@Override
+ public List<ReviewerInfo> reviewers() throws RestApiException {
+ throw new NotImplementedException();
+ }
+
+ @Override
public ChangeInfo get(EnumSet<ListChangesOption> options) throws RestApiException {
throw new NotImplementedException();
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java
index 41f591c..447fdf4 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java
@@ -32,6 +32,7 @@
import com.google.gerrit.extensions.api.changes.RestoreInput;
import com.google.gerrit.extensions.api.changes.RevertInput;
import com.google.gerrit.extensions.api.changes.ReviewerApi;
+import com.google.gerrit.extensions.api.changes.ReviewerInfo;
import com.google.gerrit.extensions.api.changes.RevisionApi;
import com.google.gerrit.extensions.api.changes.SubmittedTogetherInfo;
import com.google.gerrit.extensions.api.changes.SubmittedTogetherOption;
@@ -69,6 +70,7 @@
import com.google.gerrit.server.change.ListChangeComments;
import com.google.gerrit.server.change.ListChangeDrafts;
import com.google.gerrit.server.change.ListChangeRobotComments;
+import com.google.gerrit.server.change.ListReviewers;
import com.google.gerrit.server.change.MarkAsReviewed;
import com.google.gerrit.server.change.MarkAsUnreviewed;
import com.google.gerrit.server.change.Move;
@@ -110,6 +112,7 @@
private final ReviewerApiImpl.Factory reviewerApi;
private final RevisionApiImpl.Factory revisionApi;
private final SuggestChangeReviewers suggestReviewers;
+ private final ListReviewers listReviewers;
private final ChangeResource change;
private final Abandon abandon;
private final Revert revert;
@@ -156,6 +159,7 @@
ReviewerApiImpl.Factory reviewerApi,
RevisionApiImpl.Factory revisionApi,
SuggestChangeReviewers suggestReviewers,
+ ListReviewers listReviewers,
Abandon abandon,
Revert revert,
Restore restore,
@@ -200,6 +204,7 @@
this.reviewerApi = reviewerApi;
this.revisionApi = revisionApi;
this.suggestReviewers = suggestReviewers;
+ this.listReviewers = listReviewers;
this.abandon = abandon;
this.restore = restore;
this.updateByMerge = updateByMerge;
@@ -496,6 +501,15 @@
}
@Override
+ public List<ReviewerInfo> reviewers() throws RestApiException {
+ try {
+ return listReviewers.apply(change);
+ } catch (Exception e) {
+ throw asRestApiException("Cannot retrieve reviewers", e);
+ }
+ }
+
+ @Override
public ChangeInfo get(EnumSet<ListChangesOption> s) throws RestApiException {
try {
return changeJson.create(s).format(change);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/ListReviewers.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/ListReviewers.java
index ba2a10b..385e3b9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/ListReviewers.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/ListReviewers.java
@@ -30,7 +30,7 @@
import java.util.Map;
@Singleton
-class ListReviewers implements RestReadView<ChangeResource> {
+public class ListReviewers implements RestReadView<ChangeResource> {
private final Provider<ReviewDb> dbProvider;
private final ApprovalsUtil approvalsUtil;
private final ReviewerJson json;