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_Core_Payment_BaseIPNTest
32 class CRM_Core_Payment_BaseIPNTest
extends CiviUnitTestCase
{
34 protected $_financialTypeId;
35 protected $_contributionParams;
36 protected $_contactId;
37 protected $_contributionId;
38 protected $_participantId;
41 protected $_processorId;
42 protected $_contributionRecurParams;
43 protected $_paymentProcessor;
46 * Parameters to create a membership.
50 protected $_membershipParams = array();
55 * @var CRM_Core_Payment_BaseIPN
59 protected $_membershipId;
67 protected $_membershipTypeID;
72 protected $_membershipStatusID;
73 public $DBResetRequired = FALSE;
78 public function setUp() {
80 $this->_processorId
= $this->paymentProcessorAuthorizeNetCreate(array('is_test' => 0));
81 $this->input
= $this->ids
= $this->objects
= array();
82 $this->IPN
= new CRM_Core_Payment_AuthorizeNetIPN($this->input
);
84 $this->_contactId
= $this->individualCreate();
85 $this->ids
['contact'] = $this->_contactId
;
86 $this->_financialTypeId
= 1;
88 $this->_contributionParams
= array(
89 'contact_id' => $this->_contactId
,
90 'financial_type_id' => $this->_financialTypeId
,
91 'receive_date' => date('Ymd'),
92 'total_amount' => 150.00,
93 'invoice_id' => 'c8acb91e080ad7bd8a2adc119c192885',
95 'contribution_recur_id' => $this->_recurId
,
96 'contribution_status_id' => 2,
98 $contribution = $this->callAPISuccess('contribution', 'create', $this->_contributionParams
);
99 $this->_contributionId
= $contribution['id'];
101 $contribution = new CRM_Contribute_BAO_Contribution();
102 $contribution->id
= $this->_contributionId
;
103 $contribution->find(TRUE);
104 $this->objects
['contribution'] = $contribution;
108 * Tear down after class.
110 public function tearDown() {
111 $this->quickCleanUpFinancialEntities();
112 CRM_Member_PseudoConstant
::membershipType(NULL, TRUE);
113 CRM_Member_PseudoConstant
::membershipStatus(NULL, NULL, 'name', TRUE);
117 * Test the LoadObjects function with recurring membership data.
119 public function testLoadMembershipObjects() {
120 $this->_setUpMembershipObjects();
121 $this->_setUpRecurringContribution();
122 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
123 $this->assertFalse(empty($this->objects
['membership']));
124 $this->assertArrayHasKey($this->_membershipTypeID
, $this->objects
['membership']);
125 $this->assertTrue(is_a($this->objects
['membership'][$this->_membershipTypeID
], 'CRM_Member_BAO_Membership'));
126 $this->assertTrue(is_a($this->objects
['financialType'], 'CRM_Financial_BAO_FinancialType'));
127 $this->assertFalse(empty($this->objects
['contributionRecur']));
128 $this->assertFalse(empty($this->objects
['paymentProcessor']));
132 * Test the LoadObjects function with recurring membership data.
134 public function testLoadMembershipObjectsNoLeakage() {
135 $this->_setUpMembershipObjects();
136 $this->_setUpRecurringContribution();
137 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
138 $this->assertEquals('Anthony', $this->objects
['contact']->first_name
);
140 $this->ids
['contact'] = $this->_contactId
= $this->individualCreate(array(
141 'first_name' => 'Donald',
142 'last_name' => 'Duck',
143 'email' => 'the-don@duckville.com,
145 $contribution = $this->callAPISuccess('contribution', 'create', array_merge($this->_contributionParams
, array('invoice_id' => 'abc')));
146 $this->_contributionId
= $contribution['id'];
147 $this->_setUpMembershipObjects();
148 $this->input
['invoiceID'] = 'abc';
149 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
150 $this->assertEquals('Donald', $this->objects
['contact']->first_name
);
154 * Test the LoadObjects function with recurring membership data.
156 public function testLoadMembershipObjectsLoadAll() {
157 $this->_setUpMembershipObjects();
158 $this->_setUpRecurringContribution();
159 unset($this->ids
['membership']);
160 $contribution = new CRM_Contribute_BAO_Contribution();
161 $contribution->id
= $this->_contributionId
;
162 $contribution->find(TRUE);
163 $contribution->loadRelatedObjects($this->input
, $this->ids
, TRUE);
164 $this->assertFalse(empty($contribution->_relatedObjects
['membership']));
165 $this->assertArrayHasKey($this->_membershipTypeID
, $contribution->_relatedObjects
['membership']);
166 $this->assertTrue(is_a($contribution->_relatedObjects
['membership'][$this->_membershipTypeID
], 'CRM_Member_BAO_Membership'));
167 $this->assertTrue(is_a($contribution->_relatedObjects
['financialType'], 'CRM_Financial_BAO_FinancialType'));
168 $this->assertFalse(empty($contribution->_relatedObjects
['contributionRecur']));
169 $this->assertFalse(empty($contribution->_relatedObjects
['paymentProcessor']));
173 * Test the LoadObjects function with recurring membership data.
175 public function testsendMailMembershipObjects() {
176 $this->_setUpMembershipObjects();
178 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
179 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
180 $this->assertTrue(is_array($msg), "Message returned as an array in line");
181 $this->assertEquals('Mr. Anthony Anderson II', $msg['to']);
182 $this->assertContains('<p>Please print this confirmation for your records.</p>', $msg['html']);
183 $this->assertContains('Membership Type: General', $msg['body']);
187 * Test the LoadObjects function data does not leak.
189 * If more than one iteration takes place the variables should not leak.
191 public function testSendMailMembershipObjectsNoLeakage() {
192 $this->_setUpMembershipObjects();
194 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
195 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
196 $this->assertEquals('Mr. Anthony Anderson II', $msg['to']);
197 $this->assertContains('Membership Type: General', $msg['body']);
199 $this->ids
['contact'] = $this->_contactId
= $this->individualCreate(array('prefix_id' => 'Dr.', 'first_name' => 'Donald', 'last_name' => 'Duck', 'email' => 'the-don@duckville.com'));
200 $contribution = $this->callAPISuccess('contribution', 'create', array_merge($this->_contributionParams
, array('invoice_id' => 'abc')));
201 $this->_contributionId
= $contribution['id'];
203 $this->_membershipTypeID
= $this->membershipTypeCreate(array('name' => 'Fowl'));
204 $this->_setUpMembershipObjects();
205 $this->input
['invoiceID'] = 'abc';
206 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
207 $this->assertEquals('Donald', $this->objects
['contact']->first_name
);
208 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
209 $this->assertEquals('Dr. Donald Duck II', $msg['to']);
210 $this->assertContains('Membership Type: Fowl', $msg['body']);
214 * Test the LoadObjects function with recurring membership data.
216 public function testsendMailMembershipWithoutLoadObjects() {
217 $this->_setUpMembershipObjects();
219 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
220 $this->assertTrue(is_array($msg), "Message returned as an array in line" . __LINE__
);
221 $this->assertEquals('Mr. Anthony Anderson II', $msg['to']);
222 $this->assertContains('<p>Please print this confirmation for your records.</p>', $msg['html']);
223 $this->assertContains('Membership Type: General', $msg['body']);
227 * Test that loadObjects works with participant values.
229 public function testLoadParticipantObjects() {
230 $this->_setUpParticipantObjects();
231 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
232 $this->assertFalse(empty($this->objects
['participant']));
233 $this->assertTrue(is_a($this->objects
['participant'], 'CRM_Event_BAO_Participant'));
234 $this->assertTrue(is_a($this->objects
['financialType'], 'CRM_Financial_BAO_FinancialType'));
235 $this->assertFalse(empty($this->objects
['event']));
236 $this->assertTrue(is_a($this->objects
['event'], 'CRM_Event_BAO_Event'));
237 $this->assertTrue(is_a($this->objects
['contribution'], 'CRM_Contribute_BAO_Contribution'));
238 $this->assertFalse(empty($this->objects
['event']->id
));
242 * Test the LoadObjects function with a participant.
244 public function testComposeMailParticipant() {
245 $this->_setUpParticipantObjects();
246 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
248 $this->assertFalse(empty($this->objects
['event']));
249 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
250 $this->assertContains('registration has been received and your status has been updated to Attended.', $msg['body']);
251 $this->assertContains('Annual CiviCRM meet', $msg['html']);
256 public function testComposeMailParticipantObjects() {
257 $this->_setUpParticipantObjects();
259 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
260 $this->assertTrue(is_array($msg), "Message returned as an array in line" . __LINE__
);
261 $this->assertEquals('Mr. Anthony Anderson II', $msg['to']);
262 $this->assertContains('<p>Please print this confirmation for your records.</p>', $msg['html']);
263 $this->assertContains('Thank you for your participation', $msg['body']);
267 * Test the LoadObjects function with recurring membership data.
269 public function testsendMailParticipantObjectsCheckLog() {
270 $this->_setUpParticipantObjects();
272 $mut = new CiviMailUtils($this, TRUE);
273 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
274 $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, FALSE);
275 $mut->checkMailLog(array(
276 'Thank you for your participation',
277 'Annual CiviCRM meet',
278 'Mr. Anthony Anderson II',
285 * Test the LoadObjects function with recurring membership data.
287 public function testsendMailParticipantObjectsNoMail() {
288 $this->_setUpParticipantObjects();
289 $event = new CRM_Event_BAO_Event();
290 $event->id
= $this->_eventId
;
291 $event->is_email_confirm
= FALSE;
294 $tablesToTruncate = array(
295 'civicrm_mailing_spool',
297 $this->quickCleanup($tablesToTruncate, FALSE);
298 $mut = new CiviMailUtils($this, TRUE);
299 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
300 $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, FALSE);
301 $mut->assertMailLogEmpty('no mail should have been send as event set to no confirm');
306 * Test that loadObjects works with participant values.
308 public function testLoadPledgeObjects() {
309 $this->_setUpPledgeObjects();
310 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
311 $this->assertFalse(empty($this->objects
['pledge_payment'][0]));
312 $this->assertTrue(is_a($this->objects
['financialType'], 'CRM_Financial_BAO_FinancialType'));
313 $this->assertTrue(is_a($this->objects
['contribution'], 'CRM_Contribute_BAO_Contribution'));
314 $this->assertTrue(is_a($this->objects
['pledge_payment'][0], 'CRM_Pledge_BAO_PledgePayment'));
315 $this->assertFalse(empty($this->objects
['pledge_payment'][0]->id
));
316 $this->assertEquals($this->_financialTypeId
, $this->objects
['financialType']->id
);
317 $this->assertEquals($this->_processorId
, $this->objects
['paymentProcessor']['id']);
318 $this->assertEquals($this->_contributionId
, $this->objects
['contribution']->id
);
319 $this->assertEquals($this->_contactId
, $this->objects
['contact']->id
);
320 $this->assertEquals($this->_pledgeId
, $this->objects
['pledge_payment'][0]->pledge_id
);
324 * Test that loadObjects works with participant values.
326 public function testLoadPledgeObjectsInvalidPledgeID() {
327 $this->_setUpPledgeObjects();
328 $this->ids
['pledge_payment'][0] = 0;
329 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1));
330 $this->assertArrayHasKey('error_message', $result);
331 $this->assertArrayNotHasKey('pledge_payment', $this->objects
);
332 $this->assertEquals('Could not find payment processor for contribution record: 1', $result['error_message']);
333 $this->ids
['pledge_payment'][0] = NULL;
334 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1));
335 $this->assertArrayHasKey('error_message', $result);
336 $this->assertArrayNotHasKey('pledge_payment', $this->objects
);
337 $this->assertEquals('Could not find payment processor for contribution record: 1', $result['error_message']);
338 $this->ids
['pledge_payment'][0] = '';
339 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1));
340 $this->assertArrayHasKey('error_message', $result);
341 $this->assertArrayNotHasKey('pledge_payment', $this->objects
);
342 $this->assertEquals('Could not find payment processor for contribution record: 1', $result['error_message']);
344 $this->ids
['pledge_payment'][0] = 999;
345 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, $this->_processorId
, array('return_error' => 1));
346 $this->assertArrayHasKey('error_message', $result);
347 $this->assertEquals('Could not find pledge payment record: 999', $result['error_message']);
351 * Test the LoadObjects function with a pledge.
353 public function testsendMailPledge() {
354 $this->_setUpPledgeObjects();
356 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, NULL);
357 $msg = $this->IPN
->sendMail($this->input
, $this->ids
, $this->objects
, $values, FALSE, TRUE);
358 $this->assertContains('Contribution Information', $msg['html']);
362 * Test that an error is returned if required set & no contribution page.
364 public function testRequiredWithoutProcessorID() {
365 $this->_setUpPledgeObjects();
366 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1));
367 $this->assertArrayHasKey('error_message', $result);
368 $this->assertEquals('Could not find payment processor for contribution record: 1', $result['error_message']);
369 // error is only returned if $required set to True
370 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, NULL, array('return_error' => 1));
371 $this->assertFalse(is_array($result));
372 //check that error is not returned if error checking not set
373 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('log_error' => 1));
374 $this->assertFalse(is_array($result));
378 * Test that an error is not if required set & no processor ID
380 public function testRequiredWithContributionPage() {
381 $this->_setUpContributionObjects(TRUE);
382 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1));
383 $this->assertEquals(1, $result['is_error']);
388 * Test that if part of $input the payment processor loads OK.
390 * It's preferable to pass it in as it cannot be correctly calculated.
392 public function testPaymentProcessorLoadsAsParam() {
393 $this->_setUpContributionObjects();
394 $this->input
= array_merge($this->input
, array('payment_processor_id' => $this->_processorId
));
395 $this->assertTrue($this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1)));
399 * Test that an error is returned if required set & contribution page exists
401 public function testRequiredWithContributionPageError() {
402 $this->_setUpContributionObjects();
403 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('return_error' => 1));
404 $this->assertArrayHasKey('error_message', $result);
405 $this->assertEquals('Could not find payment processor for contribution record: 1', $result['error_message']);
406 // error is only returned if $required set to True
407 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, NULL, array('return_error' => 1));
408 $this->assertFalse(is_array($result));
409 //check that error is not returned if error checking not set
410 $result = $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, TRUE, NULL, array('log_error' => 1));
411 $this->assertFalse(is_array($result));
414 public function testThatCancellingEventPaymentWillCancelAllAdditionalPendingParticipantsAndCreateCancellationActivities() {
415 $this->_setUpParticipantObjects('Pending from incomplete transaction');
416 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
417 $additionalParticipantId = $this->participantCreate(array(
418 'event_id' => $this->_eventId
,
419 'registered_by_id' => $this->_participantId
,
420 'status_id' => 'Pending from incomplete transaction',
423 $transaction = new CRM_Core_Transaction();
424 $this->IPN
->cancelled($this->objects
, $transaction);
426 $cancelledParticipantsCount = civicrm_api3('Participant', 'get', [
428 'id' => ['IN' => [$this->_participantId
, $additionalParticipantId]],
429 'status_id' => 'Cancelled',
431 $this->assertEquals(2, $cancelledParticipantsCount);
433 $cancelledActivatesCount = civicrm_api3('Activity', 'get', [
435 'activity_type_id' => 'Event Registration',
436 'subject' => ['LIKE' => '%Cancelled%'],
437 'source_record_id' => ['IN' => [$this->_participantId
, $additionalParticipantId]],
440 $this->assertEquals(2, $cancelledActivatesCount['count']);
443 public function testThatFailedEventPaymentWillCancelAllAdditionalPendingParticipantsAndCreateCancellationActivities() {
444 $this->_setUpParticipantObjects('Pending from incomplete transaction');
445 $this->IPN
->loadObjects($this->input
, $this->ids
, $this->objects
, FALSE, $this->_processorId
);
446 $additionalParticipantId = $this->participantCreate(array(
447 'event_id' => $this->_eventId
,
448 'registered_by_id' => $this->_participantId
,
449 'status_id' => 'Pending from incomplete transaction',
452 $transaction = new CRM_Core_Transaction();
453 $this->IPN
->failed($this->objects
, $transaction);
455 $cancelledParticipantsCount = civicrm_api3('Participant', 'get', [
457 'id' => ['IN' => [$this->_participantId
, $additionalParticipantId]],
458 'status_id' => 'Cancelled',
460 $this->assertEquals(2, $cancelledParticipantsCount);
462 $cancelledActivatesCount = civicrm_api3('Activity', 'get', [
464 'activity_type_id' => 'Event Registration',
465 'subject' => ['LIKE' => '%Cancelled%'],
466 'source_record_id' => ['IN' => [$this->_participantId
, $additionalParticipantId]],
469 $this->assertEquals(2, $cancelledActivatesCount['count']);
473 * Prepare for contribution Test - involving only contribution objects
475 * @param bool $contributionPage
477 public function _setUpContributionObjects($contributionPage = FALSE) {
479 $contribution = new CRM_Contribute_BAO_Contribution();
480 $contribution->id
= $this->_contributionId
;
481 $contribution->find(TRUE);
482 $contributionPageID = NULL;
484 if (!empty($contributionPage)) {
485 $dao = new CRM_Core_DAO();
486 $contribution_page = $dao->createTestObject('CRM_Contribute_DAO_ContributionPage');
487 $contribution_page->payment_processor
= 1;
488 $contribution_page->save();
489 $contribution->contribution_page_id
= $contributionPageID = $contribution_page->id
;
490 //for unknown reasons trying to do a find & save on a contribution with a receive_date set
491 // doesn't work. This seems of minimal relevance to this test so ignoring
492 // note that in tests it worked sometimes & not others - dependent on which other tests run.
493 // running all CRM_Core tests caused failure as did just the single failing test. But running
494 // just this class succeeds - because it actually doesn't do a mysql update on the following save
496 unset($contribution->receive_date
);
497 $contribution->save();
500 $this->objects
['contribution'] = $contribution;
501 $this->input
= array(
502 'component' => 'contribute',
503 'contribution_page_id' => $contributionPageID,
504 'total_amount' => 110.00,
505 'invoiceID' => "c8acb91e080ad7777a2adc119c192885",
506 'contactID' => $this->_contactId
,
507 'contributionID' => $this->objects
['contribution']->id
,
512 * Prepare for membership test.
514 public function _setUpMembershipObjects() {
516 if (!$this->_membershipTypeID
) {
517 $this->_membershipTypeID
= $this->membershipTypeCreate();
519 if (!$this->_membershipStatusID
) {
520 $this->_membershipStatusID
= $this->membershipStatusCreate('test status');
523 catch (Exception
$e) {
524 echo $e->getMessage();
526 CRM_Member_PseudoConstant
::membershipType($this->_membershipTypeID
, TRUE);
527 CRM_Member_PseudoConstant
::membershipStatus(NULL, NULL, 'name', TRUE);
528 $this->_membershipParams
= array(
529 'contact_id' => $this->_contactId
,
530 'membership_type_id' => $this->_membershipTypeID
,
531 'join_date' => '2009-01-21',
532 'start_date' => '2009-01-21',
533 'end_date' => '2009-12-21',
534 'source' => 'Payment',
536 'status_id' => $this->_membershipStatusID
,
540 $membership = $this->callAPISuccess('membership', 'create', $this->_membershipParams
);
541 if ($this->objects
['contribution']->id
!= $this->_contributionId
) {
542 $contribution = new CRM_Contribute_BAO_Contribution();
543 $contribution->id
= $this->_contributionId
;
544 $contribution->find(TRUE);
545 $this->objects
= array('contribution' => $contribution);
547 $this->_membershipId
= $membership['id'];
548 //we'll create membership payment here because to make setup more re-usable
549 $this->callAPISuccess('membership_payment', 'create', array(
550 'contribution_id' => $this->_contributionId
,
551 'membership_id' => $this->_membershipId
,
554 $this->input
= array(
555 'component' => 'contribute',
556 'total_amount' => 150.00,
557 'invoiceID' => "c8acb91e080ad7bd8a2adc119c192885",
558 'contactID' => $this->_contactId
,
559 'contributionID' => $this->_contributionId
,
560 'membershipID' => $this->_membershipId
,
563 $this->ids
['membership'] = $this->_membershipId
;
566 public function _setUpRecurringContribution() {
567 $this->_contributionRecurParams
= array(
568 'contact_id' => $this->_contactId
,
571 'frequency_unit' => 'week',
572 'frequency_interval' => 1,
574 'start_date' => date('Ymd'),
575 'create_date' => date('Ymd'),
576 'invoice_id' => 'c8acb91e080ad7bd8a2adc119c192885',
577 'contribution_status_id' => 2,
578 'financial_type_id' => $this->_financialTypeId
,
580 'payment_processor_id' => $this->_processorId
,
582 $this->_recurId
= $this->callAPISuccess('contribution_recur', 'create', $this->_contributionRecurParams
);
583 $this->_recurId
= $this->_recurId
['id'];
584 $this->input
['contributionRecurId'] = $this->_recurId
;
585 $this->ids
['contributionRecur'] = $this->_recurId
;
589 * Set up participant requirements for test.
591 * @param string $participantStatus
592 * The participant to create status
594 public function _setUpParticipantObjects($participantStatus = 'Attended') {
595 $event = $this->eventCreate(array('is_email_confirm' => 1));
597 $this->_eventId
= $event['id'];
598 $this->_participantId
= $this->participantCreate(array(
599 'event_id' => $this->_eventId
,
600 'contact_id' => $this->_contactId
,
601 'status_id' => $participantStatus,
604 $this->callAPISuccess('participant_payment', 'create', array(
605 'contribution_id' => $this->_contributionId
,
606 'participant_id' => $this->_participantId
,
609 $contribution = new CRM_Contribute_BAO_Contribution();
610 $contribution->id
= $this->_contributionId
;
611 $contribution->find();
612 $this->objects
['contribution'] = $contribution;
613 $this->input
= array(
614 'component' => 'event',
615 'total_amount' => 150.00,
616 'invoiceID' => "c8acb91e080ad7bd8a2adc119c192885",
617 'contactID' => $this->_contactId
,
618 'contributionID' => $contribution->id
,
619 'participantID' => $this->_participantId
,
622 $this->ids
['participant'] = $this->_participantId
;
623 $this->ids
['event'] = $this->_eventId
;
627 * Set up participant requirements for test.
629 public function _setUpPledgeObjects() {
630 $this->_pledgeId
= $this->pledgeCreate(array('contact_id' => $this->_contactId
));
631 //we'll create membership payment here because to make setup more re-usable
632 $pledgePayment = $this->callAPISuccess('pledge_payment', 'create', array(
634 'pledge_id' => $this->_pledgeId
,
635 'contribution_id' => $this->_contributionId
,
637 'actual_amount' => 50,
640 $this->input
= array(
641 'component' => 'contribute',
642 'total_amount' => 150.00,
643 'invoiceID' => "c8acb91e080ad7bd8a2adc119c192885",
644 'contactID' => $this->_contactId
,
645 'contributionID' => $this->_contributionId
,
646 'pledgeID' => $this->_pledgeId
,
649 $this->ids
['pledge_payment'][] = $pledgePayment['id'];