summaryrefslogtreecommitdiffstats
path: root/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/PushOneCommit.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/PushOneCommit.java')
-rw-r--r--gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/PushOneCommit.java179
1 files changed, 179 insertions, 0 deletions
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/PushOneCommit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/PushOneCommit.java
new file mode 100644
index 0000000000..fb1b59206d
--- /dev/null
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/PushOneCommit.java
@@ -0,0 +1,179 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.acceptance.git;
+
+import static com.google.gerrit.acceptance.git.GitUtil.add;
+import static com.google.gerrit.acceptance.git.GitUtil.amendCommit;
+import static com.google.gerrit.acceptance.git.GitUtil.createCommit;
+import static com.google.gerrit.acceptance.git.GitUtil.pushHead;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import com.google.common.base.Function;
+import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.gerrit.acceptance.TestAccount;
+import com.google.gerrit.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gerrit.reviewdb.client.PatchSetApproval;
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gwtorm.server.OrmException;
+
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.lib.PersonIdent;
+import org.eclipse.jgit.transport.PushResult;
+import org.eclipse.jgit.transport.RemoteRefUpdate;
+import org.eclipse.jgit.transport.RemoteRefUpdate.Status;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Set;
+
+public class PushOneCommit {
+ public final static String SUBJECT = "test commit";
+
+ private final static String FILE_NAME = "a.txt";
+ private final static String FILE_CONTENT = "some content";
+
+ private final ReviewDb db;
+ private final PersonIdent i;
+
+ private final String subject;
+ private final String fileName;
+ private final String content;
+ private String changeId;
+
+ public PushOneCommit(ReviewDb db, PersonIdent i) {
+ this(db, i, SUBJECT, FILE_NAME, FILE_CONTENT);
+ }
+
+ public PushOneCommit(ReviewDb db, PersonIdent i, String subject,
+ String fileName, String content) {
+ this(db, i, subject, fileName, content, null);
+ }
+
+ public PushOneCommit(ReviewDb db, PersonIdent i, String subject,
+ String fileName, String content, String changeId) {
+ this.db = db;
+ this.i = i;
+ this.subject = subject;
+ this.fileName = fileName;
+ this.content = content;
+ this.changeId = changeId;
+ }
+
+ public Result to(Git git, String ref)
+ throws GitAPIException, IOException {
+ add(git, fileName, content);
+ if (changeId != null) {
+ amendCommit(git, i, subject, changeId);
+ } else {
+ changeId = createCommit(git, i, subject);
+ }
+ return new Result(db, ref, pushHead(git, ref), changeId, subject);
+ }
+
+ public static class Result {
+ private final ReviewDb db;
+ private final String ref;
+ private final PushResult result;
+ private final String changeId;
+ private final String subject;
+
+ private Result(ReviewDb db, String ref, PushResult result, String changeId,
+ String subject) {
+ this.db = db;
+ this.ref = ref;
+ this.result = result;
+ this.changeId = changeId;
+ this.subject = subject;
+ }
+
+ public PatchSet.Id getPatchSetId() throws OrmException {
+ return Iterables.getOnlyElement(
+ db.changes().byKey(new Change.Key(changeId))).currentPatchSetId();
+ }
+
+ public String getChangeId() {
+ return changeId;
+ }
+
+ public void assertChange(Change.Status expectedStatus,
+ String expectedTopic, TestAccount... expectedReviewers)
+ throws OrmException {
+ Change c =
+ Iterables.getOnlyElement(db.changes().byKey(new Change.Key(changeId)).toList());
+ assertEquals(subject, c.getSubject());
+ assertEquals(expectedStatus, c.getStatus());
+ assertEquals(expectedTopic, Strings.emptyToNull(c.getTopic()));
+ assertReviewers(c, expectedReviewers);
+ }
+
+ private void assertReviewers(Change c, TestAccount... expectedReviewers)
+ throws OrmException {
+ Set<Account.Id> expectedReviewerIds =
+ Sets.newHashSet(Lists.transform(Arrays.asList(expectedReviewers),
+ new Function<TestAccount, Account.Id>() {
+ @Override
+ public Account.Id apply(TestAccount a) {
+ return a.id;
+ }
+ }));
+
+ for (PatchSetApproval psa : db.patchSetApprovals().byPatchSet(
+ c.currentPatchSetId())) {
+ assertTrue("unexpected reviewer " + psa.getAccountId(),
+ expectedReviewerIds.remove(psa.getAccountId()));
+ }
+ assertTrue("missing reviewers: " + expectedReviewerIds,
+ expectedReviewerIds.isEmpty());
+ }
+
+ public void assertOkStatus() {
+ assertStatus(Status.OK, null);
+ }
+
+ public void assertErrorStatus(String expectedMessage) {
+ assertStatus(Status.REJECTED_OTHER_REASON, expectedMessage);
+ }
+
+ private void assertStatus(Status expectedStatus, String expectedMessage) {
+ RemoteRefUpdate refUpdate = result.getRemoteUpdate(ref);
+ assertEquals(message(refUpdate),
+ expectedStatus, refUpdate.getStatus());
+ assertEquals(expectedMessage, refUpdate.getMessage());
+ }
+
+ public void assertMessage(String expectedMessage) {
+ RemoteRefUpdate refUpdate = result.getRemoteUpdate(ref);
+ assertTrue(message(refUpdate), message(refUpdate).toLowerCase().contains(
+ expectedMessage.toLowerCase()));
+ }
+
+ private String message(RemoteRefUpdate refUpdate) {
+ StringBuilder b = new StringBuilder();
+ if (refUpdate.getMessage() != null) {
+ b.append(refUpdate.getMessage());
+ b.append("\n");
+ }
+ b.append(result.getMessages());
+ return b.toString();
+ }
+ }
+}