Add unit test to event batch update (includes function extraction to support this)
authoreileen <emcnaughton@wikimedia.org>
Sun, 29 Apr 2018 05:47:07 +0000 (17:47 +1200)
committereileen <emcnaughton@wikimedia.org>
Sun, 29 Apr 2018 05:49:43 +0000 (17:49 +1200)
CRM/Event/Form/Task/Batch.php
tests/phpunit/CRM/Event/Form/Task/BatchTest.php [new file with mode: 0644]
tests/phpunit/CiviTest/CiviUnitTestCase.php

index 442977aa827526253b017a94ae99d6ac91ae0454..fe71dc15e0fe40d00686f9715528a6f02b1f0116 100644 (file)
  *
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2018
- * $Id$
- *
  */
 
 /**
- * This class provides the functionality for batch profile update for events
+ * This class provides the functionality for batch profile update for events.
  */
 class CRM_Event_Form_Task_Batch extends CRM_Event_Form_Task {
 
@@ -273,63 +271,7 @@ class CRM_Event_Form_Task_Batch extends CRM_Event_Form_Task {
    */
   public function postProcess() {
     $params = $this->exportValues();
-    $statusClasses = CRM_Event_PseudoConstant::participantStatusClass();
-    if (isset($params['field'])) {
-      foreach ($params['field'] as $key => $value) {
-
-        //check for custom data
-        $value['custom'] = CRM_Core_BAO_CustomField::postProcess($value,
-          $key,
-          'Participant'
-        );
-
-        $value['id'] = $key;
-
-        if (!empty($value['participant_role'])) {
-          if (is_array($value['participant_role'])) {
-            $value['role_id'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, array_keys($value['participant_role']));
-          }
-          else {
-            $value['role_id'] = $value['participant_role'];
-          }
-        }
-
-        //need to send mail when status change
-        $statusChange = FALSE;
-        $relatedStatusChange = FALSE;
-        if (!empty($value['participant_status'])) {
-          $value['status_id'] = $value['participant_status'];
-          $fromStatusId = CRM_Utils_Array::value($key, $this->_fromStatusIds);
-          if (!$fromStatusId) {
-            $fromStatusId = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Participant', $key, 'status_id');
-          }
-
-          if ($fromStatusId != $value['status_id']) {
-            $relatedStatusChange = TRUE;
-          }
-          if ($statusClasses[$fromStatusId] != $statusClasses[$value['status_id']]) {
-            $statusChange = TRUE;
-          }
-        }
-
-        unset($value['participant_status']);
-
-        civicrm_api3('Participant', 'create', $value);
-
-        //need to trigger mails when we change status
-        if ($statusChange) {
-          CRM_Event_BAO_Participant::transitionParticipants(array($key), $value['status_id'], $fromStatusId);
-        }
-        if ($relatedStatusChange) {
-          //update related contribution status, CRM-4395
-          self::updatePendingOnlineContribution($key, $value['status_id']);
-        }
-      }
-      CRM_Core_Session::setStatus(ts('The updates have been saved.'), ts('Saved'), 'success');
-    }
-    else {
-      CRM_Core_Session::setStatus(ts('No updates have been saved.'), ts('Not Saved'), 'alert');
-    }
+    $this->submit($params);
   }
 
   /**
@@ -519,4 +461,67 @@ class CRM_Event_Form_Task_Batch extends CRM_Event_Form_Task {
     }
   }
 
+  /**
+   * @param $params
+   */
+  public function submit($params) {
+    $statusClasses = CRM_Event_PseudoConstant::participantStatusClass();
+    if (isset($params['field'])) {
+      foreach ($params['field'] as $key => $value) {
+
+        //check for custom data
+        $value['custom'] = CRM_Core_BAO_CustomField::postProcess($value,
+          $key,
+          'Participant'
+        );
+
+        $value['id'] = $key;
+
+        if (!empty($value['participant_role'])) {
+          if (is_array($value['participant_role'])) {
+            $value['role_id'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, array_keys($value['participant_role']));
+          }
+          else {
+            $value['role_id'] = $value['participant_role'];
+          }
+        }
+
+        //need to send mail when status change
+        $statusChange = FALSE;
+        $relatedStatusChange = FALSE;
+        if (!empty($value['participant_status'])) {
+          $value['status_id'] = $value['participant_status'];
+          $fromStatusId = CRM_Utils_Array::value($key, $this->_fromStatusIds);
+          if (!$fromStatusId) {
+            $fromStatusId = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Participant', $key, 'status_id');
+          }
+
+          if ($fromStatusId != $value['status_id']) {
+            $relatedStatusChange = TRUE;
+          }
+          if ($statusClasses[$fromStatusId] != $statusClasses[$value['status_id']]) {
+            $statusChange = TRUE;
+          }
+        }
+
+        unset($value['participant_status']);
+
+        civicrm_api3('Participant', 'create', $value);
+
+        //need to trigger mails when we change status
+        if ($statusChange) {
+          CRM_Event_BAO_Participant::transitionParticipants(array($key), $value['status_id'], $fromStatusId);
+        }
+        if ($relatedStatusChange) {
+          //update related contribution status, CRM-4395
+          self::updatePendingOnlineContribution($key, $value['status_id']);
+        }
+      }
+      CRM_Core_Session::setStatus(ts('The updates have been saved.'), ts('Saved'), 'success');
+    }
+    else {
+      CRM_Core_Session::setStatus(ts('No updates have been saved.'), ts('Not Saved'), 'alert');
+    }
+  }
+
 }
diff --git a/tests/phpunit/CRM/Event/Form/Task/BatchTest.php b/tests/phpunit/CRM/Event/Form/Task/BatchTest.php
new file mode 100644 (file)
index 0000000..ad9b895
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ *  Test CRM_Event_Form_Registration functions.
+ *
+ * @package   CiviCRM
+ * @group headless
+ */
+class CRM_Event_Form_Task_BatchTest extends CiviUnitTestCase {
+
+  public function testSubmit() {
+    $participantID = $this->participantCreate();
+    $participant = $this->callAPISuccessGetSingle('Participant', ['id' => $participantID]);
+    $this->assertEquals(2, $participant['participant_status_id']);
+
+    $form = $this->getFormObject('CRM_Event_Form_Task_Batch');
+    $form->submit(['field' => [$participantID => ['participant_status_id' => 1]]]);
+
+    $participant = $this->callAPISuccessGetSingle('Participant', ['id' => $participantID]);
+    $this->assertEquals(1, $participant['participant_status_id']);
+  }
+}
index 2e95aca070cbe558a8b69cd1c038f002ce7494c6..3ace6bcf3c95b8595a27ea1d3c070e62a10fd826 100644 (file)
@@ -1090,7 +1090,7 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase {
    * @return int
    *   $id of participant created
    */
-  public function participantCreate($params) {
+  public function participantCreate($params = []) {
     if (empty($params['contact_id'])) {
       $params['contact_id'] = $this->individualCreate();
     }