From 9cfc631e6750cc743981f36152e894c03aa59f68 Mon Sep 17 00:00:00 2001 From: eileen Date: Mon, 8 Apr 2019 14:32:51 +1200 Subject: [PATCH] Add unit test for api ContributionRecur.cancel, add support for cancel_reason --- CRM/Contribute/BAO/ContributionRecur.php | 12 +++++++++--- CRM/Contribute/Form/CancelSubscription.php | 2 +- api/v3/ContributionRecur.php | 19 +++++++++++++++++-- .../Contribute/BAO/ContributionRecurTest.php | 2 +- .../phpunit/api/v3/ContributionRecurTest.php | 12 ++++++++++++ 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/CRM/Contribute/BAO/ContributionRecur.php b/CRM/Contribute/BAO/ContributionRecur.php index 27f41cfcb2..559496f02f 100644 --- a/CRM/Contribute/BAO/ContributionRecur.php +++ b/CRM/Contribute/BAO/ContributionRecur.php @@ -258,14 +258,19 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi /** * Cancel Recurring contribution. * - * @param int $recurId - * Recur contribution id. + * @param array $params + * Recur contribution params * * @param array $activityParams * * @return bool */ - public static function cancelRecurContribution($recurId, $activityParams = []) { + public static function cancelRecurContribution($params, $activityParams = []) { + if (is_int($params)) { + CRM_Core_Error::deprecatedFunctionWarning('You are using a BAO function whose signature has changed. Please use the ContributionRecur.cancel api'); + $params = ['id' => $params]; + } + $recurId = $params['id']; if (!$recurId) { return FALSE; } @@ -282,6 +287,7 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi $recur->start_date = CRM_Utils_Date::isoToMysql($recur->start_date); $recur->create_date = CRM_Utils_Date::isoToMysql($recur->create_date); $recur->modified_date = CRM_Utils_Date::isoToMysql($recur->modified_date); + $recur->cancel_reason = CRM_Utils_Array::value('cancel_reason', $params); $recur->cancel_date = date('YmdHis'); $recur->save(); diff --git a/CRM/Contribute/Form/CancelSubscription.php b/CRM/Contribute/Form/CancelSubscription.php index ce98fbb513..dfd921041b 100644 --- a/CRM/Contribute/Form/CancelSubscription.php +++ b/CRM/Contribute/Form/CancelSubscription.php @@ -213,7 +213,7 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib 'details' => $message, ]; $cancelStatus = CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution( - $this->_subscriptionDetails->recur_id, + ['id' => $this->_subscriptionDetails->recur_id], $activityParams ); diff --git a/api/v3/ContributionRecur.php b/api/v3/ContributionRecur.php index 2ccb955596..ae29b75fda 100644 --- a/api/v3/ContributionRecur.php +++ b/api/v3/ContributionRecur.php @@ -84,8 +84,23 @@ function civicrm_api3_contribution_recur_get($params) { * returns true is successfully cancelled */ function civicrm_api3_contribution_recur_cancel($params) { - civicrm_api3_verify_one_mandatory($params, NULL, ['id']); - return CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution($params['id']) ? civicrm_api3_create_success() : civicrm_api3_create_error(ts('Error while cancelling recurring contribution')); + return CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution($params) ? civicrm_api3_create_success() : civicrm_api3_create_error(ts('Error while cancelling recurring contribution')); +} + +/** + * Adjust Metadata for Cancel action. + * + * The metadata is used for setting defaults, documentation & validation. + * + * @param array $params + * Array of parameters determined by getfields. + */ +function _civicrm_api3_contribution_recur_cancel_spec(&$params) { + $params['id'] = [ + 'title' => ts('Contribution Recur ID'), + 'api.required' => TRUE, + 'type' => CRM_Utils_Type::T_INT, + ]; } /** diff --git a/tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php b/tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php index 2a755ba5fe..5d82d4c0b8 100644 --- a/tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php +++ b/tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php @@ -90,7 +90,7 @@ class CRM_Contribute_BAO_ContributionRecurTest extends CiviUnitTestCase { */ public function testCancelRecur() { $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', $this->_params); - CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution($contributionRecur['id']); + CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution(['id' => $contributionRecur['id']]); } /** diff --git a/tests/phpunit/api/v3/ContributionRecurTest.php b/tests/phpunit/api/v3/ContributionRecurTest.php index b4a382a5c9..93e15db7bc 100644 --- a/tests/phpunit/api/v3/ContributionRecurTest.php +++ b/tests/phpunit/api/v3/ContributionRecurTest.php @@ -100,4 +100,16 @@ class api_v3_ContributionRecurTest extends CiviUnitTestCase { $this->assertEquals(12, $result['values']['start_date']['type']); } + /** + * Test that we can cancel a contribution and add a cancel_reason via the api. + */ + public function testContributionRecurCancel() { + $result = $this->callAPISuccess($this->_entity, 'create', $this->params); + $this->callAPISuccess('ContributionRecur', 'cancel', ['id' => $result['id'], 'cancel_reason' => 'just cos']); + $cancelled = $this->callAPISuccess('ContributionRecur', 'getsingle', ['id' => $result['id']]); + $this->assertEquals('just cos', $cancelled['cancel_reason']); + $this->assertEquals(CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_ContributionRecur', 'contribution_status_id', 'Cancelled'), $cancelled['contribution_status_id']); + $this->assertEquals(date('Y-m-d'), date('Y-m-d', strtotime($cancelled['cancel_date']))); + } + } -- 2.25.1