Merge branch '4.7.21-rc' into master
[civicrm-core.git] / tests / phpunit / api / v3 / MembershipTest.php
index 47be4355b9a4f488fa8ddcecdef91a3508d39c07..3738afe9281499bdd973c19c719bf9e59bf98dde 100644 (file)
@@ -3,7 +3,7 @@
  +--------------------------------------------------------------------+
  | CiviCRM version 4.7                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2016                                |
+ | Copyright CiviCRM LLC (c) 2004-2017                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -93,6 +93,7 @@ class api_v3_MembershipTest extends CiviUnitTestCase {
         'civicrm_membership',
         'civicrm_membership_payment',
         'civicrm_membership_log',
+        'civicrm_uf_match',
       ),
       TRUE
     );
@@ -163,6 +164,47 @@ class api_v3_MembershipTest extends CiviUnitTestCase {
     $this->assertDBRowNotExist('CRM_Contribute_DAO_Contribution', $ContributionCreate['values'][0]['id']);
   }
 
+  /**
+   * Test Activity creation on cancellation of membership contribution.
+   */
+  public function testActivityForCancelledContribution() {
+    $contactId = $this->createLoggedInUser();
+    $membershipID = $this->contactMembershipCreate($this->_params);
+    $this->assertDBRowExist('CRM_Member_DAO_Membership', $membershipID);
+
+    $ContributionCreate = $this->callAPISuccess('Contribution', 'create', array(
+      'financial_type_id' => "Member Dues",
+      'total_amount' => 100,
+      'contact_id' => $this->_params['contact_id'],
+    ));
+    $membershipPaymentCreate = $this->callAPISuccess('MembershipPayment', 'create', array(
+      'sequential' => 1,
+      'contribution_id' => $ContributionCreate['id'],
+      'membership_id' => $membershipID,
+    ));
+    $instruments = $this->callAPISuccess('contribution', 'getoptions', array('field' => 'payment_instrument_id'));
+    $this->paymentInstruments = $instruments['values'];
+
+    $form = new CRM_Contribute_Form_Contribution();
+    $form->_id = $ContributionCreate['id'];
+    $form->testSubmit(array(
+      'total_amount' => 100,
+      'financial_type_id' => 1,
+      'receive_date' => '04/21/2015',
+      'receive_date_time' => '11:27PM',
+      'contact_id' => $contactId,
+      'payment_instrument_id' => array_search('Check', $this->paymentInstruments),
+      'contribution_status_id' => 3,
+    ),
+    CRM_Core_Action::UPDATE);
+
+    $activity = $this->callAPISuccess('Activity', 'get', array(
+      'activity_type_id' => "Change Membership Status",
+      'source_record_id' => $membershipID,
+    ));
+    $this->assertNotEmpty($activity['values']);
+  }
+
   /**
    * Test membership get.
    */
@@ -806,6 +848,19 @@ class api_v3_MembershipTest extends CiviUnitTestCase {
     );
 
     $result = $this->callAPISuccess('membership', 'create', $params);
+
+    //Update Status and check activities created.
+    $updateStatus = array(
+      'id' => $result['id'],
+      'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Member_BAO_Membership', 'status_id', 'Cancelled'),
+    );
+    $this->callAPISuccess('Membership', 'create', $updateStatus);
+    $activities = CRM_Activity_BAO_Activity::getContactActivity($this->_contactID);
+    $this->assertEquals(2, count($activities));
+    $activityNames = array_flip(CRM_Utils_Array::collect('activity_name', $activities));
+    $this->assertArrayHasKey('Membership Signup', $activityNames);
+    $this->assertArrayHasKey('Change Membership Status', $activityNames);
+
     $this->callAPISuccess('Membership', 'Delete', array(
       'id' => $result['id'],
     ));
@@ -1154,10 +1209,15 @@ class api_v3_MembershipTest extends CiviUnitTestCase {
     $joinDate = date('Y-m-d');
     $year = date('Y');
     $startDate = date('Y-m-d', strtotime(date('Y-03-01')));
+    $rollOver = TRUE;
+    if (strtotime($startDate) > time()) {
+      $rollOver = FALSE;
+      $startDate = date('Y-m-d', strtotime(date('Y-03-01') . '- 1 year'));
+    }
     $membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($this->_membershipTypeID2);
     $fixedPeriodRollover = CRM_Member_BAO_MembershipType::isDuringFixedAnnualRolloverPeriod($joinDate, $membershipTypeDetails, $year, $startDate);
     $y = 1;
-    if ($fixedPeriodRollover) {
+    if ($fixedPeriodRollover && $rollOver) {
       $y += 1;
     }