Merge pull request #23521 from eileenmcnaughton/dead
[civicrm-core.git] / tests / phpunit / CRM / Financial / Form / PaymentEditTest.php
CommitLineData
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 */
15class 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}