CRM-21733: Adding the ability to override membership temporarily until specific date
[civicrm-core.git] / tests / phpunit / CRM / Member / Import / Parser / MembershipTest.php
index b140789e98608179911f94b363c5ad84c2bc4c55..c39b1618d561651433fb27b3a39341612e39c12f 100644 (file)
  *   <http://www.gnu.org/licenses/>.
  */
 
-require_once 'CiviTest/CiviUnitTestCase.php';
-require_once 'CiviTest/Contact.php';
-require_once 'CiviTest/Membership.php';
-
 /**
  *  Test CRM/Member/BAO Membership Log add , delete functions
  *
  * @package   CiviCRM
+ * @group headless
  */
 class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
   /**
-   * Membership type name used in test function
+   * Membership type name used in test function.
    * @var String
    */
   protected $_membershipTypeName = NULL;
 
   /**
-   * Membership type id used in test function
+   * Membership type id used in test function.
    * @var String
    */
   protected $_membershipTypeID = NULL;
@@ -72,7 +69,7 @@ class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
       'visibility' => 'Public',
       'is_active' => 1,
       'fixed_period_start_day' => 101,
-      'fixed_period_rollover_day' => 1231
+      'fixed_period_rollover_day' => 1231,
     );
     $ids = array();
     $membershipType = CRM_Member_BAO_MembershipType::add($params, $ids);
