Move getting the issue pattern into the ItsConfig class

"Getting the issue pattern" is a config thing. Now that we have a
ItsConfig class, it should live there. Hence, we move it there.

Change-Id: Ida13ce787b42d092c5a6bd3bec0507f7a4222749
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfig.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfig.java
index 89bccf4..e3fc124 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfig.java
@@ -17,6 +17,7 @@
 import com.google.gerrit.common.data.RefConfigSection;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.events.ChangeAbandonedEvent;
@@ -31,24 +32,33 @@
 import com.google.gerrit.server.project.RefPatternMatcher;
 import com.google.inject.Inject;
 
+import java.util.regex.Pattern;
+
+import org.eclipse.jgit.lib.Config;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+
 public class ItsConfig {
   private static final Logger log = LoggerFactory.getLogger(ItsConfig.class);
 
   private final String pluginName;
   private final ProjectCache projectCache;
   private final PluginConfigFactory pluginCfgFactory;
+  private final Config gerritConfig;
 
   @Inject
   public ItsConfig(@PluginName String pluginName, ProjectCache projectCache,
-      PluginConfigFactory pluginCfgFactory) {
+      PluginConfigFactory pluginCfgFactory, @GerritServerConfig Config gerritConfig) {
     this.pluginName = pluginName;
     this.projectCache = projectCache;
     this.pluginCfgFactory = pluginCfgFactory;
+    this.gerritConfig = gerritConfig;
   }
 
+  // Plugin enablement --------------------------------------------------------
+
   public boolean isEnabled(Event event) {
     if (event instanceof PatchSetCreatedEvent) {
       PatchSetCreatedEvent e = (PatchSetCreatedEvent) event;
@@ -114,4 +124,20 @@
   private boolean match(String refName, String refPattern) {
     return RefPatternMatcher.getMatcher(refPattern).match(refName, null);
   }
+
+  // Issue association --------------------------------------------------------
+
+  /**
+   * Gets the regular expression used to identify issue ids.
+   * @return the regular expression, or {@code null}, if there is no pattern
+   *    to match issue ids.
+   */
+  public Pattern getIssuePattern() {
+    Pattern ret = null;
+    String match = gerritConfig.getString("commentLink", pluginName, "match");
+    if (match != null) {
+      ret = Pattern.compile(match);
+    }
+    return ret;
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractor.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractor.java
index 1d57c2a..c4a6864 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractor.java
@@ -2,15 +2,14 @@
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 
+import com.googlesource.gerrit.plugins.hooks.its.ItsConfig;
+
 import org.apache.commons.lang.StringUtils;
-import org.eclipse.jgit.lib.Config;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -23,19 +22,17 @@
   private static final Logger log = LoggerFactory.getLogger(
       IssueExtractor.class);
 
-  private final Config gerritConfig;
-  private final String pluginName;
   private final CommitMessageFetcher commitMessageFetcher;
   private final ReviewDb db;
+  private final ItsConfig itsConfig;
 
   @Inject
-  IssueExtractor(@GerritServerConfig Config gerritConfig,
-      @PluginName String pluginName, CommitMessageFetcher commitMessageFetcher,
+  IssueExtractor(ItsConfig itsConfig,
+      CommitMessageFetcher commitMessageFetcher,
       ReviewDb db) {
-    this.gerritConfig = gerritConfig;
-    this.pluginName = pluginName;
     this.commitMessageFetcher = commitMessageFetcher;
     this.db = db;
+    this.itsConfig = itsConfig;
   }
 
   /**
@@ -45,7 +42,7 @@
    * @return array of {@link String}. Each String being a found issue id.
    */
   public String[] getIssueIds(String haystack) {
-    Pattern pattern = getPattern();
+    Pattern pattern = itsConfig.getIssuePattern();
     if (pattern == null) return new String[] {};
 
     log.debug("Matching '" + haystack + "' against " + pattern.pattern());
@@ -62,20 +59,6 @@
   }
 
   /**
-   * Gets the regular expression used to identify issue ids.
-   * @return the regular expression, or {@code null}, if there is no pattern
-   *    to match issue ids.
-   */
-  public Pattern getPattern() {
-    Pattern ret = null;
-    String match = gerritConfig.getString("commentLink", pluginName, "match");
-    if (match != null) {
-      ret = Pattern.compile(match);
-    }
-    return ret;
-  }
-
-  /**
    * Helper funcion for {@link #getIssueIds(String, String)}.
    * <p>
    * Adds a text's issues for a given occurrence to the map returned by
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateComment.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateComment.java
index a396ed9..8dd24c2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateComment.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateComment.java
@@ -118,7 +118,7 @@
           sb.append("Hint: insert one or more issue-id anywhere in the ");
           sb.append("commit message.\n");
           sb.append("      Issue-ids are strings matching ");
-          sb.append(issueExtractor.getPattern().pattern());
+          sb.append(itsConfig.getIssuePattern().pattern());
           sb.append("\n");
           sb.append("      and are pointing to existing tickets on ");
           sb.append(pluginName);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfigTest.java
index ea3671c..ebf36b2 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/hooks/its/ItsConfigTest.java
@@ -19,6 +19,7 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.config.FactoryModule;
+import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.data.ChangeAttribute;
@@ -30,6 +31,8 @@
 
 import com.googlesource.gerrit.plugins.hooks.testutil.LoggingMockingTestCase;
 
+import org.eclipse.jgit.lib.Config;
+
 import java.util.Arrays;
 
 public class ItsConfigTest extends LoggingMockingTestCase {
@@ -37,6 +40,7 @@
 
   private ProjectCache projectCache;
   private PluginConfigFactory pluginConfigFactory;
+  private Config serverConfig;
 
   public void setupIsEnabled(String enabled, String parentEnabled,
       String[] branches) {
@@ -403,6 +407,30 @@
     assertFalse(itsConfig.isEnabled(event));
   }
 
+  public void testPatternNullMatch() {
+    ItsConfig itsConfig = createItsConfig();
+
+    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
+        .andReturn(null).atLeastOnce();
+
+    replayMocks();
+
+    assertNull("Pattern for null match is not null",
+        itsConfig.getIssuePattern());
+  }
+
+  public void testPattern() {
+    ItsConfig itsConfig = createItsConfig();
+
+    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
+        .andReturn("TestPattern").atLeastOnce();
+
+    replayMocks();
+
+    assertEquals("Expected and generated pattern are not equal",
+        "TestPattern", itsConfig.getIssuePattern().pattern());
+  }
+
   private ItsConfig createItsConfig() {
     return injector.getInstance(ItsConfig.class);
   }
@@ -424,6 +452,10 @@
 
       bind(String.class).annotatedWith(PluginName.class)
         .toInstance("ItsTestName");
+
+      serverConfig = createMock(Config.class);
+      bind(Config.class).annotatedWith(GerritServerConfig.class)
+          .toInstance(serverConfig);
     }
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractorTest.java b/src/test/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractorTest.java
index a18a1ef..a6c42c7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractorTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/hooks/util/IssueExtractorTest.java
@@ -17,21 +17,19 @@
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gerrit.reviewdb.client.RevId;
 import com.google.gerrit.reviewdb.server.PatchSetAccess;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.config.FactoryModule;
-import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 
+import com.googlesource.gerrit.plugins.hooks.its.ItsConfig;
 import com.googlesource.gerrit.plugins.hooks.testutil.LoggingMockingTestCase;
 
-import org.eclipse.jgit.lib.Config;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
@@ -40,44 +38,21 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({PatchSet.class,RevId.class})
 public class IssueExtractorTest extends LoggingMockingTestCase {
   private Injector injector;
-  private Config serverConfig;
+  private ItsConfig itsConfig;
   private CommitMessageFetcher commitMessageFetcher;
   private ReviewDb db;
 
-  public void testPatternNullMatch() {
-    IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn(null).atLeastOnce();
-
-    replayMocks();
-
-    assertNull("Pattern for null match is not null",
-        issueExtractor.getPattern());
-  }
-
-  public void testPattern() {
-    IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("TestPattern").atLeastOnce();
-
-    replayMocks();
-
-    assertEquals("Expected and generated pattern are not equal",
-        "TestPattern", issueExtractor.getPattern().pattern());
-  }
-
   public void testIssueIdsNullPattern() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
 
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn(null).atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(null)
+        .atLeastOnce();
 
     replayMocks();
 
@@ -87,8 +62,9 @@
 
   public void testIssueIdsNoMatch() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#(\\d+)").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     replayMocks();
 
@@ -100,8 +76,9 @@
 
   public void testIssueIdsFullMatch() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#(\\d+)").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     replayMocks();
 
@@ -114,8 +91,9 @@
 
   public void testIssueIdsMatch() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#(\\d+)").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     replayMocks();
 
@@ -128,8 +106,9 @@
 
   public void testIssueIdsGrouplessMatch() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#\\d+").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#\\d+"))
+        .atLeastOnce();
 
     replayMocks();
 
@@ -142,8 +121,9 @@
 
   public void testIssueIdsMultiGroupMatch() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#(\\d)(\\d+)").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern())
+        .andReturn(Pattern.compile("bug#(\\d)(\\d+)")).atLeastOnce();
 
     replayMocks();
 
@@ -156,8 +136,9 @@
 
   public void testIssueIdsMulipleMatches() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#(\\d+)").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     replayMocks();
 
@@ -173,8 +154,9 @@
 
   public void testIssueIdsMulipleMatchesWithDuplicates() {
     IssueExtractor issueExtractor = injector.getInstance(IssueExtractor.class);
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-        .andReturn("bug#(\\d+)").atLeastOnce();
+
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     replayMocks();
 
@@ -190,8 +172,8 @@
   }
 
   public void testIssueIdsCommitSingleIssue() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -217,8 +199,8 @@
   }
 
   public void testIssueIdsCommitMultipleIssues() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -245,8 +227,8 @@
   }
 
   public void testIssueIdsCommitMultipleIssuesMultipleTimes() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -273,8 +255,8 @@
   }
 
   public void testIssueIdsCommitSingleIssueBody() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -303,8 +285,8 @@
   }
 
   public void testIssueIdsCommitSingleIssueFooter() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -334,8 +316,8 @@
   }
 
   public void testIssueIdsCommitMultipleIssuesFooter() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -374,8 +356,8 @@
   }
 
   public void testIssueIdsCommitDifferentParts() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -408,8 +390,8 @@
   }
 
   public void testIssueIdsCommitDifferentPartsEmptySubject() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -441,8 +423,8 @@
   }
 
   public void testIssueIdsCommitDifferentPartsLinePastFooter() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -475,8 +457,8 @@
   }
 
   public void testIssueIdsCommitDifferentPartsLinesPastFooter() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -510,8 +492,8 @@
   }
 
   public void testIssueIdsCommitDifferentPartsNoFooter() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -537,8 +519,8 @@
   }
 
   public void testIssueIdsCommitDifferentPartsNoFooterTrailingLine() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -564,8 +546,8 @@
   }
 
   public void testIssueIdsCommitDifferentPartsNoFooterTrailingLines() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -592,8 +574,8 @@
   }
 
   public void testIssueIdsCommitEmpty() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn("");
@@ -613,8 +595,8 @@
   }
 
   public void testIssueIdsCommitBlankLine() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn("\n");
@@ -632,8 +614,8 @@
   }
 
   public void testIssueIdsCommitBlankLines() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn("\n\n");
@@ -651,8 +633,8 @@
   }
 
   public void testIssueIdsCommitMoreBlankLines() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn("\n\n\n");
@@ -670,8 +652,8 @@
   }
 
   public void testIssueIdsCommitMixed() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn(
@@ -710,8 +692,8 @@
   }
 
   public void testIssueIdsCommitWAddedEmptyFirst() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     expect(commitMessageFetcher.fetchGuarded("testProject",
         "1234567891123456789212345678931234567894")).andReturn("");
@@ -732,8 +714,8 @@
   }
 
   public void testIssueIdsCommitWAddedSingleSubjectIssueFirst() {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -768,8 +750,8 @@
 
   public void testIssueIdsCommitWAddedSingleSubjectIssueSecondEmpty()
       throws OrmException {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -830,8 +812,8 @@
 
   public void testIssueIdsCommitWAddedSingleSubjectIssueSecondSame()
       throws OrmException {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -891,8 +873,8 @@
 
   public void testIssueIdsCommitWAddedSingleSubjectIssueSecondBody()
       throws OrmException {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -953,8 +935,8 @@
 
   public void testIssueIdsCommitWAddedSingleSubjectIssueSecondFooter()
       throws OrmException {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -1017,8 +999,8 @@
 
   public void testIssueIdsCommitWAddedSubjectFooter()
       throws OrmException {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -1085,8 +1067,8 @@
 
   public void testIssueIdsCommitWAddedMultiple()
       throws OrmException {
-    expect(serverConfig.getString("commentLink", "ItsTestName", "match"))
-    .andReturn("bug#(\\d+)").atLeastOnce();
+    expect(itsConfig.getIssuePattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+        .atLeastOnce();
 
     Change.Id changeId = createMock(Change.Id.class);
 
@@ -1164,12 +1146,8 @@
   private class TestModule extends FactoryModule {
     @Override
     protected void configure() {
-      bind(String.class).annotatedWith(PluginName.class)
-          .toInstance("ItsTestName");
-
-      serverConfig = createMock(Config.class);
-      bind(Config.class).annotatedWith(GerritServerConfig.class)
-          .toInstance(serverConfig);
+      itsConfig = createMock(ItsConfig.class);
+      bind(ItsConfig.class).toInstance(itsConfig);
 
       commitMessageFetcher = createMock(CommitMessageFetcher.class);
       bind(CommitMessageFetcher.class).toInstance(commitMessageFetcher);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateCommentTest.java b/src/test/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateCommentTest.java
index 9fc9d79..2358ced 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateCommentTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/hooks/validation/ItsValidateCommentTest.java
@@ -48,6 +48,8 @@
   private Config serverConfig;
   private IssueExtractor issueExtractor;
   private ItsFacade itsFacade;
+  private ItsConfig itsConfig;
+
   private Project project = new Project(new Project.NameKey("myProject"));
 
   public void testOptional() throws CommitValidationException {
@@ -468,7 +470,9 @@
   }
 
   private void setupCommonMocks() {
-    expect(issueExtractor.getPattern()).andReturn(Pattern.compile("bug#(\\d+)"))
+    expect(itsConfig.getIssuePattern())
+        .andReturn(Pattern.compile("bug#(\\d+)")).anyTimes();
+    expect(itsConfig.isEnabled("myProject", null)).andReturn(true)
         .anyTimes();
   }
 
@@ -497,12 +501,8 @@
       itsFacade = createMock(ItsFacade.class);
       bind(ItsFacade.class).toInstance(itsFacade);
 
-      bind(ItsConfig.class).toInstance(new ItsConfig(null, null, null) {
-        @Override
-        public boolean isEnabled(String project, String branch) {
-          return true;
-        }
-      });
+      itsConfig = createMock(ItsConfig.class);
+      bind(ItsConfig.class).toInstance(itsConfig);
     }
   }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/hooks/workflow/ActionControllerTest.java b/src/test/java/com/googlesource/gerrit/plugins/hooks/workflow/ActionControllerTest.java
index eea768c..df122d5 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/hooks/workflow/ActionControllerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/hooks/workflow/ActionControllerTest.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.googlesource.gerrit.plugins.hooks.workflow;
 
+import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.expect;
 
 import com.google.common.collect.Lists;
@@ -37,6 +38,7 @@
   private PropertyExtractor propertyExtractor;
   private RuleBase ruleBase;
   private ActionExecutor actionExecutor;
+  private ItsConfig itsConfig;
 
   public void testNoPropertySets() {
     ActionController actionController = createActionController();
@@ -182,10 +184,17 @@
     return injector.getInstance(ActionController.class);
   }
 
+  private void setupCommonMocks() {
+    expect(itsConfig.isEnabled(anyObject(Event.class))).andReturn(true)
+        .anyTimes();
+  }
+
   @Override
   public void setUp() throws Exception {
     super.setUp();
     injector = Guice.createInjector(new TestModule());
+
+    setupCommonMocks();
   }
 
   private class TestModule extends FactoryModule {
@@ -200,12 +209,8 @@
       actionExecutor = createMock(ActionExecutor.class);
       bind(ActionExecutor.class).toInstance(actionExecutor);
 
-      bind(ItsConfig.class).toInstance(new ItsConfig(null, null, null) {
-        @Override
-        public boolean isEnabled(Event event) {
-          return true;
-        }
-      });
+      itsConfig = createMock(ItsConfig.class);
+      bind(ItsConfig.class).toInstance(itsConfig);
     }
   }
 }
\ No newline at end of file