Change endpoints for all draft/published comments on a change
We would like to be able to publish all drafts on all patch sets at once, which implies showing all of them in the reply box first. Sending multiple requests from the client would be wasteful, so we need a single endpoint on the change to list all drafts. Similarly, we need to fetch all published comments at once to line them up in the history table. The output of these endpoints is keyed by file, then sorted by patch set. The typical way a code review proceeds is one file at a time: correct all comments on one file, regardless of patch set, then move on to the next file. We avoid a further nested map as this JSON type would just get a little messy. Change-Id: I0448f74357a45689a5a125968d3a0219e3d98fa3
This commit is contained in:
@@ -15,7 +15,11 @@
|
||||
package com.google.gerrit.acceptance.server.change;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.gerrit.acceptance.PushOneCommit.FILE_NAME;
|
||||
import static com.google.gerrit.acceptance.PushOneCommit.SUBJECT;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
||||
@@ -186,6 +190,98 @@ public class CommentsIT extends AbstractDaemonTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listChangeDrafts() throws Exception {
|
||||
PushOneCommit.Result r1 = createChange();
|
||||
|
||||
PushOneCommit.Result r2 = pushFactory.create(
|
||||
db, admin.getIdent(), testRepo, SUBJECT, FILE_NAME, "new cntent",
|
||||
r1.getChangeId())
|
||||
.to("refs/for/master");
|
||||
|
||||
|
||||
setApiUser(admin);
|
||||
addDraft(r1.getChangeId(), r1.getCommit().getName(),
|
||||
newDraft(FILE_NAME, Side.REVISION, 1, "nit: trailing whitespace"));
|
||||
addDraft(r2.getChangeId(), r2.getCommit().getName(),
|
||||
newDraft(FILE_NAME, Side.REVISION, 1, "typo: content"));
|
||||
|
||||
setApiUser(user);
|
||||
addDraft(r2.getChangeId(), r2.getCommit().getName(),
|
||||
newDraft(FILE_NAME, Side.REVISION, 1, "+1, please fix"));
|
||||
|
||||
setApiUser(admin);
|
||||
Map<String, List<CommentInfo>> actual =
|
||||
gApi.changes().id(r1.getChangeId()).drafts();
|
||||
assertThat((Iterable<?>) actual.keySet()).containsExactly(FILE_NAME);
|
||||
List<CommentInfo> comments = actual.get(FILE_NAME);
|
||||
assertThat(comments).hasSize(2);
|
||||
|
||||
CommentInfo c1 = comments.get(0);
|
||||
assertThat(c1.author).isNull();
|
||||
assertThat(c1.patchSet).isEqualTo(1);
|
||||
assertThat(c1.message).isEqualTo("nit: trailing whitespace");
|
||||
assertThat(c1.side).isNull();
|
||||
assertThat(c1.line).isEqualTo(1);
|
||||
|
||||
CommentInfo c2 = comments.get(1);
|
||||
assertThat(c2.author).isNull();
|
||||
assertThat(c2.patchSet).isEqualTo(2);
|
||||
assertThat(c2.message).isEqualTo("typo: content");
|
||||
assertThat(c2.side).isNull();
|
||||
assertThat(c2.line).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listChangeComments() throws Exception {
|
||||
PushOneCommit.Result r1 = createChange();
|
||||
|
||||
PushOneCommit.Result r2 = pushFactory.create(
|
||||
db, admin.getIdent(), testRepo, SUBJECT, FILE_NAME, "new cntent",
|
||||
r1.getChangeId())
|
||||
.to("refs/for/master");
|
||||
|
||||
addComment(r1, "nit: trailing whitespace");
|
||||
addComment(r2, "typo: content");
|
||||
|
||||
Map<String, List<CommentInfo>> actual = gApi.changes()
|
||||
.id(r2.getChangeId())
|
||||
.comments();
|
||||
assertThat(actual.keySet()).containsExactly(FILE_NAME);
|
||||
|
||||
List<CommentInfo> comments = actual.get(FILE_NAME);
|
||||
assertThat(comments).hasSize(2);
|
||||
|
||||
CommentInfo c1 = comments.get(0);
|
||||
assertThat(c1.author._accountId).isEqualTo(user.getId().get());
|
||||
assertThat(c1.patchSet).isEqualTo(1);
|
||||
assertThat(c1.message).isEqualTo("nit: trailing whitespace");
|
||||
assertThat(c1.side).isNull();
|
||||
assertThat(c1.line).isEqualTo(1);
|
||||
|
||||
CommentInfo c2 = comments.get(1);
|
||||
assertThat(c2.author._accountId).isEqualTo(user.getId().get());
|
||||
assertThat(c2.patchSet).isEqualTo(2);
|
||||
assertThat(c2.message).isEqualTo("typo: content");
|
||||
assertThat(c2.side).isNull();
|
||||
assertThat(c2.line).isEqualTo(1);
|
||||
}
|
||||
|
||||
private void addComment(PushOneCommit.Result r, String message)
|
||||
throws Exception {
|
||||
CommentInput c = new CommentInput();
|
||||
c.line = 1;
|
||||
c.message = message;
|
||||
c.path = FILE_NAME;
|
||||
ReviewInput in = new ReviewInput();
|
||||
in.comments = ImmutableMap.<String, List<CommentInput>> of(
|
||||
FILE_NAME, ImmutableList.of(c));
|
||||
gApi.changes()
|
||||
.id(r.getChangeId())
|
||||
.revision(r.getCommit().name())
|
||||
.review(in);
|
||||
}
|
||||
|
||||
private CommentInfo addDraft(String changeId, String revId, DraftInput in)
|
||||
throws Exception {
|
||||
return gApi.changes().id(changeId).revision(revId).createDraft(in).get();
|
||||
|
||||
Reference in New Issue
Block a user