Fix/test/simplify soy template for combined check state updated text emails

- A space between 'patch set' and the patch set number was missing.
- The change URL in parenthesis appeared outside of a sentence.
- Remove unused coverLetter parameter.

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I989fa991bc4eb4656660a3a592bf6e447658e414
diff --git a/javatests/com/google/gerrit/plugins/checks/acceptance/api/ChecksEmailIT.java b/javatests/com/google/gerrit/plugins/checks/acceptance/api/ChecksEmailIT.java
index 0851564..8967d2f 100644
--- a/javatests/com/google/gerrit/plugins/checks/acceptance/api/ChecksEmailIT.java
+++ b/javatests/com/google/gerrit/plugins/checks/acceptance/api/ChecksEmailIT.java
@@ -22,11 +22,13 @@
 import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.TestAccount;
 import com.google.gerrit.acceptance.testsuite.group.GroupOperations;
 import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
 import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
 import com.google.gerrit.entities.AccountGroup;
+import com.google.gerrit.entities.Change;
 import com.google.gerrit.entities.PatchSet;
 import com.google.gerrit.extensions.api.changes.NotifyHandling;
 import com.google.gerrit.extensions.api.changes.NotifyInfo;
@@ -58,9 +60,11 @@
 
   private TestAccount bot;
   private TestAccount owner;
+  private TestAccount ignoringReviewer;
   private TestAccount reviewer;
   private TestAccount starrer;
   private TestAccount watcher;
+  private Change change;
   private PatchSet.Id patchSetId;
 
   @Before
@@ -78,7 +82,9 @@
 
     // Create a change.
     owner = admin;
-    patchSetId = createChange().getPatchSetId();
+    PushOneCommit.Result result = createChange();
+    change = result.getChange().change();
+    patchSetId = result.getPatchSetId();
 
     // Add a reviewer.
     reviewer = accountCreator.create("reviewer", "reviewer@test.com", "Reviewer");
@@ -110,10 +116,10 @@
     gApi.accounts().self().setWatchedProjects(ImmutableList.of(projectWatchInfo));
 
     // Add a reviewer that ignores the change --> user doesn't get notified by checks plugin.
-    TestAccount ignorer = accountCreator.create("ignorer", "ignorer@test.com", "Ignorer");
+    ignoringReviewer = accountCreator.create("ignorer", "ignorer@test.com", "Ignorer");
     requestScopeOperations.setApiUser(admin.id());
-    gApi.changes().id(patchSetId.changeId().get()).addReviewer(ignorer.username());
-    requestScopeOperations.setApiUser(ignorer.id());
+    gApi.changes().id(patchSetId.changeId().get()).addReviewer(ignoringReviewer.username());
+    requestScopeOperations.setApiUser(ignoringReviewer.id());
     gApi.changes().id(patchSetId.changeId().get()).ignore(true);
 
     // Reset request scope to admin.
@@ -539,6 +545,83 @@
     }
   }
 
+  @Test
+  public void textEmailForCombinedCheckStateUpdated() throws Exception {
+    CheckerUuid checkerUuid =
+        checkerOperations.newChecker().repository(project).required().create();
+    assertThat(getCombinedCheckState()).isEqualTo(CombinedCheckState.IN_PROGRESS);
+
+    sender.clear();
+    postCheck(checkerUuid, CheckState.FAILED);
+    assertThat(getCombinedCheckState()).isEqualTo(CombinedCheckState.FAILED);
+
+    List<Message> messages = sender.getMessages();
+    assertThat(messages).hasSize(1);
+
+    Message message = messages.get(0);
+    assertThat(message.body())
+        .isEqualTo(
+            "The combined check state has been updated to "
+                + CombinedCheckState.FAILED
+                + " for patch set "
+                + patchSetId.get()
+                + " of this change ( "
+                + changeUrl(change)
+                + " ).\n"
+                + emailFooterForCombinedCheckStateUpdate());
+  }
+
+  private String emailFooterForCombinedCheckStateUpdate() {
+    return "\n"
+        + "Change subject: "
+        + change.getSubject()
+        + "\n"
+        + "......................................................................\n"
+        + "-- \n"
+        + "To view, visit "
+        + changeUrl(change)
+        + "\n"
+        + "To unsubscribe, or for help writing mail filters, visit "
+        + canonicalWebUrl.get()
+        + "settings\n"
+        + "\n"
+        + "Gerrit-Project: "
+        + project.get()
+        + "\n"
+        + "Gerrit-Branch: "
+        + change.getDest().shortName()
+        + "\n"
+        + "Gerrit-Change-Id: "
+        + change.getKey().get()
+        + "\n"
+        + "Gerrit-Change-Number: "
+        + change.getChangeId()
+        + "\n"
+        + "Gerrit-PatchSet: "
+        + patchSetId.get()
+        + "\n"
+        + "Gerrit-Owner: "
+        + owner.fullName()
+        + " <"
+        + owner.email()
+        + ">\n"
+        + "Gerrit-Reviewer: "
+        + ignoringReviewer.fullName()
+        + " <"
+        + ignoringReviewer.email()
+        + ">\n"
+        + "Gerrit-Reviewer: "
+        + reviewer.fullName()
+        + " <"
+        + reviewer.email()
+        + ">\n"
+        + "Gerrit-MessageType: combinedCheckStateUpdate\n";
+  }
+
+  private String changeUrl(Change change) {
+    return canonicalWebUrl.get() + "c/" + change.getProject().get() + "/+/" + change.getChangeId();
+  }
+
   private CombinedCheckState getCombinedCheckState() throws RestApiException {
     ChangeInfo changeInfo =
         gApi.changes()
@@ -550,4 +633,12 @@
     assertThat(infos.get(0)).isInstanceOf(ChangeCheckInfo.class);
     return ((ChangeCheckInfo) infos.get(0)).combinedState;
   }
+
+  private void postCheck(CheckerUuid checkerUuid, CheckState checkState) throws RestApiException {
+    requestScopeOperations.setApiUser(bot.id());
+    CheckInput input = new CheckInput();
+    input.checkerUuid = checkerUuid.get();
+    input.state = checkState;
+    checksApiFactory.revision(patchSetId).create(input).get();
+  }
 }
diff --git a/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy b/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy
index 83d67b1..8666da6 100644
--- a/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy
+++ b/resources/com/google/gerrit/plugins/checks/email/CombinedCheckStateUpdated.soy
@@ -21,21 +21,15 @@
  * change for which the combined check state was updated.
  */
 {template .CombinedCheckStateUpdated kind="text"}
-  {@param change: ?}
-  {@param combinedCheckState: ?}
-  {@param coverLetter: ?}
   {@param email: ?}
+  {@param change: ?}
   {@param patchSet: ?}
-  The combined check state has been updated to {$combinedCheckState} for patch set
-  {$patchSet.patchSetId} of this change.
-  {if $email.changeUrl} ( {$email.changeUrl} ){/if}{\n}
+  {@param combinedCheckState: ?}
+  The combined check state has been updated to {$combinedCheckState} for patch set{sp}
+  {$patchSet.patchSetId} of this change
+  {if $email.changeUrl} ( {$email.changeUrl} ){/if}
+  .{\n}
   {\n}
   Change subject: {$change.subject}{\n}
   ......................................................................{\n}
-  {if $coverLetter}
-    {\n}
-    {\n}
-    {$coverLetter}
-    {\n}
-  {/if}
 {/template}