Commit | Line | Data |
---|---|---|
e3a78cba | 1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
7d61e75f | 4 | | Copyright CiviCRM LLC. All rights reserved. | |
e3a78cba | 5 | | | |
7d61e75f TO |
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 | | |
e3a78cba | 9 | +--------------------------------------------------------------------+ |
10 | */ | |
11 | ||
12 | /** | |
13 | * Test PaymentEdit form submission | |
14 | */ | |
15 | class CRM_Financial_Form_PaymentEditTest extends CiviUnitTestCase { | |
16 | ||
17 | protected $_individualID; | |
18 | ||
19 | /** | |
20 | * Setup function. | |
21 | */ | |
5d345864 | 22 | public function setUp(): void { |
e3a78cba | 23 | parent::setUp(); |
24 | $this->createLoggedInUser(); | |
25 | ||
26 | $this->_individualID = $this->individualCreate(); | |
27 | } | |
28 | ||
29 | /** | |
30 | * Clean up after each test. | |
d8a1b674 | 31 | * |
e3a78cba | 32 | */ |
dd09ee0c | 33 | public function tearDown(): void { |
e3a78cba | 34 | $this->quickCleanUpFinancialEntities(); |
9099cab3 | 35 | $this->quickCleanup(['civicrm_note', 'civicrm_uf_match', 'civicrm_address']); |
f8c56ac7 | 36 | parent::tearDown(); |
e3a78cba | 37 | } |
38 | ||
39 | /** | |
40 | * Test the submit function of payment edit form. | |
d8a1b674 | 41 | * |
42 | * @throws \CRM_Core_Exception | |
43 | * @throws \CiviCRM_API3_Exception | |
44 | * @throws \Civi\Payment\Exception\PaymentProcessorException | |
e3a78cba | 45 | */ |
d8a1b674 | 46 | public function testSubmitOnPaymentInstrumentChange(): void { |
e3a78cba | 47 | // First create a contribution using 'Check' as payment instrument |
f8c56ac7 | 48 | $form = $this->getFormObject('CRM_Contribute_Form_Contribution', [ |
e3a78cba | 49 | 'total_amount' => 50, |
6298b166 | 50 | 'receive_date' => '2015-04-21 23:27:00', |
e3a78cba | 51 | 'financial_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Donation'), |
e3a78cba | 52 | 'contact_id' => $this->_individualID, |
650b79b4 | 53 | 'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check'), |
e3a78cba | 54 | 'check_number' => '123XA', |
55 | 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'), | |
f8c56ac7 | 56 | ]); |
27551048 | 57 | $form->buildForm(); |
f8c56ac7 | 58 | $form->postProcess(); |
e3a78cba | 59 | // fetch the financial trxn record later used in setting default values of payment edit form |
9099cab3 | 60 | $contribution = $this->callAPISuccessGetSingle('Contribution', ['contact_id' => $this->_individualID]); |
e3a78cba | 61 | $payments = CRM_Contribute_BAO_Contribution::getPaymentInfo($contribution['id'], 'contribute', TRUE); |
62 | $financialTrxnInfo = $payments['transaction'][0]; | |
63 | ||
64 | // build parameters which changed payment instrument and tran date values | |
9099cab3 | 65 | $params = [ |
e3a78cba | 66 | 'id' => $financialTrxnInfo['id'], |
67 | 'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Credit Card'), | |
68 | 'card_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Financial_DAO_FinancialTrxn', 'card_type_id', 'Visa'), | |
69 | 'pan_truncation' => 1111, | |
f8c56ac7 | 70 | 'trxn_id' => 'txn_12', |
e3a78cba | 71 | 'trxn_date' => date('Y-m-d H:i:s'), |
72 | 'contribution_id' => $contribution['id'], | |
9099cab3 | 73 | ]; |
e3a78cba | 74 | $form = new CRM_Financial_Form_PaymentEdit(); |
75 | $form->testSubmit($params); | |
76 | $payments = CRM_Contribute_BAO_Contribution::getPaymentInfo($contribution['id'], 'contribute', TRUE); | |
9099cab3 CW |
77 | $expectedPaymentParams = [ |
78 | [ | |
e3a78cba | 79 | 'total_amount' => 50.00, |
f70a8e69 | 80 | 'financial_type' => 'Donation', |
e3a78cba | 81 | 'payment_instrument' => 'Check', |
82 | 'status' => 'Completed', | |
83 | 'receive_date' => '2015-04-21 23:27:00', | |
84 | 'check_number' => '123XA', | |
9099cab3 CW |
85 | ], |
86 | [ | |
e3a78cba | 87 | 'total_amount' => -50.00, |
f70a8e69 | 88 | 'financial_type' => 'Donation', |
e3a78cba | 89 | 'payment_instrument' => 'Check', |
d8a1b674 | 90 | 'status' => 'Refunded Label**', |
e3a78cba | 91 | 'receive_date' => $params['trxn_date'], |
92 | 'check_number' => '123XA', | |
9099cab3 CW |
93 | ], |
94 | [ | |
e3a78cba | 95 | 'total_amount' => 50.00, |
f70a8e69 | 96 | 'financial_type' => 'Donation', |
e3a78cba | 97 | 'payment_instrument' => sprintf('Credit Card (Visa: %s)', $params['pan_truncation']), |
98 | 'status' => 'Completed', | |
99 | 'receive_date' => $params['trxn_date'], | |
9099cab3 CW |
100 | ], |
101 | ]; | |
e3a78cba | 102 | $this->assertEquals(3, count($payments['transaction'])); |
103 | foreach ($expectedPaymentParams as $key => $paymentParams) { | |
104 | foreach ($paymentParams as $fieldName => $expectedValue) { | |
105 | $this->assertEquals($expectedPaymentParams[$key][$fieldName], $payments['transaction'][$key][$fieldName]); | |
106 | } | |
107 | } | |
108 | } | |
109 | ||
650b79b4 | 110 | /** |
111 | * Test to ensure that multiple check_numbers are concatenated | |
112 | * and stored in related contribution's check_number | |
113 | */ | |
f8c56ac7 | 114 | public function testSubmitOnCheckNumberChange(): void { |
650b79b4 | 115 | // CASE 1: Submit contribution using Check as payment instrument and check_number as '123XA' |
116 | $checkNumber1 = '123XA'; | |
117 | $checkPaymentInstrumentID = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check'); | |
118 | // First create a contribution using 'Check' as payment instrument | |
f8c56ac7 | 119 | $form = $this->getFormObject('CRM_Contribute_Form_Contribution', [ |
650b79b4 | 120 | 'total_amount' => 50, |
121 | 'financial_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Donation'), | |
650b79b4 | 122 | 'contact_id' => $this->_individualID, |
123 | 'payment_instrument_id' => $checkPaymentInstrumentID, | |
124 | 'check_number' => $checkNumber1, | |
125 | 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'), | |
f8c56ac7 | 126 | ]); |
5f51d54b | 127 | $form->buildForm(); |
f8c56ac7 | 128 | $form->postProcess(); |
9099cab3 | 129 | $contribution = $this->callAPISuccessGetSingle('Contribution', ['contact_id' => $this->_individualID]); |
650b79b4 | 130 | $payments = CRM_Contribute_BAO_Contribution::getPaymentInfo($contribution['id'], 'contribute', TRUE); |
131 | $financialTrxnInfo = $payments['transaction'][0]; | |
132 | ||
133 | // CASE 2: Submit payment details via edit form and changed check_number to '456XA', | |
134 | // ensure that contribution's check_number has concatenated check-numbers | |
135 | $checkNumber2 = '456XA'; | |
136 | // build parameters which changed payment instrument and tran date values | |
9099cab3 | 137 | $params = [ |
650b79b4 | 138 | 'id' => $financialTrxnInfo['id'], |
139 | 'payment_instrument_id' => $checkPaymentInstrumentID, | |
140 | 'check_number' => $checkNumber2, | |
141 | 'trxn_date' => date('Y-m-d H:i:s'), | |
142 | 'contribution_id' => $contribution['id'], | |
9099cab3 | 143 | ]; |
650b79b4 | 144 | $form = new CRM_Financial_Form_PaymentEdit(); |
145 | $form->testSubmit($params); | |
9099cab3 CW |
146 | $contribution = $this->callAPISuccessGetSingle('Contribution', ['id' => $contribution['id']]); |
147 | $expectedConcatanatedCheckNumbers = implode(',', [$checkNumber1, $checkNumber2]); | |
650b79b4 | 148 | $this->assertEquals($expectedConcatanatedCheckNumbers, $contribution['check_number']); |
149 | ||
150 | // CASE 3: Submit payment details via edit form without any change, | |
151 | // ensure that contribution's check_number concatenated value isn't changed | |
152 | $form->testSubmit($params); | |
9099cab3 | 153 | $contribution = $this->callAPISuccessGetSingle('Contribution', ['id' => $contribution['id']]); |
650b79b4 | 154 | $this->assertEquals($expectedConcatanatedCheckNumbers, $contribution['check_number']); |
155 | } | |
156 | ||
e3a78cba | 157 | } |