diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java b/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java
index 9f40f2c..01923de 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java
@@ -56,7 +56,7 @@
   Provider<PostReview> reviewer;
 
   public void commentOnReview(final int number, final String commentTemplate) throws NoSuchChangeException,
-      OrmException, AuthException, BadRequestException, UnprocessableEntityException, IOException {
+  OrmException, AuthException, BadRequestException, UnprocessableEntityException, IOException {
     final ReviewInput message = new ReviewInput();
     message.message = getCommentFromFile(commentTemplate);
     final Set<Account.Id> ids = byEmailCache.get(config.getBotEmail());
@@ -81,7 +81,7 @@
   }
 
   public void setMinusTwo(final int number, final String commentTemplate) throws NoSuchChangeException, OrmException,
-      AuthException, BadRequestException, UnprocessableEntityException, IOException {
+  AuthException, BadRequestException, UnprocessableEntityException, IOException {
     final ReviewInput message = new ReviewInput();
     message.message = getCommentFromFile(commentTemplate);
     message.label("Code-Review", -2);
diff --git a/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java b/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java
index 1c23f4d..f3b2ace 100644
--- a/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java
+++ b/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java
@@ -1,29 +1,47 @@
 package com.criteo.gerrit.plugins.automerge;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import com.google.gerrit.server.config.SitePaths;
 
 import org.eclipse.jgit.lib.Config;
 import org.junit.Test;
 
+import java.io.File;
+import java.io.FileNotFoundException;
+
 public class AutomergeConfigTest {
 
   @Test
   public void testGetDefaultConfig() {
     final Config conf = new Config();
-    final AutomergeConfig amconf = new AutomergeConfig(conf);
+    try {
+      final SitePaths paths = new SitePaths(new File("."));
 
-    assertEquals(amconf.getBotEmail(), AutomergeConfig.getDefaultBotEmail());
-    assertEquals(amconf.getTopicPrefix(), AutomergeConfig.getDefaultTopicPrefix());
+      final AutomergeConfig amconf = new AutomergeConfig(conf, paths);
+
+      assertEquals(amconf.getBotEmail(), AutomergeConfig.getDefaultBotEmail());
+      assertEquals(amconf.getTopicPrefix(), AutomergeConfig.getDefaultTopicPrefix());
+    } catch (final FileNotFoundException e) {
+      fail();
+    }
   }
 
   @Test
   public void testGetValues() {
     final Config conf = new Config();
-    conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.BOT_EMAIL_KEY, "Foo@bar.com");
-    conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.TOPIC_PREFIX_KEY, "fake_prefix");
+    try {
+      final SitePaths paths = new SitePaths(new File("."));
 
-    final AutomergeConfig amconf = new AutomergeConfig(conf);
-    assertEquals(amconf.getBotEmail(), "Foo@bar.com");
-    assertEquals(amconf.getTopicPrefix(), "fake_prefix");
+      conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.BOT_EMAIL_KEY, "Foo@bar.com");
+      conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.TOPIC_PREFIX_KEY, "fake_prefix");
+
+      final AutomergeConfig amconf = new AutomergeConfig(conf, paths);
+      assertEquals(amconf.getBotEmail(), "Foo@bar.com");
+      assertEquals(amconf.getTopicPrefix(), "fake_prefix");
+    } catch (final FileNotFoundException e) {
+      fail();
+    }
   }
 }