@@ -86,10 +83,14 @@ class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
   /**
    * Tears down the fixture, for example, closes a network connection.
    * This method is called after a test is executed.
-   *
    */
   public function tearDown() {
-    $tablesToTruncate = array('civicrm_membership', 'civicrm_membership_log', 'civicrm_contribution', 'civicrm_membership_payment');
+    $tablesToTruncate = array(
+      'civicrm_membership',
+      'civicrm_membership_log',
+      'civicrm_contribution',
+      'civicrm_membership_payment',
+    );
     $this->quickCleanup($tablesToTruncate);
     $this->relationshipTypeDelete($this->_relationshipTypeId);
     $this->membershipTypeDelete(array('id' => $this->_membershipTypeID));
@@ -98,10 +99,10 @@ class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
   }
 
   /**
-   *  Test Import
+   *  Test Import.
    */
   public function testImport() {
-    $contactId = $this->individualCreate();
+    $this->individualCreate();
     $contact2Params = array(
       'first_name' => 'Anthonita',
       'middle_name' => 'J.',
@@ -111,14 +112,15 @@ class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
       'email' => 'b@c.com',
       'contact_type' => 'Individual',
     );
-    $contactId = $this->individualCreate($contact2Params);
+
+    $this->individualCreate($contact2Params);
     $year = date('Y') - 1;
     $startDate2 = date('Y-m-d', mktime(0, 0, 0, 9, 10, $year));
     $params = array(
       array(
         'anthony_anderson@civicrm.org',
-         $this->_membershipTypeID,
-         date('Y-m-d'),
+        $this->_membershipTypeID,
+        date('Y-m-d'),
       ),
       array(
         $contact2Params['email'],
@@ -131,19 +133,7 @@ class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
       'mapper[1][0]' => 'membership_type_id',
       'mapper[2][0]' => 'membership_start_date',
     );
-    /*
 
-    $params = array(
-      'contact_id' => $contactId,
-      'membership_type_id' => $this->_membershipTypeID,
-      'join_date' => '2006-01-21',
-      'start_date' => '2006-01-21',
-      'end_date' => '2006-12-21',
-      'source' => 'Payment',
-      'is_override' => 1,
-      'status_id' => $this->_mebershipStatusID,
-    );
-    */
     $importObject = new CRM_Member_Import_Parser_Membership($fieldMapper);
     $importObject->init();
     $importObject->_contactType = 'Individual';
@@ -153,4 +143,113 @@ class CRM_Member_Import_Parser_MembershipTest extends CiviUnitTestCase {
     $result = $this->callAPISuccess('membership', 'get', array());
     $this->assertEquals(2, $result['count']);
   }
+
+  public function testImportOverriddenMembershipButWithoutStatus() {
+    $this->individualCreate(array('email' => 'anthony_anderson2@civicrm.org'));
+
+    $fieldMapper = array(
+      'mapper[0][0]' => 'email',
+      'mapper[1][0]' => 'membership_type_id',
+      'mapper[2][0]' => 'membership_start_date',
+      'mapper[3][0]' => 'is_override',
+    );
+    $membershipImporter = new CRM_Member_Import_Parser_Membership($fieldMapper);
+    $membershipImporter->init();
+    $membershipImporter->_contactType = 'Individual';
+
+    $importValues = array(
+      'anthony_anderson2@civicrm.org',
+      $this->_membershipTypeID,
+      date('Y-m-d'),
+      TRUE,
+    );
+
+    $importResponse = $membershipImporter->import(CRM_Import_Parser::DUPLICATE_UPDATE, $importValues);
+    $this->assertEquals(CRM_Import_Parser::ERROR, $importResponse);
+    $this->assertContains('Required parameter missing: Status', $importValues);
+  }
+
+  public function testImportOverriddenMembershipWithStatus() {
+    $this->individualCreate(array('email' => 'anthony_anderson3@civicrm.org'));
+
+    $fieldMapper = array(
+      'mapper[0][0]' => 'email',
+      'mapper[1][0]' => 'membership_type_id',
+      'mapper[2][0]' => 'membership_start_date',
+      'mapper[3][0]' => 'is_override',
+      'mapper[4][0]' => 'status_id',
+    );
+    $membershipImporter = new CRM_Member_Import_Parser_Membership($fieldMapper);
+    $membershipImporter->init();
+    $membershipImporter->_contactType = 'Individual';
+
+    $importValues = array(
+      'anthony_anderson3@civicrm.org',
+      $this->_membershipTypeID,
+      date('Y-m-d'),
+      TRUE,
+      'New',
+    );
+
+    $importResponse = $membershipImporter->import(CRM_Import_Parser::DUPLICATE_UPDATE, $importValues);
+    $this->assertEquals(CRM_Import_Parser::VALID, $importResponse);
+  }
+
+  public function testImportOverriddenMembershipWithValidOverrideEndDate() {
+    $this->individualCreate(array('email' => 'anthony_anderson4@civicrm.org'));
+
+    $fieldMapper = array(
+      'mapper[0][0]' => 'email',
+      'mapper[1][0]' => 'membership_type_id',
+      'mapper[2][0]' => 'membership_start_date',
+      'mapper[3][0]' => 'is_override',
+      'mapper[4][0]' => 'status_id',
+      'mapper[5][0]' => 'status_override_end_date',
+    );
+    $membershipImporter = new CRM_Member_Import_Parser_Membership($fieldMapper);
+    $membershipImporter->init();
+    $membershipImporter->_contactType = 'Individual';
+
+    $importValues = array(
+      'anthony_anderson4@civicrm.org',
+      $this->_membershipTypeID,
+      date('Y-m-d'),
+      TRUE,
+      'New',
+      date('Y-m-d'),
+    );
+
+    $importResponse = $membershipImporter->import(CRM_Import_Parser::DUPLICATE_UPDATE, $importValues);
+    $this->assertEquals(CRM_Import_Parser::VALID, $importResponse);
+  }
+
+  public function testImportOverriddenMembershipWithInvalidOverrideEndDate() {
+    $this->individualCreate(array('email' => 'anthony_anderson5@civicrm.org'));
+
+    $fieldMapper = array(
+      'mapper[0][0]' => 'email',
+      'mapper[1][0]' => 'membership_type_id',
+      'mapper[2][0]' => 'membership_start_date',
+      'mapper[3][0]' => 'is_override',
+      'mapper[4][0]' => 'status_id',
+      'mapper[5][0]' => 'status_override_end_date',
+    );
+    $membershipImporter = new CRM_Member_Import_Parser_Membership($fieldMapper);
+    $membershipImporter->init();
+    $membershipImporter->_contactType = 'Individual';
+
+    $importValues = array(
+      'anthony_anderson5@civicrm.org',
+      'New',
+      date('Y-m-d'),
+      TRUE,
+      $this->_mebershipStatusID,
+      'abc',
+    );
+
+    $importResponse = $membershipImporter->import(CRM_Import_Parser::DUPLICATE_UPDATE, $importValues);
+    $this->assertEquals(CRM_Import_Parser::ERROR, $importResponse);
+    $this->assertContains('Required parameter missing: Status', $importValues);
+  }
+
 }