X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fapi%2Fv3%2FContributionTest.php;h=64214fe1a6fd3502fdc7b69943742a4a2433ce7c;hb=66a1e31f279137676e395ce60eda2cc14bcde5f1;hp=fe48f7e369289eb581895e7d2294b3e2ff6444ac;hpb=d969ad8dd9a317fba77e0fb6d7b8bfd038b38343;p=civicrm-core.git diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index fe48f7e369..64214fe1a6 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -2571,12 +2571,18 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * Test completing first transaction in a recurring series. * * The status should be set to 'in progress' and the next scheduled payment date calculated. + * + * @dataProvider getScheduledDateData + * + * @param array $dataSet + * + * @throws \Exception */ - public function testCompleteTransactionSetStatusToInProgress() { + public function testCompleteTransactionSetStatusToInProgress($dataSet) { $paymentProcessorID = $this->paymentProcessorCreate(); - $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array( + $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array_merge(array( 'contact_id' => $this->_individualId, - 'installments' => '12', + 'installments' => '2', 'frequency_interval' => '1', 'amount' => '500', 'contribution_status_id' => 'Pending', @@ -2584,21 +2590,74 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'currency' => 'USD', 'frequency_unit' => 'month', 'payment_processor_id' => $paymentProcessorID, - )); + ), $dataSet['data'])); $contribution = $this->callAPISuccess('contribution', 'create', array_merge( $this->_params, array( 'contribution_recur_id' => $contributionRecur['id'], 'contribution_status_id' => 'Pending', + 'receive_date' => $dataSet['receive_date'], )) ); - $this->callAPISuccess('Contribution', 'completetransaction', array('id' => $contribution)); + $this->callAPISuccess('Contribution', 'completetransaction', array( + 'id' => $contribution, + 'receive_date' => $dataSet['receive_date'], + )); $contributionRecur = $this->callAPISuccessGetSingle('ContributionRecur', array( 'id' => $contributionRecur['id'], 'return' => array('next_sched_contribution_date', 'contribution_status_id'), )); $this->assertEquals(5, $contributionRecur['contribution_status_id']); - $this->assertEquals(date('Y-m-d 00:00:00', strtotime('+1 month')), $contributionRecur['next_sched_contribution_date']); + $this->assertEquals($dataSet['expected'], $contributionRecur['next_sched_contribution_date']); + $this->callAPISuccess('Contribution', 'create', array_merge( + $this->_params, + array( + 'contribution_recur_id' => $contributionRecur['id'], + 'contribution_status_id' => 'Completed', + ) + )); + $contributionRecur = $this->callAPISuccessGetSingle('ContributionRecur', array( + 'id' => $contributionRecur['id'], + 'return' => array('contribution_status_id'), + )); + $this->assertEquals(1, $contributionRecur['contribution_status_id']); + } + + /** + * Get dates for testing. + * + * @return array + */ + public function getScheduledDateData() { + $result = array(); + $result[]['2016-08-31-1-month'] = array( + 'data' => array( + 'start_date' => '2016-08-31', + 'frequency_interval' => 1, + 'frequency_unit' => 'month', + ), + 'receive_date' => '2016-08-31', + 'expected' => '2016-10-01 00:00:00', + ); + $result[]['2012-01-01-1-month'] = array( + 'data' => array( + 'start_date' => '2012-01-01', + 'frequency_interval' => 1, + 'frequency_unit' => 'month', + ), + 'receive_date' => '2012-01-01', + 'expected' => '2012-02-01 00:00:00', + ); + $result[]['2012-01-01-1-month'] = array( + 'data' => array( + 'start_date' => '2012-01-01', + 'frequency_interval' => 1, + 'frequency_unit' => 'month', + ), + 'receive_date' => '2012-02-29', + 'expected' => '2012-03-29 00:00:00', + ); + return $result; } /** @@ -2680,7 +2739,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { )); $this->assertEquals(1, $logs['count']); $this->assertEquals($stateOfGrace, $membership['status_id']); - $contribution = $this->callAPISuccess('contribution', 'completetransaction', array('id' => $this->_ids['contribution'])); + $this->callAPISuccess('contribution', 'completetransaction', array('id' => $this->_ids['contribution'])); $membership = $this->callAPISuccess('membership', 'getsingle', array('id' => $this->_ids['membership'])); $this->assertEquals(date('Y-m-d', strtotime('yesterday + 1 year')), $membership['end_date']); $this->callAPISuccessGetSingle('LineItem', array( @@ -2690,12 +2749,6 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $logs = $this->callAPISuccess('MembershipLog', 'get', array( 'membership_id' => $this->_ids['membership'], )); - //CRM-19600: Ensure that 'Membership Renewal' activity is created after successful membership regsitration - $activity = $this->callAPISuccess('Activity', 'get', array( - 'activity_type_id' => 'Membership Renewal', - 'source_record_id' => $contribution['id'], - )); - $this->assertEquals(1, $activity['count']); $this->assertEquals(2, $logs['count']); $this->assertNotEquals($stateOfGrace, $logs['values'][2]['status_id']); $this->cleanUpAfterPriceSets(); @@ -2712,6 +2765,13 @@ class api_v3_ContributionTest extends CiviUnitTestCase { ); $this->setUpPendingContribution($this->_ids['price_field_value'][0]); $this->callAPISuccess('membership', 'getsingle', array('id' => $this->_ids['membership'])); + // Case 1: Assert that Membership Signup Activity is created on Pending to Completed Contribution via backoffice + $activity = $this->callAPISuccess('Activity', 'get', array( + 'activity_type_id' => 'Membership Signup', + 'source_record_id' => $this->_ids['membership'], + 'status_id' => 'Scheduled', + )); + $this->assertEquals(1, $activity['count']); // change pending contribution to completed $form = new CRM_Contribute_Form_Contribution(); @@ -2753,11 +2813,29 @@ class api_v3_ContributionTest extends CiviUnitTestCase { catch (Civi\Payment\Exception\PaymentProcessorException $e) { $error = TRUE; } + // Case 2: After successful payment for Pending backoffice there are three activities created + // 2.a Update status of existing Scheduled Membership Signup (created in step 1) to Completed + $activity = $this->callAPISuccess('Activity', 'get', array( + 'activity_type_id' => 'Membership Signup', + 'source_record_id' => $this->_ids['membership'], + 'status_id' => 'Completed', + )); + $this->assertEquals(1, $activity['count']); + // 2.b Contribution activity created to record successful payment $activity = $this->callAPISuccess('Activity', 'get', array( - 'activity_type_id' => 'Membership Renewal', + 'activity_type_id' => 'Contribution', 'source_record_id' => $this->_ids['contribution'], + 'status_id' => 'Completed', )); $this->assertEquals(1, $activity['count']); + // 2.c 'Change membership type' activity created to record Membership status change from Grace to Current + $activity = $this->callAPISuccess('Activity', 'get', array( + 'activity_type_id' => 'Change Membership Status', + 'source_record_id' => $this->_ids['membership'], + 'status_id' => 'Completed', + )); + $this->assertEquals(1, $activity['count']); + $this->assertEquals('Status changed from Grace to Current', $activity['values'][$activity['id']]['subject']); } /** @@ -2782,7 +2860,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * * @param int $priceFieldValueID */ - public function setUpPendingContribution($priceFieldValueID) { + public function setUpPendingContribution($priceFieldValueID, $contriParams = array()) { $contactID = $this->individualCreate(); $membership = $this->callAPISuccess('membership', 'create', array( 'contact_id' => $contactID, @@ -2791,7 +2869,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'end_date' => 'yesterday', 'join_date' => 'yesterday - 1 year', )); - $contribution = $this->callAPISuccess('contribution', 'create', array( + $contribution = $this->callAPISuccess('contribution', 'create', array_merge(array( 'domain_id' => 1, 'contact_id' => $contactID, 'receive_date' => date('Ymd'), @@ -2805,7 +2883,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_status_id' => 2, 'contribution_page_id' => $this->_ids['contribution_page'], 'api.membership_payment.create' => array('membership_id' => $membership['id']), - )); + ), $contriParams)); $this->callAPISuccess('line_item', 'create', array( 'entity_id' => $contribution['id'],