Fix flaky issue validation tests

Match complete issue-list entries when checking validation messages
instead of searching for issue ID substrings.

A randomly generated commit SHA may contain the same substring and cause
false test failures or successes.

The flaky assertions are fixed in:

* testSuggestedMatchingSingleNonExisting
* testSuggestedMatchingMultipleOneNonExsting
* testSuggestedMatchingMultipleSomeNonExsting
* testSuggestedMatchingMultipleIOExceptionIsNonExsting

The other validation tests are updated to use the shared bug ID and
commit-message constants, consolidating the test data introduced by this
fix without changing their behavior.

Bug: Issue 564285978
Change-Id: I460dea02c2bd60cf8e02e0ff448822789892c651
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/base/validation/ItsValidateCommentTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/base/validation/ItsValidateCommentTest.java
index de86e86..9dbb07d 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/its/base/validation/ItsValidateCommentTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/its/base/validation/ItsValidateCommentTest.java
@@ -45,6 +45,12 @@
 import org.eclipse.jgit.transport.ReceiveCommand;
 
 public class ItsValidateCommentTest extends LoggingMockingTestCase {
+  private static final String BUG_ID_1 = "4711";
+  private static final String BUG_ID_2 = "42";
+  private static final String SINGLE_BUG_MESSAGE = String.format("bug#%s", BUG_ID_1);
+  private static final String MULTIPLE_BUG_MESSAGE =
+      String.format("bug#%s, bug#%s", BUG_ID_1, BUG_ID_2);
+
   private Injector injector;
   private IssueExtractor issueExtractor;
   private ItsFacade itsFacade;
@@ -136,41 +142,41 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711");
+    RevCommit commit = createCommit(SINGLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.SUGGESTED);
-    when(issueExtractor.getIssueIds("bug#4711")).thenReturn(new String[] {"4711"});
+    when(issueExtractor.getIssueIds(SINGLE_BUG_MESSAGE)).thenReturn(new String[] {BUG_ID_1});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(true);
 
     ret = ivc.onCommitReceived(event);
 
     assertEmptyList(ret);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711");
-    verifyOneOrMore(itsFacade).exists("4711");
+    verifyOneOrMore(issueExtractor).getIssueIds(SINGLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
   }
 
   public void testMandatoryMatchingSingleExisting() throws CommitValidationException, IOException {
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711");
+    RevCommit commit = createCommit(SINGLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711")).thenReturn(new String[] {"4711"});
+    when(issueExtractor.getIssueIds(SINGLE_BUG_MESSAGE)).thenReturn(new String[] {BUG_ID_1});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(true);
 
     ret = ivc.onCommitReceived(event);
 
     assertEmptyList(ret);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711");
-    verifyOneOrMore(itsFacade).exists("4711");
+    verifyOneOrMore(issueExtractor).getIssueIds(SINGLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
   }
 
   public void testSuggestedMatchingSingleNonExisting()
@@ -178,13 +184,13 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711");
+    RevCommit commit = createCommit(SINGLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.SUGGESTED);
-    when(issueExtractor.getIssueIds("bug#4711")).thenReturn(new String[] {"4711"});
+    when(issueExtractor.getIssueIds(SINGLE_BUG_MESSAGE)).thenReturn(new String[] {BUG_ID_1});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(false);
 
     ret = ivc.onCommitReceived(event);
 
@@ -194,76 +200,78 @@
         ret.get(0).getMessage().contains("Non-existing"));
     assertTrue(
         "First CommitValidationMessages does not contain '4711'",
-        ret.get(0).getMessage().contains("4711"));
+        ret.get(0).getMessage().contains(bugEntryInMessage(BUG_ID_1)));
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711");
-    verifyOneOrMore(itsFacade).exists("4711");
+    verifyOneOrMore(issueExtractor).getIssueIds(SINGLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
   }
 
   public void testMandatoryMatchingSingleNonExisting() throws IOException {
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711");
+    RevCommit commit = createCommit(SINGLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711")).thenReturn(new String[] {"4711"});
+    when(issueExtractor.getIssueIds(SINGLE_BUG_MESSAGE)).thenReturn(new String[] {BUG_ID_1});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(false);
 
     CommitValidationException thrown =
         assertThrows(CommitValidationException.class, () -> ivc.onCommitReceived(event));
     assertThat(thrown).hasMessageThat().contains("Non-existing");
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711");
-    verifyOneOrMore(itsFacade).exists("4711");
+    verifyOneOrMore(issueExtractor).getIssueIds(SINGLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
   }
 
   public void testSuggestedMatchingMultiple() throws CommitValidationException, IOException {
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.SUGGESTED);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(true);
-    when(itsFacade.exists("42")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(true);
 
     ret = ivc.onCommitReceived(event);
 
     assertEmptyList(ret);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testMandatoryMatchingMultiple() throws CommitValidationException, IOException {
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(true);
-    when(itsFacade.exists("42")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(true);
 
     ret = ivc.onCommitReceived(event);
 
     assertEmptyList(ret);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testSuggestedMatchingMultipleOneNonExsting()
@@ -271,14 +279,15 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.SUGGESTED);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(false);
-    when(itsFacade.exists("42")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(true);
 
     ret = ivc.onCommitReceived(event);
 
@@ -288,37 +297,38 @@
         ret.get(0).getMessage().contains("Non-existing"));
     assertTrue(
         "First CommitValidationMessages does not contain '4711'",
-        ret.get(0).getMessage().contains("4711"));
+        ret.get(0).getMessage().contains(bugEntryInMessage(BUG_ID_1)));
     assertFalse(
         "First CommitValidationMessages contains '42', although " + "that bug exists",
-        ret.get(0).getMessage().contains("42"));
+        ret.get(0).getMessage().contains(bugEntryInMessage(BUG_ID_2)));
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testMandatoryMatchingMultipleOneNonExsting() throws IOException {
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(false);
-    when(itsFacade.exists("42")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(true);
 
     CommitValidationException thrown =
         assertThrows(CommitValidationException.class, () -> ivc.onCommitReceived(event));
     assertThat(thrown).hasMessageThat().contains("Non-existing");
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testSuggestedMatchingMultipleSomeNonExsting()
@@ -326,14 +336,15 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.SUGGESTED);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(false);
-    when(itsFacade.exists("42")).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(false);
 
     ret = ivc.onCommitReceived(event);
 
@@ -343,37 +354,38 @@
         ret.get(0).getMessage().contains("Non-existing"));
     assertTrue(
         "First CommitValidationMessages does not contain '4711'",
-        ret.get(0).getMessage().contains("4711"));
+        ret.get(0).getMessage().contains(bugEntryInMessage(BUG_ID_1)));
     assertTrue(
         "First CommitValidationMessages does not contain '42'",
-        ret.get(0).getMessage().contains("42"));
+        ret.get(0).getMessage().contains(bugEntryInMessage(BUG_ID_2)));
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testMandatoryMatchingMultipleSomeNonExsting() throws IOException {
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    when(itsFacade.exists("4711")).thenReturn(false);
-    when(itsFacade.exists("42")).thenReturn(true);
+    when(itsFacade.exists(BUG_ID_1)).thenReturn(false);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(true);
 
     CommitValidationException thrown =
         assertThrows(CommitValidationException.class, () -> ivc.onCommitReceived(event));
     assertThat(thrown).hasMessageThat().contains("Non-existing");
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testSuggestedMatchingMultipleIOExceptionIsNonExsting()
@@ -381,14 +393,15 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.SUGGESTED);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists("4711");
-    when(itsFacade.exists("42")).thenReturn(false);
+    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists(BUG_ID_1);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(false);
 
     ret = ivc.onCommitReceived(event);
 
@@ -398,27 +411,27 @@
         ret.get(0).getMessage().contains("Failed to check"));
     assertTrue(
         "First CommitValidationMessages does not contain '4711'",
-        ret.get(0).getMessage().contains("4711"));
+        ret.get(0).getMessage().contains(BUG_ID_1));
     assertTrue(
         "First CommitValidationMessages contains reason of failure",
         ret.get(0).getMessage().contains("InjectedEx1"));
     assertFalse(
         "First CommitValidationMessages contains '42', although " + "that bug exists",
-        ret.get(0).getMessage().contains("42"));
+        ret.get(0).getMessage().contains(BUG_ID_2));
     assertTrue(
         "Second CommitValidationMessages does not contain " + "'Non-existing'",
         ret.get(1).getMessage().contains("Non-existing"));
 
     assertTrue(
         "Second CommitValidationMessages does not contain '42'",
-        ret.get(1).getMessage().contains("42"));
+        ret.get(1).getMessage().contains(bugEntryInMessage(BUG_ID_2)));
 
