diff options
Diffstat (limited to 'gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java')
-rw-r--r-- | gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java | 275 |
1 files changed, 268 insertions, 7 deletions
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java index 9d6cb60a73..0daaee8d12 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java @@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assert_; import static com.google.gerrit.reviewdb.client.RefNames.changeMetaRef; import static com.google.gerrit.reviewdb.client.RefNames.refsDraftComments; import static com.google.gerrit.server.notedb.ReviewerStateInternal.CC; +import static com.google.gerrit.server.notedb.ReviewerStateInternal.REMOVED; import static com.google.gerrit.server.notedb.ReviewerStateInternal.REVIEWER; import static java.nio.charset.StandardCharsets.UTF_8; import static org.eclipse.jgit.lib.Constants.OBJ_BLOB; @@ -49,6 +50,7 @@ import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.ReviewerSet; import com.google.gerrit.server.config.GerritServerId; +import com.google.gerrit.server.mail.Address; import com.google.gerrit.server.notedb.ChangeNotesCommit.ChangeNotesRevWalk; import com.google.gerrit.server.util.RequestId; import com.google.gerrit.testutil.TestChanges; @@ -115,7 +117,7 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { } @Test - public void tagInlineCommenrts() throws Exception { + public void tagInlineComments() throws Exception { String tag = "jenkins"; Change c = newChange(); RevCommit commit = tr.commit().message("PS2").create(); @@ -751,7 +753,7 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { try (RevWalk walk = new RevWalk(repo)) { RevCommit commit = walk.parseCommit(update.getResult()); walk.parseBody(commit); - assertThat(commit.getFullMessage()).endsWith("Hashtags: tag1,tag2\n"); + assertThat(commit.getFullMessage()).contains("Hashtags: tag1,tag2\n"); } } @@ -1054,7 +1056,6 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { RevCommit commit = tr.commit().message("PS2").create(); ChangeUpdate update = newUpdate(c, changeOwner); update.setCommit(rw, commit); - update.setPatchSetState(PatchSetState.DRAFT); update.putApproval("Code-Review", (short) 1); update.setChangeMessage("This is a message"); update.putComment( @@ -1075,7 +1076,6 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { update.commit(); ChangeNotes notes = newNotes(c); - assertThat(notes.getPatchSets().get(psId2).isDraft()).isTrue(); assertThat(notes.getPatchSets().keySet()).containsExactly(psId1, psId2); assertThat(notes.getApprovals()).isNotEmpty(); assertThat(notes.getChangeMessagesByPatchSet()).isNotEmpty(); @@ -1087,9 +1087,6 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { update.setPatchSetState(PatchSetState.PUBLISHED); update.commit(); - notes = newNotes(c); - assertThat(notes.getPatchSets().get(psId2).isDraft()).isFalse(); - // delete ps2 update = newUpdate(c, changeOwner); update.setPatchSetState(PatchSetState.DELETED); @@ -3265,6 +3262,270 @@ public class ChangeNotesTest extends AbstractChangeNotesTest { assertThat(notes.getReadOnlyUntil()).isEqualTo(new Timestamp(0)); } + @Test + public void privateDefault() throws Exception { + Change c = newChange(); + ChangeNotes notes = newNotes(c); + assertThat(notes.isPrivate()).isFalse(); + } + + @Test + public void privateSetPrivate() throws Exception { + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.setPrivate(true); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.isPrivate()).isTrue(); + } + + @Test + public void privateSetPrivateMultipleTimes() throws Exception { + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.setPrivate(true); + update.commit(); + + update = newUpdate(c, changeOwner); + update.setPrivate(false); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.isPrivate()).isFalse(); + } + + @Test + public void defaultReviewersByEmailIsEmpty() throws Exception { + Change c = newChange(); + ChangeNotes notes = newNotes(c); + assertThat(notes.getReviewersByEmail().all()).isEmpty(); + } + + @Test + public void putReviewerByEmail() throws Exception { + Address adr = new Address("Foo Bar", "foo.bar@gerritcodereview.com"); + + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adr, ReviewerStateInternal.REVIEWER); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.getReviewersByEmail().all()).containsExactly(adr); + } + + @Test + public void putAndRemoveReviewerByEmail() throws Exception { + Address adr = new Address("Foo Bar", "foo.bar@gerritcodereview.com"); + + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adr, ReviewerStateInternal.REVIEWER); + update.commit(); + + update = newUpdate(c, changeOwner); + update.removeReviewerByEmail(adr); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.getReviewersByEmail().all()).isEmpty(); + } + + @Test + public void putRemoveAndAddBackReviewerByEmail() throws Exception { + Address adr = new Address("Foo Bar", "foo.bar@gerritcodereview.com"); + + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adr, ReviewerStateInternal.REVIEWER); + update.commit(); + + update = newUpdate(c, changeOwner); + update.removeReviewerByEmail(adr); + update.commit(); + + update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adr, ReviewerStateInternal.CC); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.getReviewersByEmail().all()).containsExactly(adr); + } + + @Test + public void putReviewerByEmailAndCcByEmail() throws Exception { + Address adrReviewer = new Address("Foo Bar", "foo.bar@gerritcodereview.com"); + Address adrCc = new Address("Foo Bor", "foo.bar.2@gerritcodereview.com"); + + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adrReviewer, ReviewerStateInternal.REVIEWER); + update.commit(); + + update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adrCc, ReviewerStateInternal.CC); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.getReviewersByEmail().byState(ReviewerStateInternal.REVIEWER)) + .containsExactly(adrReviewer); + assertThat(notes.getReviewersByEmail().byState(ReviewerStateInternal.CC)) + .containsExactly(adrCc); + assertThat(notes.getReviewersByEmail().all()).containsExactly(adrReviewer, adrCc); + } + + @Test + public void putReviewerByEmailAndChangeToCc() throws Exception { + Address adr = new Address("Foo Bar", "foo.bar@gerritcodereview.com"); + + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adr, ReviewerStateInternal.REVIEWER); + update.commit(); + + update = newUpdate(c, changeOwner); + update.putReviewerByEmail(adr, ReviewerStateInternal.CC); + update.commit(); + + ChangeNotes notes = newNotes(c); + assertThat(notes.getReviewersByEmail().byState(ReviewerStateInternal.REVIEWER)).isEmpty(); + assertThat(notes.getReviewersByEmail().byState(ReviewerStateInternal.CC)).containsExactly(adr); + assertThat(notes.getReviewersByEmail().all()).containsExactly(adr); + } + + @Test + public void hasReviewStarted() throws Exception { + ChangeNotes notes = newNotes(newChange()); + assertThat(notes.hasReviewStarted()).isTrue(); + + notes = newNotes(newWorkInProgressChange()); + assertThat(notes.hasReviewStarted()).isFalse(); + + Change c = newWorkInProgressChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.commit(); + notes = newNotes(c); + assertThat(notes.hasReviewStarted()).isFalse(); + + update = newUpdate(c, changeOwner); + update.setWorkInProgress(true); + update.commit(); + notes = newNotes(c); + assertThat(notes.hasReviewStarted()).isFalse(); + + update = newUpdate(c, changeOwner); + update.setWorkInProgress(false); + update.commit(); + notes = newNotes(c); + assertThat(notes.hasReviewStarted()).isTrue(); + + // Once review is started, setting WIP should have no impact. + c = newChange(); + notes = newNotes(c); + assertThat(notes.hasReviewStarted()).isTrue(); + update = newUpdate(c, changeOwner); + update.setWorkInProgress(true); + update.commit(); + notes = newNotes(c); + assertThat(notes.hasReviewStarted()).isTrue(); + } + + @Test + public void pendingReviewers() throws Exception { + Address adr1 = new Address("Foo Bar1", "foo.bar1@gerritcodereview.com"); + Address adr2 = new Address("Foo Bar2", "foo.bar2@gerritcodereview.com"); + Account.Id ownerId = changeOwner.getAccount().getId(); + Account.Id otherUserId = otherUser.getAccount().getId(); + + ChangeNotes notes = newNotes(newChange()); + assertThat(notes.getPendingReviewers().asTable()).isEmpty(); + assertThat(notes.getPendingReviewersByEmail().asTable()).isEmpty(); + + Change c = newWorkInProgressChange(); + notes = newNotes(c); + assertThat(notes.getPendingReviewers().asTable()).isEmpty(); + assertThat(notes.getPendingReviewersByEmail().asTable()).isEmpty(); + + ChangeUpdate update = newUpdate(c, changeOwner); + update.putReviewer(ownerId, REVIEWER); + update.putReviewer(otherUserId, CC); + update.putReviewerByEmail(adr1, REVIEWER); + update.putReviewerByEmail(adr2, CC); + update.commit(); + notes = newNotes(c); + assertThat(notes.getPendingReviewers().byState(REVIEWER)).containsExactly(ownerId); + assertThat(notes.getPendingReviewers().byState(CC)).containsExactly(otherUserId); + assertThat(notes.getPendingReviewers().byState(REMOVED)).isEmpty(); + assertThat(notes.getPendingReviewersByEmail().byState(REVIEWER)).containsExactly(adr1); + assertThat(notes.getPendingReviewersByEmail().byState(CC)).containsExactly(adr2); + assertThat(notes.getPendingReviewersByEmail().byState(REMOVED)).isEmpty(); + + update = newUpdate(c, changeOwner); + update.removeReviewer(ownerId); + update.removeReviewerByEmail(adr1); + update.commit(); + notes = newNotes(c); + assertThat(notes.getPendingReviewers().byState(REVIEWER)).isEmpty(); + assertThat(notes.getPendingReviewers().byState(CC)).containsExactly(otherUserId); + assertThat(notes.getPendingReviewers().byState(REMOVED)).containsExactly(ownerId); + assertThat(notes.getPendingReviewersByEmail().byState(REVIEWER)).isEmpty(); + assertThat(notes.getPendingReviewersByEmail().byState(CC)).containsExactly(adr2); + assertThat(notes.getPendingReviewersByEmail().byState(REMOVED)).containsExactly(adr1); + + update = newUpdate(c, changeOwner); + update.setWorkInProgress(false); + update.commit(); + notes = newNotes(c); + assertThat(notes.getPendingReviewers().asTable()).isEmpty(); + assertThat(notes.getPendingReviewersByEmail().asTable()).isEmpty(); + + update = newUpdate(c, changeOwner); + update.putReviewer(ownerId, REVIEWER); + update.putReviewerByEmail(adr1, REVIEWER); + update.commit(); + notes = newNotes(c); + assertThat(notes.getPendingReviewers().asTable()).isEmpty(); + assertThat(notes.getPendingReviewersByEmail().asTable()).isEmpty(); + } + + @Test + public void revertOfIsNullByDefault() throws Exception { + Change c = newChange(); + ChangeNotes notes = newNotes(c); + assertThat(notes.getRevertOf()).isNull(); + } + + @Test + public void setRevertOfPersistsValue() throws Exception { + Change changeToRevert = newChange(); + Change c = TestChanges.newChange(project, changeOwner.getAccountId()); + ChangeUpdate update = newUpdate(c, changeOwner); + update.setChangeId(c.getKey().get()); + update.setRevertOf(changeToRevert.getId().get()); + update.commit(); + assertThat(newNotes(c).getRevertOf()).isEqualTo(changeToRevert.getId()); + } + + @Test + public void setRevertOfToCurrentChangeFails() throws Exception { + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + exception.expect(IllegalArgumentException.class); + exception.expectMessage("A change cannot revert itself"); + update.setRevertOf(c.getId().get()); + } + + @Test + public void setRevertOfOnChildCommitFails() throws Exception { + Change c = newChange(); + ChangeUpdate update = newUpdate(c, changeOwner); + update.setRevertOf(newChange().getId().get()); + exception.expect(OrmException.class); + exception.expectMessage("Given ChangeUpdate is only allowed on initial commit"); + update.commit(); + } + private boolean testJson() { return noteUtil.getWriteJson(); } |