CRM-19213 fix payment_instrument_id on event & add first test (shell really)
[civicrm-core.git] / CRM / Event / Form / Registration / Confirm.php
index 28cfda5d4581f163bf9ba306b2782580d65afb7a..e08c82d13592667bbee37708559938829c636f97 100644 (file)
@@ -608,7 +608,7 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
           }
 
           //passing contribution id is already registered.
-          $contribution = self::processContribution($this, $value, $result, $contactID, $pending, $isAdditionalAmount);
+          $contribution = self::processContribution($this, $value, $result, $contactID, $pending, $isAdditionalAmount, $this->_paymentProcessor);
           $value['contributionID'] = $contribution->id;
           $value['contributionTypeID'] = $contribution->financial_type_id;
           $value['receive_date'] = $contribution->receive_date;
@@ -943,7 +943,8 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
    */
   public static function processContribution(
     &$form, $params, $result, $contactID,
-    $pending = FALSE, $isAdditionalAmount = FALSE
+    $pending = FALSE, $isAdditionalAmount = FALSE,
+    $paymentProcessor = NULL
   ) {
     $transaction = new CRM_Core_Transaction();
 
@@ -972,8 +973,8 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
       'campaign_id' => CRM_Utils_Array::value('campaign_id', $params),
     );
 
-    if (empty($params['is_pay_later'])) {
-      $contribParams['payment_instrument_id'] = 1;
+    if ($paymentProcessor) {
+      $contribParams['payment_instrument_id'] = $paymentProcessor['payment_instrument_id'];
     }
 
     if (!$pending && $result) {
@@ -1277,4 +1278,26 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
     }
   }
 
+  /**
+   * Submit in test mode.
+   *
+   * @param $params
+   */
+  public static function testSubmit($params) {
+    $form = new CRM_Event_Form_Registration_Confirm();
+    // This way the mocked up controller ignores the session stuff.
+    $_SERVER['REQUEST_METHOD'] = 'GET';
+    $_REQUEST['id'] = $form->_eventId = $params['id'];
+    $form->controller = new CRM_Event_Controller_Registration();
+    $form->_params = $params['params'];
+    $form->set('params', $params['params']);
+    $form->_values['custom_pre_id'] = array();
+    $form->_values['custom_post_id'] = array();
+    $form->_contributeMode = $params['contributeMode'];
+    $eventParams = array('id' => $params['id']);
+    CRM_Event_BAO_Event::retrieve($eventParams, $form->_values['event']);
+    $form->set('registerByID', $params['registerByID']);
+    $form->postProcess();
+  }
+
 }