-    assertLogMessageContains("4711");
+    assertLogMessageContains(BUG_ID_1);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testMandatoryMatchingSingleIOException()
@@ -426,13 +439,13 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711");
+    RevCommit commit = createCommit(SINGLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711")).thenReturn(new String[] {"4711"});
+    when(issueExtractor.getIssueIds(SINGLE_BUG_MESSAGE)).thenReturn(new String[] {BUG_ID_1});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists("4711");
+    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists(BUG_ID_1);
 
     ret = ivc.onCommitReceived(event);
 
@@ -442,44 +455,45 @@
         ret.get(0).getMessage().contains("Failed to check"));
     assertTrue(
         "First CommitValidationMessages does not contain '4711'",
-        ret.get(0).getMessage().contains("4711"));
+        ret.get(0).getMessage().contains(BUG_ID_1));
     assertTrue(
         "First CommitValidationMessages contains reason of failure",
         ret.get(0).getMessage().contains("InjectedEx1"));
 
-    assertLogMessageContains("4711");
+    assertLogMessageContains(BUG_ID_1);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711");
-    verifyOneOrMore(itsFacade).exists("4711");
+    verifyOneOrMore(issueExtractor).getIssueIds(SINGLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
   }
 
   public void testMandatoryMatchingMultipleIOExceptionIsNonExisting() throws IOException {
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists("4711");
-    when(itsFacade.exists("42")).thenReturn(false);
+    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists(BUG_ID_1);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(false);
 
     try {
       ivc.onCommitReceived(event);
       fail("onCommitReceived did not throw any exception");
     } catch (CommitValidationException e) {
-      assertLogMessageContains("Failed to check whether or not issue 4711 exists");
+      assertLogMessageContains("Failed to check whether or not issue " + BUG_ID_1 + " exists");
       assertTrue(
           "Message of thrown CommitValidationException does not " + "contain 'Non-existing'",
           e.getMessage().contains("Non-existing"));
     }
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void testMandatoryMatchingMultipleIOExceptionExisting()
@@ -487,14 +501,15 @@
     List<CommitValidationMessage> ret;
     ItsValidateComment ivc = injector.getInstance(ItsValidateComment.class);
     ReceiveCommand command = mock(ReceiveCommand.class);
-    RevCommit commit = createCommit("bug#4711, bug#42");
+    RevCommit commit = createCommit(MULTIPLE_BUG_MESSAGE);
     CommitReceivedEvent event = newCommitReceivedEvent(command, project, null, commit, null);
 
     when(itsConfig.getItsAssociationPolicy()).thenReturn(ItsAssociationPolicy.MANDATORY);
-    when(issueExtractor.getIssueIds("bug#4711, bug#42")).thenReturn(new String[] {"4711", "42"});
+    when(issueExtractor.getIssueIds(MULTIPLE_BUG_MESSAGE))
+        .thenReturn(new String[] {BUG_ID_1, BUG_ID_2});
     when(itsFacadeFactory.getFacade(projectName)).thenReturn(itsFacade);
-    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists("4711");
-    when(itsFacade.exists("42")).thenReturn(true);
+    doThrow(new IOException("InjectedEx1")).when(itsFacade).exists(BUG_ID_1);
+    when(itsFacade.exists(BUG_ID_2)).thenReturn(true);
 
     ret = ivc.onCommitReceived(event);
 
@@ -504,17 +519,17 @@
         ret.get(0).getMessage().contains("Failed to check"));
     assertTrue(
         "First CommitValidationMessages does not contain '4711'",
-        ret.get(0).getMessage().contains("4711"));
+        ret.get(0).getMessage().contains(BUG_ID_1));
     assertTrue(
         "First CommitValidationMessages contains reason of failure",
         ret.get(0).getMessage().contains("InjectedEx1"));
 
-    assertLogMessageContains("4711");
+    assertLogMessageContains(BUG_ID_1);
 
     verifyOneOrMore(itsConfig).getItsAssociationPolicy();
-    verifyOneOrMore(issueExtractor).getIssueIds("bug#4711, bug#42");
-    verifyOneOrMore(itsFacade).exists("4711");
-    verifyOneOrMore(itsFacade).exists("42");
+    verifyOneOrMore(issueExtractor).getIssueIds(MULTIPLE_BUG_MESSAGE);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_1);
+    verifyOneOrMore(itsFacade).exists(BUG_ID_2);
   }
 
   public void assertEmptyList(List<CommitValidationMessage> list) {
@@ -581,6 +596,10 @@
     return RevCommit.parse(commitData.getBytes());
   }
 
+  private String bugEntryInMessage(String bugId) {
+    return "* " + bugId;
+  }
+
   private <T> T verifyOneOrMore(T mock) {
     return verify(mock, atLeastOnce());
   }