Merge remote-tracking branch 'upstream/4.5' into 4.5-master-2015-02-09-11-44-07
[civicrm-core.git] / tests / phpunit / CRM / Member / BAO / MembershipTest.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
39de6fd5 4 | CiviCRM version 4.6 |
6a488035 5 +--------------------------------------------------------------------+
06a1bc01 6 | Copyright CiviCRM LLC (c) 2004-2014 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
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. |
13 | |
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. |
18 | |
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 +--------------------------------------------------------------------+
d25dd0ee 26 */
6a488035
TO
27
28
29require_once 'CiviTest/CiviUnitTestCase.php';
30require_once 'CiviTest/Contact.php';
31require_once 'CiviTest/Custom.php';
32require_once 'CiviTest/ContributionPage.php';
33require_once 'CiviTest/Membership.php';
34require_once 'CRM/Core/Controller.php';
35
4cbe18b8
EM
36/**
37 * Class CRM_Member_BAO_MembershipTest
38 */
6a488035 39class CRM_Member_BAO_MembershipTest extends CiviUnitTestCase {
6a488035 40
00be9182 41 public function setUp() {
6a488035
TO
42 parent::setUp();
43 // FIXME: something NULLs $GLOBALS['_HTML_QuickForm_registered_rules'] when the tests are ran all together
44 $GLOBALS['_HTML_QuickForm_registered_rules'] = array(
45 'required' => array('html_quickform_rule_required', 'HTML/QuickForm/Rule/Required.php'),
46 'maxlength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
47 'minlength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
48 'rangelength' => array('html_quickform_rule_range', 'HTML/QuickForm/Rule/Range.php'),
49 'email' => array('html_quickform_rule_email', 'HTML/QuickForm/Rule/Email.php'),
50 'regex' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
51 'lettersonly' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
52 'alphanumeric' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
53 'numeric' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
54 'nopunctuation' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
55 'nonzero' => array('html_quickform_rule_regex', 'HTML/QuickForm/Rule/Regex.php'),
56 'callback' => array('html_quickform_rule_callback', 'HTML/QuickForm/Rule/Callback.php'),
57 'compare' => array('html_quickform_rule_compare', 'HTML/QuickForm/Rule/Compare.php'),
58 );
59
60 $this->_contactID = $this->organizationCreate();
75638074 61 $this->_membershipTypeID = $this->membershipTypeCreate(array('member_of_contact_id' => $this->_contactID));
6a488035
TO
62 // add a random number to avoid silly conflicts with old data
63 $this->_membershipStatusID = $this->membershipStatusCreate('test status' . rand(1, 1000));
64 }
65
66 /**
67 * Tears down the fixture, for example, closes a network connection.
68 * This method is called after a test is executed.
6a488035 69 */
00be9182 70 public function tearDown() {
481a74f4
TO
71 $this->membershipTypeDelete(array('id' => $this->_membershipTypeID));
72 $this->membershipStatusDelete($this->_membershipStatusID);
73 Contact::delete($this->_contactID);
6a488035 74
6c6e6187 75 $this->_contactID = $this->_membershipStatusID = $this->_membershipTypeID = NULL;
6a488035
TO
76 }
77
00be9182 78 public function testCreate() {
6a488035
TO
79
80 $contactId = Contact::createIndividual();
81
82 $params = array(
83 'contact_id' => $contactId,
84 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
85 'join_date' => date('Ymd', strtotime('2006-01-21')),
86 'start_date' => date('Ymd', strtotime('2006-01-21')),
87 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
88 'source' => 'Payment',
89 'is_override' => 1,
90 'status_id' => $this->_membershipStatusID,
91 );
92 $ids = array();
93 CRM_Member_BAO_Membership::create($params, $ids);
94
95 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
96 'contact_id', 'Database check for created membership.'
97 );
98
99 // Now call create() to modify an existing Membership
100
101 $params = array();
102 $params = array(
103 'contact_id' => $contactId,
104 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
105 'join_date' => date('Ymd', strtotime('2006-01-21')),
106 'start_date' => date('Ymd', strtotime('2006-01-21')),
107 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
108 'source' => 'Payment',
109 'is_override' => 1,
110 'status_id' => $this->_membershipStatusID,
111 );
112 $ids = array(
113 'membership' => $membershipId,
114 );
115 CRM_Member_BAO_Membership::create($params, $ids);
116
117 $membershipTypeId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId,
118 'membership_type_id', 'contact_id',
119 'Database check on updated membership record.'
120 );
121 $this->assertEquals($membershipTypeId, $this->_membershipTypeID, 'Verify membership type id is fetched.');
122
123 $this->membershipDelete($membershipId);
124 Contact::delete($contactId);
125 }
126
00be9182 127 public function testGetValues() {
6a488035
TO
128 // $this->markTestSkipped( 'causes mysterious exit, needs fixing!' );
129 // Calculate membership dates based on the current date
130 $now = time();
131 $year_from_now = $now + (365 * 24 * 60 * 60);
132 $last_month = $now - (30 * 24 * 60 * 60);
133 $year_from_last_month = $last_month + (365 * 24 * 60 * 60);
134
135 $contactId = Contact::createIndividual();
136
137 $params = array(
138 'contact_id' => $contactId,
139 'membership_type_id' => $this->_membershipTypeID,
140 'join_date' => date('Ymd'),
141 'start_date' => date('Ymd'),
142 'end_date' => date('Ymd', $year_from_now),
143 'source' => 'Payment',
144 'is_override' => 1,
145 'status_id' => $this->_membershipStatusID,
146 );
147
148 $ids = array();
149 CRM_Member_BAO_Membership::create($params, $ids);
150
151 $membershipId1 = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
152 'contact_id', 'Database check for created membership.'
153 );
154
155 $params = array(
156 'contact_id' => $contactId,
157 'membership_type_id' => $this->_membershipTypeID,
158 'join_date' => date('Ymd', $last_month),
159 'start_date' => date('Ymd', $last_month),
160 'end_date' => date('Ymd', $year_from_last_month),
161 'source' => 'Source123',
162 'is_override' => 0,
163 'status_id' => $this->_membershipStatusID,
164 );
165 $ids = array();
166 CRM_Member_BAO_Membership::create($params, $ids);
167
168 $membershipId2 = $this->assertDBNotNull('CRM_Member_BAO_Membership', 'source123', 'id',
169 'source', 'Database check for created membership.'
170 );
171
172 $membership = array('contact_id' => $contactId);
173 $membershipValues = array();
174 CRM_Member_BAO_Membership::getValues($membership, $membershipValues, TRUE);
175
176 $this->assertEquals($membershipValues[$membershipId1]['membership_id'], $membershipId1, 'Verify membership record 1 is fetched.');
177
178 $this->assertEquals($membershipValues[$membershipId2]['membership_id'], $membershipId2, 'Verify membership record 2 is fetched.');
179
180 $this->membershipDelete($membershipId1);
181 $this->membershipDelete($membershipId2);
182 Contact::delete($contactId);
183 }
184
00be9182 185 public function testRetrieve() {
6a488035
TO
186 $contactId = Contact::createIndividual();
187
188 $params = array(
189 'contact_id' => $contactId,
190 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
191 'join_date' => date('Ymd', strtotime('2006-01-21')),
192 'start_date' => date('Ymd', strtotime('2006-01-21')),
193 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
194 'source' => 'Payment',
195 'is_override' => 1,
196 'status_id' => $this->_membershipStatusID,
197 );
198 $ids = array();
199 CRM_Member_BAO_Membership::create($params, $ids);
200
201 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
202 'contact_id', 'Database check for created membership.'
203 );
204 $params = array('id' => $membershipId);
3e8ef36b 205 $values = array();
6a488035
TO
206 CRM_Member_BAO_Membership::retrieve($params, $values);
207 $this->assertEquals($values['id'], $membershipId, 'Verify membership record is retrieved.');
208
209 $this->membershipDelete($membershipId);
210 $this->contactDelete($contactId);
211 }
212
00be9182 213 public function testActiveMembers() {
6a488035
TO
214 $contactId = Contact::createIndividual();
215
216 $params = array(
217 'contact_id' => $contactId,
218 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
219 'join_date' => date('Ymd', strtotime('2006-01-21')),
220 'start_date' => date('Ymd', strtotime('2006-01-21')),
221 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
222 'source' => 'Payment',
223 'is_override' => 1,
224 'status_id' => $this->_membershipStatusID,
225 );
226 $ids = array();
227 CRM_Member_BAO_Membership::create($params, $ids);
228
229 $membershipId1 = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
230 'contact_id', 'Database check for created membership.'
231 );
232
233 $params = array('id' => $membershipId1);
3e8ef36b 234 $values1 = array();
6a488035
TO
235 CRM_Member_BAO_Membership::retrieve($params, $values1);
236 $membership = array($membershipId1 => $values1);
237
238 $params = array(
239 'contact_id' => $contactId,
240 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
241 'join_date' => date('Ymd', strtotime('2006-01-21')),
242 'start_date' => date('Ymd', strtotime('2006-01-21')),
243 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
244 'source' => 'PaySource',
245 'is_override' => 1,
246 'status_id' => $this->_membershipStatusID,
247 );
248 $ids = array();
249 CRM_Member_BAO_Membership::create($params, $ids);
250
251 $membershipId2 = $this->assertDBNotNull('CRM_Member_BAO_Membership', 'PaySource', 'id',
252 'source', 'Database check for created membership.'
253 );
254
255 $params = array('id' => $membershipId2);
3e8ef36b 256 $values2 = array();
6a488035
TO
257 CRM_Member_BAO_Membership::retrieve($params, $values2);
258 $membership[$membershipId2] = $values2;
259
260 $activeMembers = CRM_Member_BAO_Membership::activeMembers($membership);
261 $inActiveMembers = CRM_Member_BAO_Membership::activeMembers($membership, 'inactive');
262
263 $this->assertEquals($activeMembers[$membershipId1]['id'], $membership[$membershipId1]['id'], 'Verify active membership record is retrieved.');
264 $this->assertEquals($activeMembers[$membershipId2]['id'], $membership[$membershipId2]['id'], 'Verify active membership record is retrieved.');
265
266 $this->assertEquals(0, count($inActiveMembers), 'Verify No inactive membership record is retrieved.');
267
268 $this->membershipDelete($membershipId1);
269 $this->membershipDelete($membershipId2);
270 Contact::delete($contactId);
271 }
272
00be9182 273 public function testDeleteMembership() {
6a488035
TO
274 $contactId = Contact::createIndividual();
275
276 $params = array(
277 'contact_id' => $contactId,
278 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
279 'join_date' => date('Ymd', strtotime('2006-01-21')),
280 'start_date' => date('Ymd', strtotime('2006-01-21')),
281 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
282 'source' => 'Payment',
283 'is_override' => 1,
284 'status_id' => $this->_membershipStatusID,
285 );
286 $ids = array();
287 CRM_Member_BAO_Membership::create($params, $ids);
288
289 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
290 'contact_id', 'Database check for created membership.'
291 );
3506b6cd 292 CRM_Member_BAO_Membership::del($membershipId);
6a488035
TO
293
294 $membershipId = $this->assertDBNull('CRM_Member_BAO_Membership', $contactId, 'id',
295 'contact_id', 'Database check for deleted membership.'
296 );
297 Contact::delete($contactId);
298 }
299
00be9182 300 public function testGetContactMembership() {
6a488035
TO
301 $contactId = Contact::createIndividual();
302
303 $params = array(
304 'contact_id' => $contactId,
305 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
306 'join_date' => date('Ymd', strtotime('2006-01-21')),
307 'start_date' => date('Ymd', strtotime('2006-01-21')),
308 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
309 'source' => 'Payment',
310 'is_override' => 1,
311 'status_id' => $this->_membershipStatusID,
312 );
313 $ids = array();
314 CRM_Member_BAO_Membership::create($params, $ids);
315
316 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
317 'contact_id', 'Database check for created membership.'
318 );
319
320 $membership = CRM_Member_BAO_Membership::getContactMembership($contactId, $this->_membershipTypeID, FALSE);
321
322 $this->assertEquals($membership['id'], $membershipId, 'Verify membership record is retrieved.');
323
324 $this->membershipDelete($membershipId);
325 Contact::delete($contactId);
326 }
327
328
c490a46a 329 /**
eceb18cc 330 * Get the contribution.
c490a46a
CW
331 * page id from the membership record
332 */
00be9182 333 public function testgetContributionPageId() {
6a488035
TO
334 $contactId = Contact::createIndividual();
335
336 $params = array(
337 'contact_id' => $contactId,
338 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
339 'join_date' => date('Ymd', strtotime('2006-01-21')),
340 'start_date' => date('Ymd', strtotime('2006-01-21')),
341 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
342 'source' => 'Payment',
343 'is_override' => 1,
344 'status_id' => $this->_membershipStatusID,
345 );
346 $ids = array();
347 CRM_Member_BAO_Membership::create($params, $ids);
348
6a488035
TO
349 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
350 'contact_id', 'Database check for created membership.'
351 );
352 $membership[$membershipId]['renewPageId'] = CRM_Member_BAO_Membership::getContributionPageId($membershipId);
353
354 $this->membershipDelete($membershipId);
355 Contact::delete($contactId);
356 }
92915c55 357
c490a46a
CW
358 /**
359 * Get membership joins/renewals
360 * for a specified membership
361 * type.
c490a46a 362 */
00be9182 363 public function testgetMembershipStarts() {
6a488035
TO
364 $contactId = Contact::createIndividual();
365
366 $params = array(
367 'contact_id' => $contactId,
368 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
369 'join_date' => date('Ymd', strtotime('2006-01-21')),
370 'start_date' => date('Ymd', strtotime('2006-01-21')),
371 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
372 'source' => 'Payment',
373 'is_override' => 1,
374 'status_id' => $this->_membershipStatusID,
375 );
376 $ids = array();
377 CRM_Member_BAO_Membership::create($params, $ids);
378
379 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
380 'contact_id', 'Database check for created membership.'
381 );
382 $yearStart = date('Y') . '0101';
383 $currentDate = date('Ymd');
384 CRM_Member_BAO_Membership::getMembershipStarts($this->_membershipTypeID, $yearStart, $currentDate);
385
386 $this->membershipDelete($membershipId);
387 Contact::delete($contactId);
388 }
389
c490a46a
CW
390 /**
391 * Get a count of membership for a specified membership type,
392 * optionally for a specified date.
c490a46a 393 */
00be9182 394 public function testGetMembershipCount() {
6a488035
TO
395 $contactId = Contact::createIndividual();
396
397 $params = array(
398 'contact_id' => $contactId,
399 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
400 'join_date' => date('Ymd', strtotime('2006-01-21')),
401 'start_date' => date('Ymd', strtotime('2006-01-21')),
402 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
403 'source' => 'Payment',
404 'is_override' => 1,
405 'status_id' => $this->_membershipStatusID,
406 );
407 $ids = array();
408 CRM_Member_BAO_Membership::create($params, $ids);
409
410 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
411 'contact_id', 'Database check for created membership.'
412 );
413 $currentDate = date('Ymd');
414 $test = 0;
415 CRM_Member_BAO_Membership::getMembershipCount($this->_membershipTypeID, $currentDate, $test);
416
417 $this->membershipDelete($membershipId);
418 Contact::delete($contactId);
419 }
420
421
c490a46a
CW
422 /**
423 * Take sort name of contact during
424 * batch update member via profile
c490a46a 425 */
00be9182 426 public function testsortName() {
6a488035
TO
427 $contactId = Contact::createIndividual();
428
429 $params = array(
430 'contact_id' => $contactId,
431 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
432 'join_date' => date('Ymd', strtotime('2006-01-21')),
433 'start_date' => date('Ymd', strtotime('2006-01-21')),
434 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
435 'source' => 'Payment',
436 'is_override' => 1,
437 'status_id' => $this->_membershipStatusID,
438 );
439 $ids = array();
440
441 CRM_Member_BAO_Membership::create($params, $ids);
442
443 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
444 'contact_id', 'Database check for created membership.'
445 );
446
447 CRM_Member_BAO_Membership::sortName($membershipId);
448
449 $this->assertDBCompareValue('CRM_Contact_DAO_Contact', $contactId, 'sort_name', 'id', 'Doe, John',
450 'Database check for sort name record.'
451 );
452
453 $this->membershipDelete($membershipId);
454 Contact::delete($contactId);
455 }
456
c490a46a 457 /**
eceb18cc 458 * Delete related memberships.
c490a46a 459 */
00be9182 460 public function testdeleteRelatedMemberships() {
6a488035
TO
461 $contactId = Contact::createIndividual();
462
463 $params = array(
464 'contact_id' => $contactId,
465 'membership_type_id' => $this->_membershipTypeID,
6c6e6187
TO
466 'join_date' => date('Ymd', strtotime('2006-01-21')),
467 'start_date' => date('Ymd', strtotime('2006-01-21')),
468 'end_date' => date('Ymd', strtotime('2006-12-21')),
6a488035
TO
469 'source' => 'Payment',
470 'is_override' => 1,
471 'status_id' => $this->_membershipStatusID,
472 );
473 $ids = array();
474
475 CRM_Member_BAO_Membership::create($params, $ids);
476
477 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
478 'contact_id', 'Database check for created membership.'
479 );
480
481 CRM_Member_BAO_Membership::deleteRelatedMemberships($membershipId);
482
483 $this->membershipDelete($membershipId);
484 Contact::delete($contactId);
485 }
486
c490a46a 487 /**
eceb18cc 488 * Renew membership with change in membership type.
c490a46a 489 */
00be9182 490 public function testRenewMembership() {
6a488035 491 $contactId = Contact::createIndividual();
92915c55
TO
492 $joinDate = $startDate = date("Ymd", strtotime(date("Ymd") . " -6 month"));
493 $endDate = date("Ymd", strtotime($joinDate . " +1 year -1 day"));
6a488035
TO
494 $params = array(
495 'contact_id' => $contactId,
496 'membership_type_id' => $this->_membershipTypeID,
497 'join_date' => $joinDate,
498 'start_date' => $startDate,
499 'end_date' => $endDate,
500 'source' => 'Payment',
501 'is_override' => 1,
502 'status_id' => $this->_membershipStatusID,
503 );
92915c55
TO
504 $ids = array();
505 $membership = CRM_Member_BAO_Membership::create($params, $ids);
6a488035
TO
506 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
507 'contact_id', 'Database check for created membership.'
508 );
509
510 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
511 $membership->id,
512 'id',
513 'membership_id',
514 'Database checked on membershiplog record.'
515 );
516
517 // this is a test and we dont want qfKey generation / validation
518 // easier to suppress it, than change core code
519 $config = CRM_Core_Config::singleton();
520 $config->keyDisable = TRUE;
521
ae5ffbb7
TO
522 $membershipRenewal = new CRM_Core_Form();
523 $membershipRenewal->controller = new CRM_Core_Controller();
6a488035 524 $isTestMembership = 0;
ae5ffbb7
TO
525 $MembershipRenew = CRM_Member_BAO_Membership::renewMembershipFormWrapper(
526 $contactId,
527 $this->_membershipTypeID,
528 $isTestMembership,
529 $membershipRenewal,
530 NULL,
531 NULL
532 );
6a488035
TO
533 $endDate = date("Y-m-d", strtotime($membership->end_date . " +1 year"));
534
535 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
536 $MembershipRenew->id,
537 'id',
538 'membership_id',
539 'Database checked on membershiplog record.'
540 );
1038ea01
EM
541 $this->assertEquals($this->_membershipTypeID, $MembershipRenew->membership_type_id, 'Verify membership type is changed during renewal.');
542 $this->assertEquals($endDate, $MembershipRenew->end_date, 'Verify correct end date is calculated after membership renewal');
6a488035
TO
543
544 $this->membershipDelete($membershipId);
545 Contact::delete($contactId);
546 }
547
c490a46a 548 /**
eceb18cc 549 * Renew stale membership.
c490a46a 550 */
00be9182 551 public function testStaleMembership() {
92915c55 552 $statusId = 3;
6a488035 553 $contactId = Contact::createIndividual();
92915c55
TO
554 $joinDate = $startDate = date("Ymd", strtotime(date("Ymd") . " -1 year -15 days"));
555 $endDate = date("Ymd", strtotime($joinDate . " +1 year -1 day"));
556 $params = array(
6a488035
TO
557 'contact_id' => $contactId,
558 'membership_type_id' => $this->_membershipTypeID,
559 'join_date' => $joinDate,
560 'start_date' => $startDate,
561 'end_date' => $endDate,
562 'source' => 'Payment',
563 'status_id' => $statusId,
564 );
565
566 $ids = array();
567 $membership = CRM_Member_BAO_Membership::create($params, $ids);
568
569 $membershipId = $this->assertDBNotNull('CRM_Member_BAO_Membership', $contactId, 'id',
570 'contact_id', 'Database check for created membership.'
571 );
572
573 $this->assertEquals($membership->status_id, $statusId, 'Verify correct status id is calculated.');
574 $this->assertEquals($membership->membership_type_id, $this->_membershipTypeID,
575 'Verify correct membership type id.'
576 );
577
578 //verify all dates.
579 $dates = array(
580 'startDate' => 'start_date',
581 'joinDate' => 'join_date',
582 'endDate' => 'end_date',
583 );
584
585 foreach ($dates as $date => $dbDate) {
586 $this->assertEquals($membership->$dbDate, $$date,
587 "Verify correct {$date} is present."
588 );
589 }
590
591 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
592 $membership->id,
593 'id',
594 'membership_id',
595 'Database checked on membershiplog record.'
596 );
597
598 // this is a test and we dont want qfKey generation / validation
599 // easier to suppress it, than change core code
600 $config = CRM_Core_Config::singleton();
601 $config->keyDisable = TRUE;
602
ae5ffbb7
TO
603 $membershipRenewal = new CRM_Core_Form();
604 $membershipRenewal->controller = new CRM_Core_Controller();
c98997b9 605 $MembershipRenew = CRM_Member_BAO_Membership::renewMembershipFormWrapper($contactId, $this->_membershipTypeID, $isTestMembership = 0, $membershipRenewal, NULL, NULL);
6a488035
TO
606
607 $this->assertDBNotNull('CRM_Member_BAO_MembershipLog',
608 $MembershipRenew->id,
609 'id',
610 'membership_id',
611 'Database checked on membershiplog record.'
612 );
613
614 $this->membershipDelete($membershipId);
615 Contact::delete($contactId);
616 }
96025800 617
6a488035 618}