Enhance pdf letter test for mememberships
authorEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 13 Sep 2021 04:13:01 +0000 (16:13 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 13 Sep 2021 05:49:01 +0000 (17:49 +1200)
tests/phpunit/CRM/Member/Form/Task/PDFLetterTest.php
tests/phpunit/CiviTest/CiviUnitTestCase.php

index 10d7ae9ff2222e8e42555080b60dc62c7bb3e059..2f734737806799b242a36d75aaef300137c97739 100644 (file)
@@ -28,9 +28,15 @@ class CRM_Member_Form_Task_PDFLetterTest extends CiviUnitTestCase {
    * Test token replacement for Print/Merge Task
    */
   public function testMembershipTokenReplacementInPDF(): void {
-    $membershipIds = $returnProperties = $categories = $expected = [];
+    $this->createLoggedInUser();
+    $expected = [];
     [$tokens, $htmlMessage] = self::getSampleHTML();
 
+    $searchFormValues = [
+      'radio_ts' => 'ts_sel',
+      'task' => CRM_Member_Task::PDF_LETTER,
+    ];
+
     $membershipDates = [
       date('Y-m-d'),
       date('Y-m-d', strtotime('-1 month')),
@@ -50,7 +56,7 @@ class CRM_Member_Form_Task_PDFLetterTest extends CiviUnitTestCase {
         'end_date' => date('Y-m-d', strtotime("{$date} +1 year")),
       ];
       $result = $this->callAPISuccess('membership', 'create', $params);
-      $membershipIds[] = $result['id'];
+      $searchFormValues['mark_x_' . $result['id']] = 1;
       $params = array_merge($params,
         [
           'fee' => '100.00',
@@ -70,23 +76,25 @@ class CRM_Member_Form_Task_PDFLetterTest extends CiviUnitTestCase {
         }
       }
     }
-    $messageToken = CRM_Utils_Token::getTokens($htmlMessage);
-    $form = new CRM_Member_Form_Task_PDFLetter();
-    $testHTML = $form->generateHTML($membershipIds,
-      $returnProperties,
-      NULL,
-      NULL,
-      $messageToken,
-      $htmlMessage,
-      $categories
-    );
+
+    $form = $this->getFormObject('CRM_Member_Form_Task_PDFLetter', [
+      'subject' => '{contact.first_name} {membership.source}',
+      'html_message' => $htmlMessage,
+    ], NULL, $searchFormValues);
+    $form->buildForm();
+    try {
+      $form->postProcess();
+    }
+    catch (CRM_Core_Exception_PrematureExitException $e) {
+      $testHTML = $e->errorData['html'];
+    }
 
     // Assert all membership tokens are replaced correctly.
     $expected = array_values($expected);
     foreach ($expected as $key => $dateVal) {
-      $this->assertStringContainsString('Anthony', $testHTML[$key]);
-      foreach ($tokens as $text => $token) {
-        $this->assertStringContainsString($dateVal[$token], $testHTML[$key]);
+      $this->assertStringContainsString('Anthony', $testHTML);
+      foreach ($tokens as $token) {
+        $this->assertStringContainsString($dateVal[$token], $testHTML);
       }
     }
   }
index f51b6ba85751b1f5009f54625fd42b6cab276d64..b1611dff8358c3b305fed424b339c82bbd0a1a60 100644 (file)
@@ -3335,9 +3335,19 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
    *
    * @param string $pageName
    *
+   * @param array $searchFormValues
+   *   Values for the search form if the form is a task eg.
+   *   for selected ids 6 & 8:
+   *   [
+   *      'radio_ts' => 'ts_sel',
+   *      'task' => CRM_Member_Task::PDF_LETTER,
+   *      'mark_x_6' => 1,
+   *      'mark_x_8' => 1,
+   *   ]
+   *
    * @return \CRM_Core_Form
    */
-  public function getFormObject($class, $formValues = [], $pageName = '') {
+  public function getFormObject($class, $formValues = [], $pageName = '', $searchFormValues = []) {
     $_POST = $formValues;
     /* @var CRM_Core_Form $form */
     $form = new $class();
@@ -3356,6 +3366,9 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
     }
     $form->controller->setStateMachine(new CRM_Core_StateMachine($form->controller));
     $_SESSION['_' . $form->controller->_name . '_container']['values'][$pageName] = $formValues;
+    if ($searchFormValues) {
+      $_SESSION['_' . $form->controller->_name . '_container']['values']['Search'] = $searchFormValues;
+    }
     return $form;
   }