[Refactoring] extract merge of a review
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
index a2f7d33..78d6a81 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
@@ -1,6 +1,9 @@
 package com.criteo.gerrit.plugins.automerge;
 
 import com.google.gerrit.common.data.SubmitRecord;
+import com.google.gerrit.extensions.api.changes.SubmitInput;
+import com.google.gerrit.extensions.common.ChangeInfo;
+import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.server.ReviewDb;
@@ -119,4 +122,25 @@
     log.debug(String.format("Change %d is submitable", change));
     return true;
   }
+
+  /**
+   * Merge a review.
+   *
+   * @param info
+   * @throws RestApiException
+   * @throws NoSuchChangeException
+   * @throws OrmException
+   * @throws IOException
+   */
+  public void mergeReview(ChangeInfo info) throws RestApiException, NoSuchChangeException, OrmException, IOException {
+    final SubmitInput input = new SubmitInput();
+    input.waitForMerge = true;
+    final Set<Account.Id> ids = byEmailCache.get(config.getBotEmail());
+    final IdentifiedUser bot = factory.create(ids.iterator().next());
+    final ChangeControl ctl = changeFactory.controlFor(new Change.Id(info._number), bot);
+    final ChangeData changeData = changeDataFactory.create(db.get(), new Change.Id(info._number));
+    final RevisionResource r = new RevisionResource(collection.parse(ctl), changeData.currentPatchSet());
+
+    submitter.apply(r, input);
+  }
 }
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 f05fd4f..0d0cefd 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -166,15 +166,7 @@
         if (mergeable) {
           log.debug(String.format("Change %d is mergeable", reviewNumber));
           for (final ChangeInfo info : related) {
-            final SubmitInput input = new SubmitInput();
-            input.waitForMerge = true;
-            final Set<Account.Id> ids = byEmailCache.get(config.getBotEmail());
-            final IdentifiedUser bot = factory.create(ids.iterator().next());
-            final ChangeControl ctl = changeFactory.controlFor(new Change.Id(info._number), bot);
-            final ChangeData changeData = changeDataFactory.create(db.get(), new Change.Id(info._number));
-
-            final RevisionResource r = new RevisionResource(collection.parse(ctl), changeData.currentPatchSet());
-            submitter.apply(r, input);
+            atomicityHelper.mergeReview(info);
           }
         } else {
           if (approvedButNotMergeable) {