Skip to content

Commit

Permalink
Add validate api action for ContributionPage.submit
Browse files Browse the repository at this point in the history
  • Loading branch information
eileenmcnaughton committed Sep 17, 2018
1 parent c344b98 commit 26a6214
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 9 deletions.
4 changes: 2 additions & 2 deletions CRM/Contribute/Form/Contribution/Main.php
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,7 @@ public static function buildRecur(&$form) {
* The input form values.
* @param array $files
* The uploaded files if any.
* @param CRM_Core_Form $self
* @param \CRM_Contribute_Form_Contribution_Main $self
*
* @return bool|array
* true if no errors, else array of errors
Expand Down Expand Up @@ -951,7 +951,7 @@ public static function formRule($fields, $files, $self) {
return $errors;
}

if (CRM_Utils_Array::value('payment_processor_id', $fields) == NULL) {
if (CRM_Utils_Array::value('payment_processor_id', $fields) === NULL) {
$errors['payment_processor_id'] = ts('Payment Method is a required field.');
}
else {
Expand Down
20 changes: 20 additions & 0 deletions api/v3/ContributionPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,26 @@ function civicrm_api3_contribution_page_submit($params) {
return civicrm_api3_create_success($result, $params, 'ContributionPage', 'submit');
}

/**
* Validate ContributionPage submission parameters.
*
* @param array $params
* Array per getfields metadata.
*
* @return array
* API result array
*/
function civicrm_api3_contribution_page_validate($params) {
$form = new CRM_Contribute_Form_Contribution_Main();
$form->controller = new CRM_Core_Controller();
$form->set('id', $params['id']);
$form->preProcess();
$errors = CRM_Contribute_Form_Contribution_Main::formRule($params, [], $form);
if ($errors === TRUE) {
$errors = [];
}
return civicrm_api3_create_success($errors, $params, 'ContributionPage', 'validate');
}

/**
* Set default getlist parameters.
Expand Down
41 changes: 34 additions & 7 deletions tests/phpunit/api/v3/ContributionPageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,7 @@ public function testGetFieldsContributionPage() {
*/
public function testSubmit() {
$this->setUpContributionPage();
$priceFieldID = reset($this->_ids['price_field']);
$priceFieldValueID = reset($this->_ids['price_field_value']);
$submitParams = array(
'price_' . $priceFieldID => $priceFieldValueID,
'id' => (int) $this->_ids['contribution_page'],
'amount' => 10,
);
$submitParams = $this->getBasicSubmitParams();

$this->callAPISuccess('contribution_page', 'submit', $submitParams);
$contribution = $this->callAPISuccess('contribution', 'getsingle', array('contribution_page_id' => $this->_ids['contribution_page']));
Expand Down Expand Up @@ -1887,6 +1881,21 @@ public function testSubmitContributionPageWithPriceSetQuantity($thousandSeparato
$this->assertEquals($lineItem_TaxAmount, round(180 * 16.95 * 0.10, 2), 'Wrong Sales Tax Amount is calculated and stored.');
}


/**
* Test validating a contribution page submit.
*/
public function testValidate() {
$this->setUpContributionPage();
$errors = $this->callAPISuccess('ContributionPage', 'validate', array_merge($this->getBasicSubmitParams(), ['action' => 'submit']))['values'];
$this->assertEmpty($errors);
}

/**
* Implements hook_civicrm_alterPaymentProcessorParams().
*
* @throws \Exception
*/
public function hook_civicrm_alterPaymentProcessorParams($paymentObj, &$rawParams, &$cookedParams) {
// Ensure total_amount are the same if they're both given.
$total_amount = CRM_Utils_Array::value('total_amount', $rawParams);
Expand All @@ -1907,4 +1916,22 @@ public function hook_civicrm_alterPaymentProcessorParams($paymentObj, &$rawParam
$log->debug($message, $_REQUEST);
}

/**
* Get the params for a basic simple submit.
*
* @return array
*/
protected function getBasicSubmitParams() {
$priceFieldID = reset($this->_ids['price_field']);
$priceFieldValueID = reset($this->_ids['price_field_value']);
$submitParams = [
'price_' . $priceFieldID => $priceFieldValueID,
'id' => (int) $this->_ids['contribution_page'],
'amount' => 10,
'priceSetId' => $this->_ids['price_set'][0],
'payment_processor_id' => 0,
];
return $submitParams;
}

}

0 comments on commit 26a6214

Please sign in to comment.