Merge "Don't import Id/Key/NameKey directly"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
index de7348e..79498df 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/automerger/AutomergeChangeAction.java
@@ -62,7 +62,7 @@
    * @throws StorageException
    */
   @Override
-  public Object apply(RevisionResource rev, Input input)
+  public Response<?> apply(RevisionResource rev, Input input)
       throws IOException, RestApiException, StorageException, ConfigInvalidException {
     Map<String, Boolean> branchMap = input.branchMap;
 
diff --git a/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java b/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
index 4cf9c22..034bb87 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
@@ -56,16 +56,13 @@
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.server.group.SystemGroupBackend;
-import com.google.gerrit.testing.TestTimeUtil;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.automerger.helpers.ConfigOption;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
-import java.util.concurrent.TimeUnit;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
 import org.eclipse.jgit.junit.TestRepository;
 import org.eclipse.jgit.lib.Config;
@@ -112,7 +109,7 @@
     assertAutomergerChangeCreatedMessage(dsTwoChangeInfo.id);
 
     ChangeInfo masterChangeInfo = sortedChanges.get(2);
-    assertCodeReview(masterChangeInfo.id, 0, null);
+    assertCodeReviewMissing(masterChangeInfo.id);
     assertThat(masterChangeInfo.branch).isEqualTo("master");
 
     // Ensure that commit subjects are correct
@@ -226,75 +223,6 @@
   }
 
   @Test
