Prevents submission of cross-repo above a non-merged commit

Initial implementation only pushed a "Code Review -1". The submission
is now blocked to prevent partial submission of a cross-repo.

Change-Id: I047573afe100a4cd8743bd0853b16306a51c16e7
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
index ce7384f..fcd4b9b 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -230,7 +230,9 @@
       if (!info.mergeable) {
         mergeable = false;
       }
-      if (!atomicityHelper.isSubmittable(info.project, info._number)) {
+      boolean passesPrologRules = atomicityHelper.isSubmittable(info.project, info._number);
+      boolean dependsOnNonMergedCommit = atomicityHelper.hasDependentReview(info.project, info._number);
+      if (!passesPrologRules || dependsOnNonMergedCommit) {
         submittable = false;
       }
     }
diff --git a/test.rb b/test.rb
index 65d7e24..f0d8cd0 100755
--- a/test.rb
+++ b/test.rb
@@ -68,11 +68,29 @@
     approve_review(commit1)
     check_status(commit1, 'NEW')
     check_status(commit2, 'NEW')
+
     approve_review(commit2)
+
     check_status(commit1, 'MERGED')
     check_status(commit2, 'MERGED')
   end
 
+  def test_crossrepo_topic_2_repos_above_non_mergeable_commit
+    commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
+    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
+    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
+    approve_review(commit1b)
+    check_status(commit1a, 'NEW')
+    check_status(commit1b, 'NEW')
+    check_status(commit2, 'NEW')
+
+    approve_review(commit2)
+
+    check_status(commit1a, 'NEW')
+    check_status(commit1b, 'NEW')
+    check_status(commit2, 'NEW')
+  end
+
  def test_crossrepo_topic_2_repos_below_not_merged_commit
     commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}", "crossrepo/topic2")
     commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}")
@@ -100,6 +118,23 @@
     check_status(commit1b, 'MERGED')
   end
 
+ def test_refupdatedevent_merge_upper_crossrepo
+    commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
+    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
+    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
+    approve_review(commit1b)
+    approve_review(commit2)
+    check_status(commit1a, 'NEW')
+    check_status(commit1b, 'NEW')
+    check_status(commit2, 'NEW')
+
+    approve_review(commit1a)
+
+    check_status(commit1a, 'MERGED')
+    check_status(commit1b, 'MERGED')
+    check_status(commit2, 'MERGED')
+  end
+
   def test_refupdatedevent_does_not_merge_non_mergeable_upper_crossrepo
     commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
     commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")