From be26f3e094c7bcd096f330b786e6e102174d5192 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Wed, 4 Jun 2014 10:59:40 +1200 Subject: [PATCH] CRM-14778 add preliminary unit test on postProcess function --- CRM/Contribute/Form/Contribution/Confirm.php | 40 ++++++++++++++++++ api/v3/ContributionPage.php | 19 +++++++++ tests/phpunit/api/v3/ContributionPageTest.php | 41 +++++++++++++++++++ 3 files changed, 100 insertions(+) diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index 1213979019..88d951705b 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -1818,4 +1818,44 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } } + + /** + * Static submit function allowing tests (& api access although this is being built slowly) + * @param $params + */ + static function submit($params) { + $form = new CRM_Contribute_Form_Contribution_Confirm(); + $form->_id = $params['id']; + //this way the mocked up controller ignores the session stuff + $_SERVER['REQUEST_METHOD'] = 'GET'; + $form->controller = new CRM_Contribute_Controller_Contribution(); + $params['invoiceID'] = md5(uniqid(rand(), TRUE)); + $paramsProcessedForForm = $form->_params = self::getFormParams($params['id'], $params); + + $priceSetID = $form->_params['priceSetId'] = $paramsProcessedForForm['price_set_id']; + $priceFields = CRM_Price_BAO_PriceSet::getSetDetail($priceSetID); + $form->setFormAmountFields($priceSetID); + $priceFields = $priceFields[$priceSetID]['fields']; + CRM_Price_BAO_PriceSet::processAmount($priceFields, $paramsProcessedForForm, $lineItems, 'civicrm_contribution'); + $form->_lineItem = array($priceSetID => $lineItems); + $form->postProcess(); + } + + /** + * Helper function for static submit function - set relevant params - help us to build up an array that we can pass in + * @param $id + * @param array $params + * + * @return array + * @throws CiviCRM_API3_Exception + */ + static function getFormParams($id, array $params) { + if(!isset($params['is_pay_later'])) { + $params['is_pay_later'] = civicrm_api3('contribution_page', 'getvalue', array('id' => $id, 'return' => 'is_pay_later')); + } + if(empty($params['price_set_id'])) { + $params['price_set_id'] = CRM_Price_BAO_PriceSet::getFor('civicrm_contribution_page', $params['id']); + } + return $params; + } } diff --git a/api/v3/ContributionPage.php b/api/v3/ContributionPage.php index bd11bdda31..360128ba95 100644 --- a/api/v3/ContributionPage.php +++ b/api/v3/ContributionPage.php @@ -92,3 +92,22 @@ function civicrm_api3_contribution_page_get($params) { function civicrm_api3_contribution_page_delete($params) { return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params); } + +/** + * delete an existing contribution_page + * + * This method is used to delete any existing contribution_page. id of the group + * to be deleted is required field in $params array + * + * @param array $params (reference) array containing id of the group + * to be deleted + * + * @return array (referance) returns flag true if successfull, error + * message otherwise + * {@getfields contribution_page_delete} + * @access public + */ +function civicrm_api3_contribution_page_submit($params) { + $result = CRM_Contribute_Form_Contribution_Confirm::submit($params); + return civicrm_api3_create_success($result, $params, 'contribution_page', 'submit'); +} diff --git a/tests/phpunit/api/v3/ContributionPageTest.php b/tests/phpunit/api/v3/ContributionPageTest.php index bf726abde7..ae5041d3ba 100644 --- a/tests/phpunit/api/v3/ContributionPageTest.php +++ b/tests/phpunit/api/v3/ContributionPageTest.php @@ -108,6 +108,47 @@ class api_v3_ContributionPageTest extends CiviUnitTestCase { $this->assertEquals(12, $result['values']['start_date']['type']); } + + public function testSubmit() { + $contributionPageResult = $this->callAPISuccess($this->_entity, 'create', $this->params); + $priceSetParams = array( + 'is_quick_config' => 1, + 'extends' => 'CiviContribute', + 'financial_type_id' => 'Donation', + 'title' => 'my Page' + ); + + $priceSet = $this->callAPISuccess('price_set', 'create', $priceSetParams); + CRM_Price_BAO_PriceSet::addTo('civicrm_contribution_page', $contributionPageResult['id'], $priceSet['id']); + $priceField = $this->callAPISuccess('price_field', 'create', array( + 'price_set_id' => $priceSet['id'], + 'label' => 'Goat Breed', + 'html_type' => 'Radio', + )); + $this->callAPISuccess('price_field_value', 'create', array( + 'price_set_id' => $priceSet['id'], + 'price_field_id' => $priceField['id'], + 'label' => 'Long Haired Goat', + 'amount' => 20, + ) + ); + $priceFieldValue2 = $this->callAPISuccess('price_field_value', 'create', array( + 'price_set_id' => $priceSet['id'], + 'price_field_id' => $priceField['id'], + 'label' => 'Shoe-eating Goat', + 'amount' => 10, + ) + ); + $submitParams = array( + 'price_' . $priceField['id'] => $priceFieldValue2['id'], + 'id' => (int) $contributionPageResult['id'], + 'amount' => 10 + ); + + $this->callAPISuccess('contribution_page', 'submit', $submitParams); + $this->callAPISuccess('contribution', 'getsingle', array('contribution_page_id' => $contributionPageResult['id'])); + } + public static function setUpBeforeClass() { // put stuff here that should happen before all tests in this unit } -- 2.25.1