use api success & api failure & apiSetup for cleaner tests
[civicrm-core.git] / tests / phpunit / api / v3 / MembershipTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.3 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2013 |
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 +--------------------------------------------------------------------+
26 */
27
28 /**
29 * Test APIv3 civicrm_membership functions
30 *
31 * @package CiviCRM_APIv3
32 * @subpackage API_Member
33 */
34
35
36 require_once 'CiviTest/CiviUnitTestCase.php';
37
38 class api_v3_MembershipTest extends CiviUnitTestCase {
39 protected $_apiversion;
40 protected $_contactID;
41 protected $_membershipTypeID;
42 protected $_membershipStatusID;
43 protected $__membershipID;
44 protected $_entity;
45 protected $_params;
46 public $_eNoticeCompliant = TRUE;
47
48 public function setUp() {
49 // Connect to the database
50 parent::setUp();
51 $this->_apiversion = 3;
52 $this->_contactID = $this->individualCreate();
53 $this->_membershipTypeID = $this->membershipTypeCreate($this->_contactID);
54 $this->_membershipStatusID = $this->membershipStatusCreate('test status');
55
56 require_once 'CRM/Member/PseudoConstant.php';
57 CRM_Member_PseudoConstant::membershipType(NULL, TRUE);
58 CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'name', TRUE);
59 CRM_Core_PseudoConstant::activityType(TRUE, TRUE, TRUE, 'name');
60
61 $this->_entity = 'Membership';
62 $this->_params = array(
63 'contact_id' => $this->_contactID,
64 'membership_type_id' => $this->_membershipTypeID,
65 'join_date' => '2009-01-21',
66 'start_date' => '2009-01-21',
67 'end_date' => '2009-12-21',
68 'source' => 'Payment',
69 'is_override' => 1,
70 'status_id' => $this->_membershipStatusID,
71 'version' => 3,
72 );
73 }
74
75 function tearDown() {
76 $this->quickCleanup(array(
77 'civicrm_membership',
78 'civicrm_membership_payment')
79 );
80 $this->membershipStatusDelete($this->_membershipStatusID);
81 $this->membershipTypeDelete(array('id' => $this->_membershipTypeID));
82 $this->contactDelete($this->_contactID);
83
84 }
85
86 /**
87 * Test civicrm_membership_delete()
88 */
89 function testMembershipDelete() {
90 $membershipID = $this->contactMembershipCreate($this->_params);
91 $params = array(
92 'id' => $membershipID,
93 'version' => $this->_apiversion,
94 );
95 $result = civicrm_api('membership', 'delete', $params);
96 $this->documentMe($params, $result, __FUNCTION__, __FILE__);
97 $this->assertAPISuccess($result, "In line " . __LINE__);
98 }
99
100 function testMembershipDeleteEmpty() {
101 $params = array();
102 $result = civicrm_api('membership', 'delete', $params);
103 $this->assertAPIFailure($result);
104 }
105
106 function testMembershipDeleteInvalidID() {
107 $params = array('version' => $this->_apiversion, 'id' => 'blah');
108 $result = civicrm_api('membership', 'delete', $params);
109 $this->assertAPIFailure($result);
110 }
111
112 /**
113 * Test civicrm_membership_delete() with invalid Membership Id
114 */
115 function testMembershipDeleteWithInvalidMembershipId() {
116 $membershipId = 'membership';
117 $result = civicrm_api('membership', 'delete', $membershipId);
118 $this->assertAPIFailure($result,
119 "In line " . __LINE__
120 );
121 }
122
123 /**
124 * All other methods calls MembershipType and MembershipContact
125 * api, but putting simple test methods to control existence of
126 * these methods for backwards compatibility, also verifying basic
127 * behaviour is the same as new methods.
128 */
129 function testContactMembershipsGet() {
130 $this->_membershipID = $this->contactMembershipCreate($this->_params);
131 $params = array('version' => $this->_apiversion);
132 $result = civicrm_api('membership', 'get', $params);
133 $this->assertEquals(0, $result['is_error'], "In line " . __LINE__);
134 $result = civicrm_api('Membership', 'Delete', array(
135 'id' => $this->_membershipID,
136 'version' => $this->_apiversion,
137 ));
138 }
139
140 /**
141 * Test civicrm_membership_get with params not array.
142 * Gets treated as contact_id, memberships expected.
143 */
144 function testGetWithParamsContactId() {
145 $this->_membershipID = $this->contactMembershipCreate($this->_params);
146 $params = array(
147 'contact_id' => $this->_contactID,
148 'version' => $this->_apiversion,
149 );
150 $membership = civicrm_api('membership', 'get', $params);
151
152 $result = $membership['values'][$this->_membershipID];
153 civicrm_api('Membership', 'Delete', array(
154 'id' => $this->_membershipID,
155 'version' => $this->_apiversion,
156 ));
157 $this->assertEquals($result['contact_id'], $this->_contactID, "In line " . __LINE__);
158 $this->assertEquals($result['membership_type_id'], $this->_membershipTypeID, "In line " . __LINE__);
159 $this->assertEquals($result['status_id'], $this->_membershipStatusID, "In line " . __LINE__);
160 $this->assertEquals($result['join_date'], '2009-01-21', "In line " . __LINE__);
161 $this->assertEquals($result['start_date'], '2009-01-21', "In line " . __LINE__);
162 $this->assertEquals($result['end_date'], '2009-12-21', "In line " . __LINE__);
163 $this->assertEquals($result['source'], 'Payment', "In line " . __LINE__);
164 $this->assertEquals($result['is_override'], 1, "In line " . __LINE__);
165 }
166
167 /**
168 * Test civicrm_membership_get with params not array.
169 * Gets treated as contact_id, memberships expected.
170 */
171 function testGetWithParamsMemberShipTypeId() {
172 $result = civicrm_api($this->_entity, 'create', $this->_params);
173 $params = array(
174 'membership_type_id' => $this->_membershipTypeID,
175 'version' => $this->_apiversion,
176 );
177 $membership = civicrm_api('membership', 'get', $params);
178 $result = civicrm_api('Membership', 'Delete', array(
179 'id' => $membership['id'],
180 'version' => $this->_apiversion,
181 ));
182 $result = $membership['values'][$membership['id']];
183 $this->assertEquals($result['contact_id'], $this->_contactID, "In line " . __LINE__);
184 $this->assertEquals($result['membership_type_id'], $this->_membershipTypeID, "In line " . __LINE__);
185 $this->assertEquals($result['status_id'], $this->_membershipStatusID, "In line " . __LINE__);
186 $this->assertEquals($result['join_date'], '2009-01-21', "In line " . __LINE__);
187 $this->assertEquals($result['start_date'], '2009-01-21', "In line " . __LINE__);
188 $this->assertEquals($result['end_date'], '2009-12-21', "In line " . __LINE__);
189 $this->assertEquals($result['source'], 'Payment', "In line " . __LINE__);
190 $this->assertEquals($result['is_override'], 1, "In line " . __LINE__);
191 $this->assertEquals($result['id'], $membership['id']);
192 }
193
194 /**
195 * Test civicrm_membership_get with params not array.
196 * Gets treated as contact_id, memberships expected.
197 */
198 function testGetWithNonExistantMemberShipTypeId() {
199 $this->_membershipID = $this->contactMembershipCreate($this->_params);
200 $params = array(
201 'membership_type_id' => 465653,
202 'version' => $this->_apiversion,
203 );
204 $result = civicrm_api('membership', 'get', $params);
205 civicrm_api('Membership', 'Delete', array(
206 'id' => $this->_membershipID,
207 'version' => $this->_apiversion,
208 ));
209
210 $this->assertAPISuccess($result, "In line " . __LINE__);
211 $this->assertEquals($result['count'], 0, "In line " . __LINE__);
212 civicrm_api('Membership', 'Delete', array(
213 'id' => $this->_membershipID,
214 'version' => $this->_apiversion,
215 ));
216 }
217
218 /**
219 * check with complete array + custom field
220 * Note that the test is written on purpose without any
221 * variables specific to participant so it can be replicated into other entities
222 * and / or moved to the automated test suite
223 */
224 function testGetWithParamsMemberShipIdAndCustom() {
225 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__, __FILE__);
226
227 $params = $this->_params;
228 $params['custom_' . $ids['custom_field_id']] = "custom string";
229
230 $result = civicrm_api($this->_entity, 'create', $params);
231
232 $this->assertAPISuccess($result, ' in line ' . __LINE__);
233 $getParams = array('version' => 3, 'membership_type_id' => $params['membership_type_id']);
234 $check = civicrm_api($this->_entity, 'get', $getParams);
235 $this->documentMe($getParams, $check, __FUNCTION__, __FILE__);
236 $this->assertEquals("custom string", $check['values'][$result['id']]['custom_' . $ids['custom_field_id']], ' in line ' . __LINE__);
237
238 $this->customFieldDelete($ids['custom_field_id']);
239 $this->customGroupDelete($ids['custom_group_id']);
240 $result = civicrm_api('Membership', 'Delete', array(
241 'id' => $result['id'],
242 'version' => $this->_apiversion,
243 ));
244 }
245
246 /**
247 * Test civicrm_membership_get with proper params.
248 * Memberships expected.
249 */
250 function testGet() {
251 $membershipID = $this->contactMembershipCreate($this->_params);
252 $params = array(
253 'contact_id' => $this->_contactID,
254 'version' => $this->_apiversion,
255 );
256
257 $membership = civicrm_api('membership', 'get', $params);
258 //$this->documentMe($params,$membership,__FUNCTION__,__FILE__);
259 $result = $membership['values'][$membershipID];
260 civicrm_api('Membership', 'Delete', array(
261 'id' => $membership['id'],
262 'version' => $this->_apiversion,
263 ));
264 $this->assertEquals($result['join_date'], '2009-01-21', "In line " . __LINE__);
265 $this->assertEquals($result['contact_id'], $this->_contactID, "In line " . __LINE__);
266 $this->assertEquals($result['membership_type_id'], $this->_membershipTypeID, "In line " . __LINE__);
267 $this->assertEquals($result['status_id'], $this->_membershipStatusID, "In line " . __LINE__);
268
269 $this->assertEquals($result['start_date'], '2009-01-21', "In line " . __LINE__);
270 $this->assertEquals($result['end_date'], '2009-12-21', "In line " . __LINE__);
271 $this->assertEquals($result['source'], 'Payment', "In line " . __LINE__);
272 $this->assertEquals($result['is_override'], 1, "In line " . __LINE__);
273 }
274
275
276 /**
277 * Test civicrm_membership_get with proper params.
278 * Memberships expected.
279 */
280 function testGetWithId() {
281 $membershipID = $this->contactMembershipCreate($this->_params);
282 $params = array(
283 'contact_id' => $this->_contactID,
284 'version' => $this->_apiversion,
285 'id' => $this->__membershipID,
286 'return' => 'id',
287 );
288 $result = civicrm_api('membership', 'get', $params);
289 $this->assertAPISuccess($result);
290 $this->assertEquals($membershipID, $result['id']);
291 $params = array(
292 'contact_id' => $this->_contactID,
293 'version' => $this->_apiversion,
294 'membership_id' => $this->__membershipID,
295 'return' => 'membership_id',
296 );
297 $result = civicrm_api('membership', 'get', $params);
298 $this->assertAPISuccess($result);
299 $this->assertEquals($membershipID, $result['id']);
300 civicrm_api('Membership', 'Delete', array(
301 'id' => $result['id'],
302 'version' => $this->_apiversion,
303 ));
304 }
305
306 /**
307 * Test civicrm_membership_get for only active.
308 * Memberships expected.
309 */
310 function testGetOnlyActive() {
311 $description = "Demonstrates use of 'filter' active_only' param";
312 $this->_membershipID = $this->contactMembershipCreate($this->_params);
313 $subfile = 'filterIsCurrent';
314 $params = array(
315 'contact_id' => $this->_contactID,
316 'active_only' => 1,
317 'version' => $this->_apiversion,
318 );
319
320 $membership = civicrm_api('membership', 'get', $params);
321 $result = $membership['values'][$this->_membershipID];
322 $this->assertEquals($membership['values'][$this->_membershipID]['status_id'], $this->_membershipStatusID, "In line " . __LINE__);
323 $this->assertEquals($membership['values'][$this->_membershipID]['contact_id'], $this->_contactID, "In line " . __LINE__);
324 $params = array(
325 'contact_id' => $this->_contactID,
326 'filters' => array(
327 'is_current' => 1,
328 ),
329 'version' => $this->_apiversion,
330 );
331
332 $membership = civicrm_api('membership', 'get', $params);
333 $this->documentMe($params, $membership, __FUNCTION__, __FILE__, $description, $subfile);
334 $result = $membership['values'][$this->_membershipID];
335 $this->assertEquals($membership['values'][$this->_membershipID]['status_id'], $this->_membershipStatusID, "In line " . __LINE__);
336 $this->assertEquals($membership['values'][$this->_membershipID]['contact_id'], $this->_contactID, "In line " . __LINE__);
337
338
339 $result = civicrm_api('Membership', 'Delete', array(
340 'id' => $this->_membershipID,
341 'version' => $this->_apiversion,
342 ));
343 }
344
345 /**
346 * Test civicrm_membership_get for non exist contact.
347 * empty Memberships.
348 */
349 function testGetNoContactExists() {
350 $params = array(
351 'contact_id' => 55555,
352 'version' => $this->_apiversion,
353 );
354
355 $membership = civicrm_api('membership', 'get', $params);
356 $this->assertEquals($membership['count'], 0, "In line " . __LINE__);
357 }
358
359 /**
360 * Test civicrm_membership_get with relationship.
361 * get Memberships.
362 */
363 function testGetWithRelationship() {
364 $membershipOrgId = $this->organizationCreate(NULL);
365 $memberContactId = $this->individualCreate(NULL);
366
367 $relTypeParams = array(
368 'name_a_b' => 'Relation 1',
369 'name_b_a' => 'Relation 2',
370 'description' => 'Testing relationship type',
371 'contact_type_a' => 'Organization',
372 'contact_type_b' => 'Individual',
373 'is_reserved' => 1,
374 'is_active' => 1,
375 'version' => $this->_apiversion,
376 );
377 $relTypeID = $this->relationshipTypeCreate($relTypeParams);
378
379 $params = array(
380 'name' => 'test General',
381 'duration_unit' => 'year',
382 'duration_interval' => 1,
383 'period_type' => 'rolling',
384 'member_of_contact_id' => $membershipOrgId,
385 'domain_id' => 1,
386 'financial_type_id' => 1,
387 'relationship_type_id' => $relTypeID,
388 'relationship_direction' => 'b_a',
389 'is_active' => 1,
390 'version' => $this->_apiversion,
391 );
392 $memType = civicrm_api('membership_type', 'create', $params);
393
394 $params = array(
395 'contact_id' => $memberContactId,
396 'membership_type_id' => $memType['id'],
397 'join_date' => '2009-01-21',
398 'start_date' => '2009-01-21',
399 'end_date' => '2009-12-21',
400 'source' => 'Payment',
401 'is_override' => 1,
402 'status_id' => $this->_membershipStatusID,
403 'version' => $this->_apiversion,
404 );
405 $membershipID = $this->contactMembershipCreate($params);
406
407 $params = array(
408 'contact_id' => $memberContactId,
409 'membership_type_id' => $memType['id'],
410 'version' => $this->_apiversion,
411 );
412
413 $result = civicrm_api('membership', 'get', $params);
414
415 $membership = $result['values'][$membershipID];
416 $this->assertEquals($this->_membershipStatusID, $membership['status_id'],
417 "In line " . __LINE__
418 );
419 $result = civicrm_api('Membership', 'Delete', array(
420 'id' => $membership['id'],
421 'version' => $this->_apiversion,
422 ));
423 $this->membershipTypeDelete(array('id' => $memType['id']));
424 $this->relationshipTypeDelete($relTypeID);
425 $this->contactDelete($membershipOrgId);
426 $this->contactDelete($memberContactId);
427 }
428
429 ///////////////// civicrm_membership_create methods
430
431 /**
432 * Test civicrm_contact_memberships_create with empty params.
433 * Error expected.
434 */
435 function testCreateWithEmptyParams() {
436 $params = array();
437 $result = civicrm_api('membership', 'create', $params);
438 $this->assertAPIFailure($result);
439 }
440
441 /**
442 * Test civicrm_contact_memberships_create with params with wrong type.
443 * Error expected.
444 */
445 function testCreateWithParamsString() {
446 $params = 'a string';
447 $result = civicrm_api('membership', 'create', $params);
448 $this->assertAPIFailure($result,
449 "In line " . __LINE__
450 );
451 }
452 /*
453 * If is_overide is passed in status must also be passed in
454 */
455 function testCreateOverrideNoStatus() {
456 $params = $this->_params;
457 unset($params['status_id']);
458 $result = civicrm_api('membership', 'create', $params);
459 $this->assertAPIFailure($result,
460 "In line " . __LINE__
461 );
462 }
463
464 function testMembershipCreateMissingRequired() {
465 $params = array(
466 'membership_type_id' => '1',
467 'join_date' => '2006-01-21',
468 'start_date' => '2006-01-21',
469 'end_date' => '2006-12-21',
470 'source' => 'Payment',
471 'status_id' => '2',
472 'version' => $this->_apiversion,
473 );
474
475 $result = civicrm_api('membership', 'create', $params);
476 $this->assertAPIFailure($result);
477 }
478
479 function testMembershipCreate() {
480 $params = array(
481 'contact_id' => $this->_contactID,
482 'membership_type_id' => $this->_membershipTypeID,
483 'join_date' => '2006-01-21',
484 'start_date' => '2006-01-21',
485 'end_date' => '2006-12-21',
486 'source' => 'Payment',
487 'is_override' => 1,
488 'status_id' => $this->_membershipStatusID,
489 'version' => $this->_apiversion,
490 );
491
492 $result = civicrm_api('membership', 'create', $params);
493 $this->documentMe($params, $result, __FUNCTION__, __FILE__);
494 $this->getAndCheck($params, $result['id'], $this->_entity);
495 $this->assertAPISuccess($result);
496 $this->assertNotNull($result['id']);
497 $this->assertEquals($this->_contactID, $result['values'][$result['id']]['contact_id'], " in line " . __LINE__);
498 $this->assertEquals($result['id'], $result['values'][$result['id']]['id'], " in line " . __LINE__);
499 }
500 /*
501 * Check for useful message if contact doesn't exist
502 */
503 function testMembershipCreateWithInvalidContact() {
504 $params = array(
505 'contact_id' => 999,
506 'membership_type_id' => $this->_membershipTypeID,
507 'join_date' => '2006-01-21',
508 'start_date' => '2006-01-21',
509 'end_date' => '2006-12-21',
510 'source' => 'Payment',
511 'is_override' => 1,
512 'status_id' => $this->_membershipStatusID,
513 'version' => $this->_apiversion,
514 );
515
516 $result = civicrm_api('membership', 'create', $params);
517 $this->assertEquals('contact_id is not valid : 999', $result['error_message']);
518 }
519 function testMembershipCreateWithInvalidStatus() {
520 $params = $this->_params;
521 $params['status_id'] = 999;
522
523 $result = civicrm_api('membership', 'create', $params);
524 $this->assertEquals('status_id is not valid : 999', $result['error_message']);
525 }
526
527 function testMembershipCreateWithInvalidType() {
528 $params = $this->_params;
529 $params['membership_type_id'] = 999;
530
531 $result = civicrm_api('membership', 'create', $params);
532 $this->assertEquals('membership_type_id is not valid : 999', $result['error_message']);
533 }
534
535 /**
536 * check with complete array + custom field
537 * Note that the test is written on purpose without any
538 * variables specific to participant so it can be replicated into other entities
539 * and / or moved to the automated test suite
540 */
541 function testCreateWithCustom() {
542 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__, __FILE__);
543
544 $params = $this->_params;
545 $params['custom_' . $ids['custom_field_id']] = "custom string";
546
547 $result = civicrm_api($this->_entity, 'create', $params);
548 $this->documentMe($params, $result, __FUNCTION__, __FILE__);
549 $this->assertAPISuccess($result, ' in line ' . __LINE__);
550
551 $check = civicrm_api($this->_entity, 'get', array('version' => 3, 'id' => $result['id'], 'contact_id' => $this->_contactID));
552 $this->assertEquals("custom string", $check['values'][$result['id']]['custom_' . $ids['custom_field_id']], ' in line ' . __LINE__);
553 $this->customFieldDelete($ids['custom_field_id']);
554 $this->customGroupDelete($ids['custom_group_id']);
555 civicrm_api('Membership', 'Delete', array(
556 'id' => $result['id'],
557 'version' => $this->_apiversion,
558 ));
559 }
560
561 /**
562 * Test civicrm_contact_memberships_create with membership id (edit
563 * membership).
564 * success expected.
565 */
566 function testMembershipCreateWithId() {
567 $membershipID = $this->contactMembershipCreate($this->_params);
568 $params = array(
569 'id' => $membershipID,
570 'contact_id' => $this->_contactID,
571 'membership_type_id' => $this->_membershipTypeID,
572 'join_date' => '2006-01-21',
573 'start_date' => '2006-01-21',
574 'end_date' => '2006-12-21',
575 'source' => 'Payment',
576 'is_override' => 1,
577 'status_id' => $this->_membershipStatusID,
578 'version' => $this->_apiversion,
579 );
580
581 $result = civicrm_api('membership', 'create', $params);
582 civicrm_api('Membership', 'Delete', array(
583 'id' => $result['id'],
584 'version' => $this->_apiversion,
585 ));
586 $this->assertAPISuccess($result, "in line " . __LINE__);
587 $this->assertEquals($result['id'], $membershipID, "in line " . __LINE__);
588 }
589
590 /**
591 * Test civicrm_contact_memberships_create with membership id (edit
592 * membership).
593 * success expected.
594 */
595 function testMembershipCreateUpdateWithIdNoContact() {
596 $membershipID = $this->contactMembershipCreate($this->_params);
597 $params = array(
598 'id' => $membershipID,
599 'membership_type_id' => $this->_membershipTypeID,
600 'contact_id' => $this->_contactID,
601 'join_date' => '2006-01-21',
602 'start_date' => '2006-01-21',
603 'end_date' => '2006-12-21',
604 'source' => 'Payment',
605 'is_override' => 1,
606 'status_id' => $this->_membershipStatusID,
607 'version' => $this->_apiversion,
608 );
609
610 $result = civicrm_api('membership', 'create', $params);
611 civicrm_api('Membership', 'Delete', array(
612 'id' => $result['id'],
613 'version' => $this->_apiversion,
614 ));
615 $this->assertAPISuccess($result, "in line " . __LINE__);
616 $this->assertEquals($result['id'], $membershipID, "in line " . __LINE__);
617 }
618
619 /**
620 * Test civicrm_contact_memberships_create with membership id (edit
621 * membership).
622 * success expected.
623 */
624 function testMembershipCreateUpdateWithIdNoDates() {
625 $membershipID = $this->contactMembershipCreate($this->_params);
626 $params = array(
627 'id' => $membershipID,
628 'contact_id' => $this->_contactID,
629 'membership_type_id' => $this->_membershipTypeID,
630 'source' => 'Payment',
631 'is_override' => 1,
632 'status_id' => $this->_membershipStatusID,
633 'version' => $this->_apiversion,
634 );
635
636 $result = civicrm_api('membership', 'create', $params);
637 civicrm_api('Membership', 'Delete', array(
638 'id' => $result['id'],
639 'version' => $this->_apiversion,
640 ));
641 $this->assertAPISuccess($result, "in line " . __LINE__);
642 $this->assertEquals($result['id'], $membershipID, "in line " . __LINE__);
643 }
644
645 /**
646 * Test civicrm_contact_memberships_create with membership id (edit
647 * membership).
648 * success expected.
649 */
650 function testMembershipCreateUpdateWithIdNoDatesNoType() {
651 $membershipID = $this->contactMembershipCreate($this->_params);
652 $params = array(
653 'id' => $membershipID,
654 'source' => 'not much here',
655 'contact_id' => $this->_contactID,
656 'is_override' => 1,
657 'status_id' => $this->_membershipStatusID,
658 'version' => $this->_apiversion,
659 );
660
661 $result = civicrm_api('membership', 'create', $params);
662 civicrm_api('Membership', 'Delete', array(
663 'id' => $result['id'],
664 'version' => $this->_apiversion,
665 ));
666 $this->assertAPISuccess($result, "in line " . __LINE__);
667 $this->assertEquals($result['id'], $membershipID, "in line " . __LINE__);
668 }
669
670 /**
671 * Test civicrm_contact_memberships_create with membership id (edit
672 * membership).
673 * success expected.
674 */
675 function testMembershipCreateUpdateWithIDAndSource() {
676 $membershipID = $this->contactMembershipCreate($this->_params);
677 $params = array(
678 'id' => $membershipID,
679 'source' => 'changed',
680 'contact_id' => $this->_contactID,
681 'status_id' => $this->_membershipStatusID,
682 'version' => $this->_apiversion,
683 'membership_type_id' => $this->_membershipTypeID,
684 'skipStatusCal' => 1,
685 );
686 $result = civicrm_api('membership', 'create', $params);
687 $this->assertAPISuccess($result, "in line " . __LINE__);
688 $this->assertEquals($result['id'], $membershipID, "in line " . __LINE__);
689 civicrm_api('Membership', 'Delete', array(
690 'id' => $result['id'],
691 'version' => $this->_apiversion,
692 ));
693 }
694
695 /**
696 * change custom field using update
697 */
698 function testUpdateWithCustom() {
699 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__, __FILE__);
700
701 $params = $this->_params;
702 $params['custom_' . $ids['custom_field_id']] = "custom string";
703 $result = civicrm_api($this->_entity, 'create', $params);
704
705 $this->documentMe($params, $result, __FUNCTION__, __FILE__);
706 $this->assertAPISuccess($result, ' in line ' . __LINE__);
707 $result = civicrm_api($this->_entity, 'create', array('id' => $result['id'], 'version' => 3, 'custom_' . $ids['custom_field_id'] => "new custom"));
708 $this->assertAPISuccess($result, ' in line ' . __LINE__);
709 $check = civicrm_api($this->_entity, 'get', array('version' => 3, 'id' => $result['id'], 'contact_id' => $this->_contactID));
710
711 $this->assertEquals("new custom", $check['values'][$result['id']]['custom_' . $ids['custom_field_id']], ' in line ' . __LINE__);
712 $delete = civicrm_api('Membership', 'Delete', array(
713 'id' => $check['id'],
714 'version' => $this->_apiversion,
715 ));
716
717 $this->customFieldDelete($ids['custom_field_id']);
718 $this->customGroupDelete($ids['custom_group_id']);
719 }
720
721 /**
722 * Test civicrm_contact_memberships_create Invalid membership data
723 * Error expected.
724 */
725 function testMembershipCreateInvalidMemData() {
726 //membership_contact_id as string
727 $params = array(
728 'membership_contact_id' => 'Invalid',
729 'membership_type_id' => $this->_membershipTypeID,
730 'join_date' => '2011-01-21',
731 'start_date' => '2010-01-21',
732 'end_date' => '2008-12-21',
733 'source' => 'Payment',
734 'is_override' => 1,
735 'status_id' => $this->_membershipStatusID,
736 'version' => $this->_apiversion,
737 );
738
739 $result = civicrm_api('membership', 'create', $params);
740 $this->assertAPIFailure($result, "in line " . __LINE__);
741
742 //membership_contact_id which is no in contact table
743 $params['membership_contact_id'] = 999;
744 $result = civicrm_api('membership', 'create', $params);
745 $this->assertAPIFailure($result, "in line " . __LINE__);
746
747 //invalid join date
748 unset($params['membership_contact_id']);
749 $params['join_date'] = "invalid";
750 $result = civicrm_api('Membership', 'Create', $params);
751 $this->assertAPIFailure($result, "in line " . __LINE__);
752 }
753
754 /**
755 * Test civicrm_contact_memberships_create with membership_contact_id
756 * membership).
757 * Success expected.
758 */
759 function testMembershipCreateWithMemContact() {
760 $params = array(
761 'membership_contact_id' => $this->_contactID,
762 'membership_type_id' => $this->_membershipTypeID,
763 'join_date' => '2011-01-21',
764 'start_date' => '2010-01-21',
765 'end_date' => '2008-12-21',
766 'source' => 'Payment',
767 'is_override' => 1,
768 'status_id' => $this->_membershipStatusID,
769 'version' => $this->_apiversion,
770 );
771
772 $result = civicrm_api('membership', 'create', $params);
773
774 $this->assertAPISuccess($result, ' in line ' . __LINE__);
775 $result = civicrm_api('Membership', 'Delete', array(
776 'id' => $result['id'],
777 'version' => $this->_apiversion,
778 ));
779 }
780
781 ///////////////// civicrm_membership_delete methods
782 }
783