From 3d3449ce266ead91b43ece3b337d8c8a38bbad75 Mon Sep 17 00:00:00 2001 From: eileen Date: Mon, 8 Apr 2019 15:25:46 +1200 Subject: [PATCH] Add unit testing for activity creation when cancelling a recurring, related cleanup --- CRM/Contribute/BAO/ContributionRecur.php | 23 +++++++++---------- CRM/Contribute/Form/CancelSubscription.php | 9 +------- .../phpunit/api/v3/ContributionRecurTest.php | 8 ++++++- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/CRM/Contribute/BAO/ContributionRecur.php b/CRM/Contribute/BAO/ContributionRecur.php index 559496f02f..649b361b49 100644 --- a/CRM/Contribute/BAO/ContributionRecur.php +++ b/CRM/Contribute/BAO/ContributionRecur.php @@ -261,11 +261,9 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi * @param array $params * Recur contribution params * - * @param array $activityParams - * * @return bool */ - public static function cancelRecurContribution($params, $activityParams = []) { + public static function cancelRecurContribution($params) { 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]; @@ -274,6 +272,10 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi if (!$recurId) { return FALSE; } + $activityParams = [ + 'subject' => !empty($params['membership_id']) ? ts('Auto-renewal membership cancelled') : ts('Recurring contribution cancelled'), + 'details' => CRM_Utils_Array::value('processor_message', $params), + ]; $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name'); $canceledId = array_search('Cancelled', $contributionStatus); @@ -303,8 +305,7 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi
' . ts('Automatic renewal of %1 membership cancelled.', [1 => $membershipType]); } else { - $details .= ' -
' . ts('The recurring contribution of %1, every %2 %3 has been cancelled.', [ + $details .= '
' . ts('The recurring contribution of %1, every %2 %3 has been cancelled.', [ 1 => $dao->amount, 2 => $dao->frequency_interval, 3 => $dao->frequency_unit, @@ -313,20 +314,18 @@ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_Contributi $activityParams = [ 'source_contact_id' => $dao->contact_id, 'source_record_id' => $dao->recur_id, - 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Cancel Recurring Contribution'), + 'activity_type_id' => 'Cancel Recurring Contribution', 'subject' => CRM_Utils_Array::value('subject', $activityParams, ts('Recurring contribution cancelled')), 'details' => $details, - 'activity_date_time' => date('YmdHis'), - 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'), + 'status_id' => 'Completed', ]; - $session = CRM_Core_Session::singleton(); - $cid = $session->get('userID'); + + $cid = CRM_Core_Session::singleton()->get('userID'); if ($cid) { $activityParams['target_contact_id'][] = $activityParams['source_contact_id']; $activityParams['source_contact_id'] = $cid; } - // @todo use the api & do less wrangling above - CRM_Activity_BAO_Activity::create($activityParams); + civicrm_api3('Activity', 'create', $activityParams); } $transaction->commit(); diff --git a/CRM/Contribute/Form/CancelSubscription.php b/CRM/Contribute/Form/CancelSubscription.php index dfd921041b..2289628909 100644 --- a/CRM/Contribute/Form/CancelSubscription.php +++ b/CRM/Contribute/Form/CancelSubscription.php @@ -207,15 +207,8 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib CRM_Core_Error::displaySessionError($cancelSubscription); } elseif ($cancelSubscription) { - $activityParams - = [ - 'subject' => $this->_mid ? ts('Auto-renewal membership cancelled') : ts('Recurring contribution cancelled'), - 'details' => $message, - ]; $cancelStatus = CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution( - ['id' => $this->_subscriptionDetails->recur_id], - $activityParams - ); + ['id' => $this->_subscriptionDetails->recur_id, 'membership_id' => $this->_mid, 'processor_message' => $message]); if ($cancelStatus) { $tplParams = []; diff --git a/tests/phpunit/api/v3/ContributionRecurTest.php b/tests/phpunit/api/v3/ContributionRecurTest.php index 93e15db7bc..7903e0f40d 100644 --- a/tests/phpunit/api/v3/ContributionRecurTest.php +++ b/tests/phpunit/api/v3/ContributionRecurTest.php @@ -105,11 +105,17 @@ class api_v3_ContributionRecurTest extends CiviUnitTestCase { */ public function testContributionRecurCancel() { $result = $this->callAPISuccess($this->_entity, 'create', $this->params); - $this->callAPISuccess('ContributionRecur', 'cancel', ['id' => $result['id'], 'cancel_reason' => 'just cos']); + $this->callAPISuccess('ContributionRecur', 'cancel', ['id' => $result['id'], 'cancel_reason' => 'just cos', 'processor_message' => 'big fail']); $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']))); + $activity = $this->callAPISuccessGetSingle('Activity', ['activity_type_id' => 'Cancel Recurring Contribution', 'record_type_id' => $result['id']]); + $this->assertEquals('Recurring contribution cancelled', $activity['subject']); + $this->assertEquals('big fail
The recurring contribution of 500.00, every 1 day has been cancelled.', $activity['details']); + $this->assertEquals(date('Y-m-d'), date('Y-m-d', strtotime($activity['activity_date_time']))); + $this->assertEquals($this->params['contact_id'], $activity['source_contact_id']); + $this->assertEquals(CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'status_id', 'Completed'), $activity['status_id']); } } -- 2.25.1