minor fixes
[civicrm-core.git] / tests / phpunit / api / v3 / ContributionTest.php
index 9e36a6210dadb8e5d869f2ccad96ae6965b21758..64214fe1a6fd3502fdc7b69943742a4a2433ce7c 100644 (file)
@@ -1899,7 +1899,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
       'financial_account_id' => $financialAccountId,
     );
     CRM_Financial_BAO_FinancialTypeAccount::add($financialAccountParams);
-    $taxRates = CRM_Core_PseudoConstant::getTaxRates();
+
     $params = array_merge($this->_params, array('contribution_status_id' => 2, 'financial_type_id' => $financialTypeId));
     $contribution = $this->callAPISuccess('contribution', 'create', $params);
     $contribution1 = $this->callAPISuccess('contribution', 'get', array('id' => $contribution['id'], 'return' => 'tax_amount', 'sequential' => 1));
@@ -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'],