3 +--------------------------------------------------------------------+
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2019 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
29 * Class CRM_Member_BAO_MembershipTest
32 class CRM_Member_BAO_MembershipTest
extends CiviUnitTestCase
{
34 public function setUp() {
36 // FIXME: something NULLs $GLOBALS['_HTML_QuickForm_registered_rules'] when the tests are ran all together
37 $GLOBALS['_HTML_QuickForm_registered_rules'] = array(
38 'required' => array('html_quickform_rule_required', 'HTML/QuickForm/Rule/Required.php'),
39 'maxlength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
40 'minlength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
41 'rangelength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
42 'email' => array('html_quickform_rule_email', 'HTML/QuickForm/Rule/Email.php'),
43 'regex' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
44 'lettersonly' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
45 'alphanumeric' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
46 'numeric' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
47 'nopunctuation' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
48 'nonzero' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
49 'callback' => array('html_quickform_rule_callback', 'HTML/QuickForm/Rule/Callback.php'),
50 'compare' => array('html_quickform_rule_compare', 'HTML/QuickForm/Rule/Compare.php'),
53 $this->_contactID
= $this->organizationCreate();
54 $this->_membershipTypeID
= $this->membershipTypeCreate(array('member_of_contact_id' => $this->_contactID
));
55 // add a random number to avoid silly conflicts with old data
56 $this->_membershipStatusID
= $this->membershipStatusCreate('test status' . rand(1, 1000));
60 * Tears down the fixture, for example, closes a network connection.
61 * This method is called after a test is executed.
63 public function tearDown() {
64 $this->membershipTypeDelete(array('id' => $this->_membershipTypeID
));
65 $this->membershipStatusDelete($this->_membershipStatusID
);
66 $this->contactDelete($this->_contactID
);
68 $this->_contactID
= $this->_membershipStatusID
= $this->_membershipTypeID
= NULL;
72 * Create membership type using given organization id.
73 * @param $organizationId
76 private function createMembershipType($organizationId, $withRelationship = FALSE) {
77 $membershipType = $this->callAPISuccess('MembershipType', 'create', array(
78 'domain_id' => 1, //Default domain ID
79 'member_of_contact_id' => $organizationId,
80 'financial_type_id' => "Member Dues",
81 'duration_unit' => "year",
82 'duration_interval' => 1,
83 'period_type' => "rolling",
84 'name' => "Organiation Membership Type",
85 'relationship_type_id' => ($withRelationship) ?
5 : NULL,
86 'relationship_direction' => ($withRelationship) ?
'b_a' : NULL,
88 return $membershipType["values"][$membershipType["id"]];
92 * Get count of related memberships by parent membership id.
93 * @param $membershipId
96 private function getRelatedMembershipsCount($membershipId) {
97 return $this->callAPISuccess("Membership", "getcount", array(
98 'owner_membership_id' => $membershipId,
103 * Test to delete related membership when type of parent memebrship is changed which does not have relation type associated.
104 * @throws CRM_Core_Exception
106 public function testDeleteRelatedMembershipsOnParentTypeChanged() {
108 $contactId = $this->individualCreate();
109 $membershipOrganizationId = $this->organizationCreate();
110 $organizationId = $this->organizationCreate();
112 // Create relationship between organization and individual contact
113 $this->callAPISuccess('Relationship', 'create', array(
114 'relationship_type_id' => 5, // Employer of relationship
115 'contact_id_a' => $contactId,
116 'contact_id_b' => $organizationId,
120 // Create two membership types one with relationship and one without.
121 $membershipTypeWithRelationship = $this->createMembershipType($membershipOrganizationId, TRUE);
122 $membershipTypeWithoutRelationship = $this->createMembershipType($membershipOrganizationId);
124 // Creating membership of organisation
125 $membership = $this->callAPISuccess("Membership", "create", array(
126 'membership_type_id' => $membershipTypeWithRelationship["id"],
127 'contact_id' => $organizationId,
128 'status_id' => $this->_membershipStatusID
,
131 $membership = $membership["values"][$membership["id"]];
133 // Check count of related memberships. It should be one for individual contact.
134 $relatedMembershipsCount = $this->getRelatedMembershipsCount($membership["id"]);
135 $this->assertEquals(1, $relatedMembershipsCount, 'Related membership count should be 1.');
137 // Update membership by changing it's type. New membership type is without relationship.
138 $membership["membership_type_id"] = $membershipTypeWithoutRelationship["id"];
139 $updatedMembership = $this->callAPISuccess("Membership", "create", $membership);
141 // Check count of related memberships again. It should be zero as we changed the membership type.
142 $relatedMembershipsCount = $this->getRelatedMembershipsCount($membership["id"]);
143 $this->assertEquals(0, $relatedMembershipsCount, 'Related membership count should be 0.');
145 // Clean up: Delete membership
146 $this->membershipDelete($membership["id"]);
149 public function testCreate() {
151 $contactId = $this->individualCreate();
154 'contact_id' => $contactId,
155 'membership_type_id' => $this->_membershipTypeID
,
156 'join_date' => date('Ymd', strtotime('2006-01-21')),
157 'start_date' => date('Ymd', strtotime('2006-01-21')),
158 'end_date' => date('Ymd', strtotime('2006-12-21')),
159 'source' => 'Payment',
161 'status_id' => $this->_membershipStatusID
,
164 CRM_Member_BAO_Membership
::create($params, $ids);
166 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
167 'contact_id', 'Database check for created membership.'
170 // Now call create() to modify an existing Membership
174 'contact_id' => $contactId,
175 'membership_type_id' => $this->_membershipTypeID
,
176 'join_date' => date('Ymd', strtotime('2006-01-21')),
177 'start_date' => date('Ymd', strtotime('2006-01-21')),
178 'end_date' => date('Ymd', strtotime('2006-12-21')),
179 'source' => 'Payment',
181 'status_id' => $this->_membershipStatusID
,
184 'membership' => $membershipId,
186 CRM_Member_BAO_Membership
::create($params, $ids);
188 $membershipTypeId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId,
189 'membership_type_id', 'contact_id',
190 'Database check on updated membership record.'
192 $this->assertEquals($membershipTypeId, $this->_membershipTypeID
, 'Verify membership type id is fetched.');
194 $this->membershipDelete($membershipId);
195 $this->contactDelete($contactId);
198 public function testGetValues() {
199 // $this->markTestSkipped( 'causes mysterious exit, needs fixing!' );
200 // Calculate membership dates based on the current date
202 $year_from_now = $now +
(365 * 24 * 60 * 60);
203 $last_month = $now - (30 * 24 * 60 * 60);
204 $year_from_last_month = $last_month +
(365 * 24 * 60 * 60);
206 $contactId = $this->individualCreate();
209 'contact_id' => $contactId,
210 'membership_type_id' => $this->_membershipTypeID
,
211 'join_date' => date('Ymd'),
212 'start_date' => date('Ymd'),
213 'end_date' => date('Ymd', $year_from_now),
214 'source' => 'Payment',
216 'status_id' => $this->_membershipStatusID
,
220 CRM_Member_BAO_Membership
::create($params, $ids);
222 $membershipId1 = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
223 'contact_id', 'Database check for created membership.'
227 'contact_id' => $contactId,
228 'membership_type_id' => $this->_membershipTypeID
,
229 'join_date' => date('Ymd', $last_month),
230 'start_date' => date('Ymd', $last_month),
231 'end_date' => date('Ymd', $year_from_last_month),
232 'source' => 'Source123',
234 'status_id' => $this->_membershipStatusID
,
237 CRM_Member_BAO_Membership
::create($params, $ids);
239 $membershipId2 = $this->assertDBNotNull('CRM_Member_BAO_Membership', 'source123', 'id',
240 'source', 'Database check for created membership.'
243 $membership = array('contact_id' => $contactId);
244 $membershipValues = array();
245 CRM_Member_BAO_Membership
::getValues($membership, $membershipValues, TRUE);
247 $this->assertEquals($membershipValues[$membershipId1]['membership_id'], $membershipId1, 'Verify membership record 1 is fetched.');
249 $this->assertEquals($membershipValues[$membershipId2]['membership_id'], $membershipId2, 'Verify membership record 2 is fetched.');
251 $this->membershipDelete($membershipId1);
252 $this->membershipDelete($membershipId2);
253 $this->contactDelete($contactId);
256 public function testRetrieve() {
257 $contactId = $this->individualCreate();
260 'contact_id' => $contactId,
261 'membership_type_id' => $this->_membershipTypeID
,
262 'join_date' => date('Ymd', strtotime('2006-01-21')),
263 'start_date' => date('Ymd', strtotime('2006-01-21')),
264 'end_date' => date('Ymd', strtotime('2006-12-21')),
265 'source' => 'Payment',
267 'status_id' => $this->_membershipStatusID
,
270 CRM_Member_BAO_Membership
::create($params, $ids);
272 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
273 'contact_id', 'Database check for created membership.'
275 $params = array('id' => $membershipId);
277 CRM_Member_BAO_Membership
::retrieve($params, $values);
278 $this->assertEquals($values['id'], $membershipId, 'Verify membership record is retrieved.');
280 $this->membershipDelete($membershipId);
281 $this->contactDelete($contactId);
284 public function testActiveMembers() {
285 $contactId = $this->individualCreate();
288 'contact_id' => $contactId,
289 'membership_type_id' => $this->_membershipTypeID
,
290 'join_date' => date('Ymd', strtotime('2006-01-21')),
291 'start_date' => date('Ymd', strtotime('2006-01-21')),
292 'end_date' => date('Ymd', strtotime('2006-12-21')),
293 'source' => 'Payment',
295 'status_id' => $this->_membershipStatusID
,
298 CRM_Member_BAO_Membership
::create($params, $ids);
300 $membershipId1 = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
301 'contact_id', 'Database check for created membership.'
304 $params = array('id' => $membershipId1);
306 CRM_Member_BAO_Membership
::retrieve($params, $values1);
307 $membership = array($membershipId1 => $values1);
310 'contact_id' => $contactId,
311 'membership_type_id' => $this->_membershipTypeID
,
312 'join_date' => date('Ymd', strtotime('2006-01-21')),
313 'start_date' => date('Ymd', strtotime('2006-01-21')),
314 'end_date' => date('Ymd', strtotime('2006-12-21')),
315 'source' => 'PaySource',
317 'status_id' => $this->_membershipStatusID
,
320 CRM_Member_BAO_Membership
::create($params, $ids);
322 $membershipId2 = $this->assertDBNotNull('CRM_Member_BAO_Membership', 'PaySource', 'id',
323 'source', 'Database check for created membership.'
326 $params = array('id' => $membershipId2);
328 CRM_Member_BAO_Membership
::retrieve($params, $values2);
329 $membership[$membershipId2] = $values2;
331 $activeMembers = CRM_Member_BAO_Membership
::activeMembers($membership);
332 $inActiveMembers = CRM_Member_BAO_Membership
::activeMembers($membership, 'inactive');
334 $this->assertEquals($activeMembers[$membershipId1]['id'], $membership[$membershipId1]['id'], 'Verify active membership record is retrieved.');
335 $this->assertEquals($activeMembers[$membershipId2]['id'], $membership[$membershipId2]['id'], 'Verify active membership record is retrieved.');
337 $this->assertEquals(0, count($inActiveMembers), 'Verify No inactive membership record is retrieved.');
339 $this->membershipDelete($membershipId1);
340 $this->membershipDelete($membershipId2);
341 $this->contactDelete($contactId);
344 public function testDeleteMembership() {
345 $contactId = $this->individualCreate();
348 'contact_id' => $contactId,
349 'membership_type_id' => $this->_membershipTypeID
,
350 'join_date' => date('Ymd', strtotime('2006-01-21')),
351 'start_date' => date('Ymd', strtotime('2006-01-21')),
352 'end_date' => date('Ymd', strtotime('2006-12-21')),
353 'source' => 'Payment',
355 'status_id' => $this->_membershipStatusID
,
358 CRM_Member_BAO_Membership
::create($params, $ids);
360 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
361 'contact_id', 'Database check for created membership.'
363 CRM_Member_BAO_Membership
::del($membershipId);
365 $this->assertDBNull('CRM_Member_BAO_Membership', $contactId, 'id',
366 'contact_id', 'Database check for deleted membership.'
368 $this->contactDelete($contactId);
371 public function testGetContactMembership() {
372 $contactId = $this->individualCreate();
375 'contact_id' => $contactId,
376 'membership_type_id' => $this->_membershipTypeID
,
377 'join_date' => date('Ymd', strtotime('2006-01-21')),
378 'start_date' => date('Ymd', strtotime('2006-01-21')),
379 'end_date' => date('Ymd', strtotime('2006-12-21')),
380 'source' => 'Payment',
382 'status_id' => $this->_membershipStatusID
,
385 CRM_Member_BAO_Membership
::create($params, $ids);
387 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
388 'contact_id', 'Database check for created membership.'
391 $membership = CRM_Member_BAO_Membership
::getContactMembership($contactId, $this->_membershipTypeID
, FALSE);
393 $this->assertEquals($membership['id'], $membershipId, 'Verify membership record is retrieved.');
395 $this->membershipDelete($membershipId);
396 $this->contactDelete($contactId);
401 * Get the contribution.
402 * page id from the membership record
404 public function testgetContributionPageId() {
405 $contactId = $this->individualCreate();
408 'contact_id' => $contactId,
409 'membership_type_id' => $this->_membershipTypeID
,
410 'join_date' => date('Ymd', strtotime('2006-01-21')),
411 'start_date' => date('Ymd', strtotime('2006-01-21')),
412 'end_date' => date('Ymd', strtotime('2006-12-21')),
413 'source' => 'Payment',
415 'status_id' => $this->_membershipStatusID
,
418 CRM_Member_BAO_Membership
::create($params, $ids);
420 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
421 'contact_id', 'Database check for created membership.'
423 $membership[$membershipId]['renewPageId'] = CRM_Member_BAO_Membership
::getContributionPageId($membershipId);
425 $this->membershipDelete($membershipId);
426 $this->contactDelete($contactId);
430 * Get membership joins/renewals
431 * for a specified membership
434 public function testgetMembershipStarts() {
435 $contactId = $this->individualCreate();
438 'contact_id' => $contactId,
439 'membership_type_id' => $this->_membershipTypeID
,
440 'join_date' => date('Ymd', strtotime('2006-01-21')),
441 'start_date' => date('Ymd', strtotime('2006-01-21')),
442 'end_date' => date('Ymd', strtotime('2006-12-21')),
443 'source' => 'Payment',
445 'status_id' => $this->_membershipStatusID
,
448 CRM_Member_BAO_Membership
::create($params, $ids);
450 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
451 'contact_id', 'Database check for created membership.'
453 $yearStart = date('Y') . '0101';
454 $currentDate = date('Ymd');
455 CRM_Member_BAO_Membership
::getMembershipStarts($this->_membershipTypeID
, $yearStart, $currentDate);
457 $this->membershipDelete($membershipId);
458 $this->contactDelete($contactId);
462 * Get a count of membership for a specified membership type,
463 * optionally for a specified date.
465 public function testGetMembershipCount() {
466 $contactId = $this->individualCreate();
469 'contact_id' => $contactId,
470 'membership_type_id' => $this->_membershipTypeID
,
471 'join_date' => date('Ymd', strtotime('2006-01-21')),
472 'start_date' => date('Ymd', strtotime('2006-01-21')),
473 'end_date' => date('Ymd', strtotime('2006-12-21')),
474 'source' => 'Payment',
476 'status_id' => $this->_membershipStatusID
,
479 CRM_Member_BAO_Membership
::create($params, $ids);
481 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
482 'contact_id', 'Database check for created membership.'
484 $currentDate = date('Ymd');
486 CRM_Member_BAO_Membership
::getMembershipCount($this->_membershipTypeID
, $currentDate, $test);
488 $this->membershipDelete($membershipId);
489 $this->contactDelete($contactId);
494 * Checkup sort name function.
496 public function testSortName() {
497 $contactId = $this->individualCreate();
500 'contact_id' => $contactId,
501 'membership_type_id' => $this->_membershipTypeID
,
502 'join_date' => '2006-01-21',
503 'start_date' => '2006-01-21',
504 'end_date' => '2006-12-21',
505 'source' => 'Payment',
507 'status_id' => $this->_membershipStatusID
,
510 $membership = $this->callAPISuccess('Membership', 'create', $params);
512 $this->assertEquals('Anderson, Anthony', CRM_Member_BAO_Membership
::sortName($membership['id']));
514 $this->membershipDelete($membership['id']);
515 $this->contactDelete($contactId);
519 * Delete related memberships.
521 public function testdeleteRelatedMemberships() {
522 $contactId = $this->individualCreate();
525 'contact_id' => $contactId,
526 'membership_type_id' => $this->_membershipTypeID
,
527 'join_date' => date('Ymd', strtotime('2006-01-21')),
528 'start_date' => date('Ymd', strtotime('2006-01-21')),
529 'end_date' => date('Ymd', strtotime('2006-12-21')),
530 'source' => 'Payment',
532 'status_id' => $this->_membershipStatusID
,
536 CRM_Member_BAO_Membership
::create($params, $ids);
538 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
539 'contact_id', 'Database check for created membership.'
542 CRM_Member_BAO_Membership
::deleteRelatedMemberships($membershipId);
544 $this->membershipDelete($membershipId);
545 $this->contactDelete($contactId);
549 * Renew membership with change in membership type.
551 public function testRenewMembership() {
552 $contactId = $this->individualCreate();
553 $joinDate = $startDate = date("Ymd", strtotime(date("Ymd") . " -6 month"));
554 $endDate = date("Ymd", strtotime($joinDate . " +1 year -1 day"));
556 'contact_id' => $contactId,
557 'membership_type_id' => $this->_membershipTypeID
,
558 'join_date' => $joinDate,
559 'start_date' => $startDate,
560 'end_date' => $endDate,
561 'source' => 'Payment',
563 'status_id' => $this->_membershipStatusID
,
566 $membership = CRM_Member_BAO_Membership
::create($params, $ids);
567 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
568 'contact_id', 'Database check for created membership.'
571 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
575 'Database checked on membershiplog record.'
578 // this is a test and we dont want qfKey generation / validation
579 // easier to suppress it, than change core code
580 $config = CRM_Core_Config
::singleton();
581 $config->keyDisable
= TRUE;
583 $isTestMembership = 0;
584 list($MembershipRenew) = CRM_Member_BAO_Membership
::processMembership(
586 $this->_membershipTypeID
,
599 $endDate = date("Y-m-d", strtotime($membership->end_date
. " +1 year"));
601 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
602 $MembershipRenew->id
,
605 'Database checked on membershiplog record.'
607 $this->assertEquals($this->_membershipTypeID
, $MembershipRenew->membership_type_id
, 'Verify membership type is changed during renewal.');
608 $this->assertEquals($endDate, $MembershipRenew->end_date
, 'Verify correct end date is calculated after membership renewal');
610 $this->membershipDelete($membershipId);
611 $this->contactDelete($contactId);
615 * Renew stale membership.
617 public function testStaleMembership() {
619 $contactId = $this->individualCreate();
620 $joinDate = $startDate = date("Ymd", strtotime(date("Ymd") . " -1 year -15 days"));
621 $endDate = date("Ymd", strtotime($joinDate . " +1 year -1 day"));
623 'contact_id' => $contactId,
624 'membership_type_id' => $this->_membershipTypeID
,
625 'join_date' => $joinDate,
626 'start_date' => $startDate,
627 'end_date' => $endDate,
628 'source' => 'Payment',
629 'status_id' => $statusId,
633 $membership = CRM_Member_BAO_Membership
::create($params, $ids);
635 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
636 'contact_id', 'Database check for created membership.'
639 $this->assertEquals($membership->status_id
, $statusId, 'Verify correct status id is calculated.');
640 $this->assertEquals($membership->membership_type_id
, $this->_membershipTypeID
,
641 'Verify correct membership type id.'
646 'startDate' => 'start_date',
647 'joinDate' => 'join_date',
648 'endDate' => 'end_date',
651 foreach ($dates as $date => $dbDate) {
652 $this->assertEquals($membership->$dbDate, $
$date,
653 "Verify correct {$date} is present."
657 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
661 'Database checked on membershiplog record.'
664 // this is a test and we dont want qfKey generation / validation
665 // easier to suppress it, than change core code
666 $config = CRM_Core_Config
::singleton();
667 $config->keyDisable
= TRUE;
669 $membershipRenewal = new CRM_Core_Form();
670 $membershipRenewal->controller
= new CRM_Core_Controller();
671 list($MembershipRenew) = CRM_Member_BAO_Membership
::processMembership(
673 $this->_membershipTypeID
,
687 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
688 $MembershipRenew->id
,
691 'Database checked on membershiplog record.'
694 $this->membershipDelete($membershipId);
695 $this->contactDelete($contactId);
698 public function testUpdateAllMembershipStatusConvertExpiredOverriddenStatusToNormal() {
700 'contact_id' => $this->individualCreate(),
701 'membership_type_id' => $this->_membershipTypeID
,
702 'join_date' => date('Ymd', time()),
703 'start_date' => date('Ymd', time()),
704 'end_date' => date('Ymd', strtotime('+1 year')),
705 'source' => 'Payment',
707 'status_override_end_date' => date('Ymd', strtotime('-1 day')),
708 'status_id' => $this->_membershipStatusID
,
711 $createdMembership = CRM_Member_BAO_Membership
::create($params, $ids);
713 CRM_Member_BAO_Membership
::updateAllMembershipStatus();
715 $membershipAfterProcess = civicrm_api3('Membership', 'get', array(
717 'id' => $createdMembership->id
,
718 'return' => array('id', 'is_override', 'status_override_end_date'),
721 $this->assertEquals($createdMembership->id
, $membershipAfterProcess['id']);
722 $this->assertArrayNotHasKey('is_override', $membershipAfterProcess);
723 $this->assertArrayNotHasKey('status_override_end_date', $membershipAfterProcess);
726 public function testUpdateAllMembershipStatusHandleOverriddenWithEndOverrideDateEqualTodayAsExpired() {
728 'contact_id' => $this->individualCreate(),
729 'membership_type_id' => $this->_membershipTypeID
,
730 'join_date' => date('Ymd', time()),
731 'start_date' => date('Ymd', time()),
732 'end_date' => date('Ymd', strtotime('+1 year')),
733 'source' => 'Payment',
735 'status_override_end_date' => date('Ymd', time()),
736 'status_id' => $this->_membershipStatusID
,
739 $createdMembership = CRM_Member_BAO_Membership
::create($params, $ids);
741 CRM_Member_BAO_Membership
::updateAllMembershipStatus();
743 $membershipAfterProcess = civicrm_api3('Membership', 'get', array(
745 'id' => $createdMembership->id
,
746 'return' => array('id', 'is_override', 'status_override_end_date'),
749 $this->assertEquals($createdMembership->id
, $membershipAfterProcess['id']);
750 $this->assertArrayNotHasKey('is_override', $membershipAfterProcess);
751 $this->assertArrayNotHasKey('status_override_end_date', $membershipAfterProcess);
754 public function testUpdateAllMembershipStatusDoesNotConvertOverridenMembershipWithoutEndOverrideDateToNormal() {
756 'contact_id' => $this->individualCreate(),
757 'membership_type_id' => $this->_membershipTypeID
,
758 'join_date' => date('Ymd', time()),
759 'start_date' => date('Ymd', time()),
760 'end_date' => date('Ymd', strtotime('+1 year')),
761 'source' => 'Payment',
763 'status_id' => $this->_membershipStatusID
,
766 $createdMembership = CRM_Member_BAO_Membership
::create($params, $ids);
768 CRM_Member_BAO_Membership
::updateAllMembershipStatus();
770 $membershipAfterProcess = civicrm_api3('Membership', 'get', array(
772 'id' => $createdMembership->id
,
773 'return' => array('id', 'is_override', 'status_override_end_date'),
776 $this->assertEquals($createdMembership->id
, $membershipAfterProcess['id']);
777 $this->assertEquals(1, $membershipAfterProcess['is_override']);