-  public void testDiamondMerge_identicalDiamondSides() throws Exception {
-    Project.NameKey manifestNameKey = defaultSetup();
-    // Create initial change
-    PushOneCommit.Result initialResult = createChange("subject", "filename", "echo Hello");
-    // Project name is scoped by test, so we need to get it from our initial change
-    String projectName = initialResult.getChange().project().get();
-    createBranch(BranchNameKey.create(projectName, "left"));
-    createBranch(BranchNameKey.create(projectName, "right"));
-    initialResult.assertOkStatus();
-    merge(initialResult);
-
-    String leftRevision = gApi.projects().name(projectName).branch("left").get().revision;
-    String rightRevision = gApi.projects().name(projectName).branch("right").get().revision;
-    // For this test, right == left
-    assertThat(leftRevision).isEqualTo(rightRevision);
-    createBranch(BranchNameKey.create(projectName, "bottom"));
-    pushDiamondConfig(manifestNameKey.get(), projectName);
-
-    // Freeze time so that the merge commit from left->bottom and right->bottom have same SHA
-    TestTimeUtil.resetWithClockStep(0, TimeUnit.MILLISECONDS);
-    TestTimeUtil.setClock(new Timestamp(TestTimeUtil.START.toEpochMilli()));
-    // After we upload our config, we upload a new patchset to create the downstreams.
-    PushOneCommit.Result result =
-        createChange(testRepo, "master", "subject", "filename2", "echo Hello", "sometopic");
-    TestTimeUtil.useSystemTime();
-    result.assertOkStatus();
-
-    List<ChangeInfo> changesInTopic =
-        gApi.changes()
-            .query("topic: " + gApi.changes().id(result.getChangeId()).topic())
-            .withOption(CURRENT_REVISION)
-            .get();
-    assertThat(changesInTopic).hasSize(4);
-    // +2 and submit
-    merge(result);
-    List<ChangeInfo> sortedChanges = sortedChanges(changesInTopic);
-
-    // Should create two changes on bottom, since left and right are different.
-    ChangeInfo bottomChangeInfo = sortedChanges.get(0);
-    assertThat(bottomChangeInfo.branch).isEqualTo("bottom");
-    assertCodeReview(bottomChangeInfo.id, 2, "autogenerated:Automerger");
-
-    ChangeInfo leftChangeInfo = sortedChanges.get(1);
-    assertThat(leftChangeInfo.branch).isEqualTo("left");
-    assertCodeReview(leftChangeInfo.id, 2, "autogenerated:Automerger");
-
-    ChangeInfo masterChangeInfo = sortedChanges.get(2);
-    assertThat(masterChangeInfo.branch).isEqualTo("master");
-    assertCodeReview(masterChangeInfo.id, 2, null);
-
-    ChangeInfo rightChangeInfo = sortedChanges.get(3);
-    assertThat(rightChangeInfo.branch).isEqualTo("right");
-    assertCodeReview(rightChangeInfo.id, 2, "autogenerated:Automerger");
-
-    // Ensure that commit subjects are correct
-    String masterSubject = masterChangeInfo.subject;
-    String shortMasterSha = masterChangeInfo.currentRevision.substring(0, 10);
-    String shortLeftSha = leftChangeInfo.currentRevision.substring(0, 10);
-    assertThat(masterChangeInfo.subject).doesNotContainMatch("automerger");
-    assertThat(leftChangeInfo.subject)
-        .isEqualTo("[automerger] " + masterSubject + " am: " + shortMasterSha);
-    assertThat(rightChangeInfo.subject)
-        .isEqualTo("[automerger] " + masterSubject + " am: " + shortMasterSha);
-    assertThat(bottomChangeInfo.subject)
-        .isEqualTo(
-            "[automerger] " + masterSubject + " am: " + shortMasterSha + " am: " + shortLeftSha);
-  }
-
-  @Test
   public void testChangeStack() throws Exception {
     Project.NameKey manifestNameKey = defaultSetup();
     // Create initial change
@@ -454,7 +382,7 @@
     assertThat(dsTwoContent.asString()).isEqualTo(content.asString());
 
     ChangeInfo masterChangeInfo = sortedChanges.get(2);
-    assertCodeReview(masterChangeInfo.id, 0, null);
+    assertCodeReviewMissing(masterChangeInfo.id);
     assertThat(masterChangeInfo.branch).isEqualTo("master");
 
     // Ensure that commit subjects are correct
@@ -514,7 +442,7 @@
     assertThat(dsTwoChange.current().files().get("filename").linesDeleted).isEqualTo(1);
 
     ChangeInfo masterChangeInfo = sortedChanges.get(2);
-    assertCodeReview(masterChangeInfo.id, 0, null);
+    assertCodeReviewMissing(masterChangeInfo.id);
     assertThat(masterChangeInfo.branch).isEqualTo("master");
 
     // Ensure that commit subjects are correct
@@ -646,8 +574,8 @@
     assertAutomergerChangeCreatedMessage(dsTwoChangeInfo.id);
 
     ChangeInfo masterChangeInfo = sortedChanges.get(1);
-    // This is 0 because the -2 vote on master failed due to permissions
-    assertCodeReview(masterChangeInfo.id, 0, null);
+    // This is not set because the -2 vote on master failed due to permissions
+    assertCodeReviewMissing(masterChangeInfo.id);
     assertThat(masterChangeInfo.branch).isEqualTo("master");
     assertThat(getLastMessage(masterChangeInfo.id).tag).isEqualTo("autogenerated:MergeConflict");
 
@@ -845,10 +773,10 @@
 
     List<ChangeInfo> sortedChanges = sortedChanges(changesInTopic);
 
-    // Check that downstream is at Code-Review 0
+    // Check that downstream has no Code-Review
     ChangeInfo dsOneChangeInfo = sortedChanges.get(0);
     assertThat(dsOneChangeInfo.branch).isEqualTo("ds_one");
-    assertCodeReview(dsOneChangeInfo.id, 0, null);
+    assertCodeReviewMissing(dsOneChangeInfo.id);
 
     // Try to +2 master and see it succeed to +2 master and ds_one
     ChangeInfo masterChangeInfo = sortedChanges.get(2);
@@ -911,10 +839,10 @@
 
     List<ChangeInfo> sortedChanges = sortedChanges(changesInTopic);
 
-    // Check that downstream is at Code-Review 0
+    // Check that downstream has no Code-Review
     ChangeInfo dsOneChangeInfo = sortedChanges.get(0);
     assertThat(dsOneChangeInfo.branch).isEqualTo("ds_one");
-    assertCodeReview(dsOneChangeInfo.id, 0, null);
+    assertCodeReviewMissing(dsOneChangeInfo.id);
 
     // Try to +1 master and see it succeed to +1 master and ds_one
     ChangeInfo masterChangeInfo = sortedChanges.get(2);