3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
13 * Test APIv3 civicrm_contribute_* functions
15 * @package CiviCRM_APIv3
16 * @subpackage API_Contribution
19 class CRM_Contribute_Form_Contribution_ConfirmTest
extends CiviUnitTestCase
{
24 public function tearDown() {
25 $this->quickCleanUpFinancialEntities();
29 * CRM-21200: Test that making online payment for pending contribution doesn't overwite the contribution details
31 public function testPaynowPayment() {
32 $contactID = $this->individualCreate();
33 $paymentProcessorID = $this->paymentProcessorCreate(['payment_processor_type_id' => 'Dummy']);
35 // create a contribution page which is later used to make pay-later contribution
36 $result = $this->callAPISuccess('ContributionPage', 'create', [
37 'title' => 'Test Contribution Page',
38 'financial_type_id' => CRM_Core_PseudoConstant
::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Campaign Contribution'),
40 'financial_account_id' => 1,
41 'payment_processor' => $paymentProcessorID,
43 'is_allow_other_amount' => 1,
47 $contributionPageID1 = $result['id'];
48 // create pending contribution
49 $contribution = $this->callAPISuccess('Contribution', 'create', [
50 'contact_id' => $contactID,
51 'financial_type_id' => CRM_Core_PseudoConstant
::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Campaign Contribution'),
53 'total_amount' => 100.00,
54 'contribution_status_id' => CRM_Core_PseudoConstant
::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Pending'),
55 'contribution_page_id' => $contributionPageID1,
56 'source' => 'backoffice pending contribution',
59 // create a contribution page which is later used to make online payment for pending contribution
60 $result = $this->callAPISuccess('ContributionPage', 'create', [
61 'title' => 'Test Contribution Page',
62 'financial_type_id' => CRM_Core_PseudoConstant
::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Campaign Contribution'),
64 'financial_account_id' => 1,
65 'payment_processor' => $paymentProcessorID,
67 'is_allow_other_amount' => 1,
71 $form = new CRM_Contribute_Form_Contribution_Confirm();
72 $contributionPageID2 = $result['id'];
73 $form->_id
= $contributionPageID2;
74 $form->_values
= $result['values'][$contributionPageID2];
75 $form->_paymentProcessor
= [
76 'id' => $paymentProcessorID,
77 'billing_mode' => CRM_Core_Payment
::BILLING_MODE_FORM
,
78 'object' => Civi\Payment\System
::singleton()->getById($paymentProcessorID),
80 'payment_instrument_id' => CRM_Core_PseudoConstant
::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Credit card'),
83 'qfKey' => 'donotcare',
84 'contribution_id' => $contribution['id'],
85 'credit_card_number' => 4111111111111111,
87 'credit_card_exp_date' => [
91 'credit_card_type' => 'Visa',
92 'email-5' => 'test@test.com',
93 'total_amount' => 100.00,
94 'payment_processor_id' => $paymentProcessorID,
99 'currencyID' => 'USD',
101 'invoiceID' => '6e443672a9bb2198cc12f076aed70e7a',
102 'is_quick_config' => 1,
103 'description' => $contribution['values'][$contribution['id']]['source'],
107 $processConfirmResult = CRM_Contribute_BAO_Contribution_Utils
::processConfirm($form,
110 $form->_values
['financial_type_id'],
114 // Make sure that certain parameters are set on return from processConfirm
115 $this->assertEquals($form->_values
['financial_type_id'], $processConfirmResult['financial_type_id']);
117 // Based on the processed contribution, complete transaction which update the contribution status based on payment result.
118 if (!empty($processConfirmResult['contribution'])) {
119 $this->callAPISuccess('contribution', 'completetransaction', [
120 'id' => $processConfirmResult['contribution']->id
,
121 'trxn_date' => date('Y-m-d'),
122 'payment_processor_id' => $paymentProcessorID,
126 $contribution = $this->callAPISuccessGetSingle('Contribution', [
127 'id' => $form->_params
['contribution_id'],
129 'contribution_page_id',
130 'contribution_status',
131 'contribution_source',
135 // check that contribution page ID isn't changed
136 $this->assertEquals($contributionPageID1, $contribution['contribution_page_id']);
137 // check that paid later information is present in contribution's source
138 $this->assertRegExp("/Paid later via page ID: $contributionPageID2/", $contribution['contribution_source']);
139 // check that contribution status is changed to 'Completed' from 'Pending'
140 $this->assertEquals('Completed', $contribution['contribution_status']);
142 //delete contribution.
143 $this->callAPISuccess('contribution', 'delete', [
144 'id' => $processConfirmResult['contribution']->id
,
147 //Process on behalf contribution.
148 unset($form->_params
['contribution_id']);
149 $form->_contactID
= $form->_values
['related_contact'] = $form->_params
['onbehalf_contact_id'] = $contactID;
150 $form->_params
['contact_id'] = $this->organizationCreate();
151 $this->callAPISuccess('Relationship', 'create', [
152 'contact_id_a' => $contactID,
153 'contact_id_b' => $form->_params
['contact_id'],
154 'relationship_type_id' => 5,
155 'is_current_employer' => 1,
157 $processConfirmResult = CRM_Contribute_BAO_Contribution_Utils
::processConfirm($form,
159 $form->_params
['onbehalf_contact_id'],
160 $form->_values
['financial_type_id'],
163 //check if contribution is created on org.
164 $contribution = $this->callAPISuccessGetSingle('Contribution', [
165 'contact_id' => $form->_params
['onbehalf_contact_id'],
168 $activity = civicrm_api3('Activity', 'get', [
170 'source_record_id' => $contribution['id'],
171 'contact_id' => $form->_params
['onbehalf_contact_id'],
172 'activity_type_id' => "Contribution",
174 $this->assertEquals(1, $activity['count']);