CRM-21733: Adding the ability to override membership temporarily until specific date
[civicrm-core.git] / tests / phpunit / CRM / Member / BAO / MembershipTest.php
index a18d468b81557f24b39cd50859e026f0297d0688..1585b0260441020ec7af0a28be0d0cdf97b40f18 100644 (file)
@@ -617,4 +617,86 @@ class CRM_Member_BAO_MembershipTest extends CiviUnitTestCase {
     $this->contactDelete($contactId);
   }
 
+  public function testUpdateAllMembershipStatusConvertExpiredOverriddenStatusToNormal() {
+    $params = array(
+      'contact_id' => $this->individualCreate(),
+      'membership_type_id' => $this->_membershipTypeID,
+      'join_date' => date('Ymd', time()),
+      'start_date' => date('Ymd', time()),
+      'end_date' => date('Ymd', strtotime('+1 year')),
+      'source' => 'Payment',
+      'is_override' => 1,
+      'status_override_end_date' => date('Ymd', strtotime('-1 day')),
+      'status_id' => $this->_membershipStatusID,
+    );
+    $ids = array();
+    $createdMembership = CRM_Member_BAO_Membership::create($params, $ids);
+
+    CRM_Member_BAO_Membership::updateAllMembershipStatus();
+
+    $membershipAfterProcess = civicrm_api3('Membership', 'get', array(
+      'sequential' => 1,
+      'id' => $createdMembership->id,
+      'return' => array('id', 'is_override', 'status_override_end_date'),
+    ))['values'][0];
+
+    $this->assertEquals($createdMembership->id, $membershipAfterProcess['id']);
+    $this->assertArrayNotHasKey('is_override', $membershipAfterProcess);
+    $this->assertArrayNotHasKey('status_override_end_date', $membershipAfterProcess);
+  }
+
+  public function testUpdateAllMembershipStatusHandleOverriddenWithEndOverrideDateEqualTodayAsExpired() {
+    $params = array(
+      'contact_id' => $this->individualCreate(),
+      'membership_type_id' => $this->_membershipTypeID,
+      'join_date' => date('Ymd', time()),
+      'start_date' => date('Ymd', time()),
+      'end_date' => date('Ymd', strtotime('+1 year')),
+      'source' => 'Payment',
+      'is_override' => 1,
+      'status_override_end_date' => date('Ymd', time()),
+      'status_id' => $this->_membershipStatusID,
+    );
+    $ids = array();
+    $createdMembership = CRM_Member_BAO_Membership::create($params, $ids);
+
+    CRM_Member_BAO_Membership::updateAllMembershipStatus();
+
+    $membershipAfterProcess = civicrm_api3('Membership', 'get', array(
+      'sequential' => 1,
+      'id' => $createdMembership->id,
+      'return' => array('id', 'is_override', 'status_override_end_date'),
+    ))['values'][0];
+
+    $this->assertEquals($createdMembership->id, $membershipAfterProcess['id']);
+    $this->assertArrayNotHasKey('is_override', $membershipAfterProcess);
+    $this->assertArrayNotHasKey('status_override_end_date', $membershipAfterProcess);
+  }
+
+  public function testUpdateAllMembershipStatusDoesNotConvertOverridenMembershipWithoutEndOverrideDateToNormal() {
+    $params = array(
+      'contact_id' => $this->individualCreate(),
+      'membership_type_id' => $this->_membershipTypeID,
+      'join_date' => date('Ymd', time()),
+      'start_date' => date('Ymd', time()),
+      'end_date' => date('Ymd', strtotime('+1 year')),
+      'source' => 'Payment',
+      'is_override' => 1,
+      'status_id' => $this->_membershipStatusID,
+    );
+    $ids = array();
+    $createdMembership = CRM_Member_BAO_Membership::create($params, $ids);
+
+    CRM_Member_BAO_Membership::updateAllMembershipStatus();
+
+    $membershipAfterProcess = civicrm_api3('Membership', 'get', array(
+      'sequential' => 1,
+      'id' => $createdMembership->id,
+      'return' => array('id', 'is_override', 'status_override_end_date'),
+    ))['values'][0];
+
+    $this->assertEquals($createdMembership->id, $membershipAfterProcess['id']);
+    $this->assertEquals(1, $membershipAfterProcess['is_override']);
+  }
+
 }