CRM-15746 add test
authorEileen McNaughton <eileen@fuzion.co.nz>
Mon, 5 Jan 2015 05:45:01 +0000 (18:45 +1300)
committerEileen McNaughton <eileen@fuzion.co.nz>
Mon, 5 Jan 2015 19:48:54 +0000 (08:48 +1300)
tests/phpunit/api/v3/MembershipTest.php

index 98cc9adba18d5da71371703ef5709b83afb8f979..c04df37f0d6204ff49c48a8eae5633817e8b08f6 100644 (file)
@@ -812,6 +812,29 @@ class api_v3_MembershipTest extends CiviUnitTestCase {
     $this->customGroupDelete($ids['custom_group_id']);
   }
 
+  /**
+   * per CRM-15746 check that the id can be altered in an update hook
+   */
+  function testMembershipUpdateCreateHookCRM15746() {
+    $this->hookClass->setHook('civicrm_pre', array($this, 'hook_civicrm_pre_update_create_membership'));
+    $result = $this->callAPISuccess('membership', 'create', $this->_params);
+    $this->callAPISuccess('membership', 'create', array('id' => $result['id'], 'end_date' => '1 year ago'));
+    $this->callAPISuccessGetCount('membership', array(), 2);
+    $this->hookClass->reset();
+    $this->callAPISuccess('membership', 'create', array('id' => $result['id'], 'end_date' => '1 year ago'));
+    $this->callAPISuccessGetCount('membership', array(), 2);
+  }
+
+  function hook_civicrm_pre_update_create_membership($op, $objectName, $id, &$params) {
+    if ($objectName == 'Membership' && $op == 'edit') {
+      $existingMembership = $this->callAPISuccessGetSingle('membership', array('id' => $params['id']));
+      unset($params['id'], $params['membership_id']);
+      $params['join_date'] = $params['membership_start_date'] = $params['start_date']= date('Ymd000000', strtotime($existingMembership['start_date']));
+      $params = array_merge($existingMembership, $params);
+      $params['id'] = NULL;
+    }
+  }
+
   /**
    * Test civicrm_contact_memberships_create Invalid membership data
    * Error expected.