From 61226be6aab1e8705c4694204bfa7f3089ef41f4 Mon Sep 17 00:00:00 2001 From: Jitendra Purohit Date: Wed, 7 Oct 2020 17:19:37 +0530 Subject: [PATCH] unit test for #18306 - order create api test for contribution --- .../CRMTraits/Financial/OrderTrait.php | 84 ++++++++++++++++--- tests/phpunit/api/v3/ContributionTest.php | 36 ++++++++ 2 files changed, 107 insertions(+), 13 deletions(-) diff --git a/tests/phpunit/CRMTraits/Financial/OrderTrait.php b/tests/phpunit/CRMTraits/Financial/OrderTrait.php index c927e7185747..fbbd2347eb94 100644 --- a/tests/phpunit/CRMTraits/Financial/OrderTrait.php +++ b/tests/phpunit/CRMTraits/Financial/OrderTrait.php @@ -60,31 +60,62 @@ public function createRepeatMembershipOrder() { 'contribution_recur_id' => $contributionRecur['id'], 'source' => 'Payment', ], + 'line_item' => $this->getMembershipLineItem(), + ], + ], + ])['id']; + + $this->ids['ContributionRecur'][0] = $contributionRecur['id']; + $this->ids['Contribution'][0] = $orderID; + } + + /** + * Create an order with a contribution AND a membership line item. + * + * @throws \CRM_Core_Exception + */ + protected function createContributionAndMembershipOrder() { + $this->ids['membership_type'][0] = $this->membershipTypeCreate(); + $orderID = $this->callAPISuccess('Order', 'create', [ + 'financial_type_id' => 'Donation', + 'contact_id' => $this->_contactID, + 'is_test' => 0, + 'payment_instrument_id' => 'Check', + 'receive_date' => date('Y-m-d'), + 'line_items' => [ + [ + 'params' => [ + 'contact_id' => $this->_contactID, + 'source' => 'Payment', + ], 'line_item' => [ [ - 'label' => 'General', + 'label' => 'Contribution Amount', 'qty' => 1, - 'unit_price' => 200, - 'line_total' => 200, - 'financial_type_id' => 1, - 'entity_table' => 'civicrm_membership', - 'price_field_id' => $this->callAPISuccess('price_field', 'getvalue', [ + 'unit_price' => 100, + 'line_total' => 100, + 'financial_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Donation'), + 'entity_table' => 'civicrm_contribution', + 'price_field_id' => $this->callAPISuccessGetValue('price_field', [ 'return' => 'id', - 'label' => 'Membership Amount', - 'options' => ['limit' => 1, 'sort' => 'id DESC'], - ]), - 'price_field_value_id' => $this->callAPISuccess('price_field_value', 'getvalue', [ - 'return' => 'id', - 'label' => 'General', + 'label' => 'Contribution Amount', 'options' => ['limit' => 1, 'sort' => 'id DESC'], ]), + 'price_field_value_id' => NULL, ], ], ], + [ + 'params' => [ + 'contact_id' => $this->_contactID, + 'membership_type_id' => 'General', + 'source' => 'Payment', + ], + 'line_item' => $this->getMembershipLineItem(), + ], ], ])['id']; - $this->ids['ContributionRecur'][0] = $contributionRecur['id']; $this->ids['Contribution'][0] = $orderID; } @@ -191,4 +222,31 @@ protected function createExtraneousContribution() { ]); } + /** + * @return array[] + * @throws \CRM_Core_Exception + */ + protected function getMembershipLineItem(): array { + return [ + [ + 'label' => 'General', + 'qty' => 1, + 'unit_price' => 200, + 'line_total' => 200, + 'financial_type_id' => 1, + 'entity_table' => 'civicrm_membership', + 'price_field_id' => $this->callAPISuccess('price_field', 'getvalue', [ + 'return' => 'id', + 'label' => 'Membership Amount', + 'options' => ['limit' => 1, 'sort' => 'id DESC'], + ]), + 'price_field_value_id' => $this->callAPISuccess('price_field_value', 'getvalue', [ + 'return' => 'id', + 'label' => 'General', + 'options' => ['limit' => 1, 'sort' => 'id DESC'], + ]), + ], + ]; + } + } diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index deb222613378..c246b9805417 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -22,6 +22,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { use CRMTraits_Profile_ProfileTrait; use CRMTraits_Custom_CustomDataTrait; + use CRMTraits_Financial_OrderTrait; protected $_individualId; protected $_contribution; @@ -2767,6 +2768,41 @@ public function testRepeatTransactionPassedInFinancialType() { $this->assertEquals($expectedLineItem, $lineItem2['values'][0]); } + /** + * Test Contribution with Order api. + * + * @throws \CRM_Core_Exception|\CiviCRM_API3_Exception + */ + public function testContributionOrder() { + $this->_contactID = $this->individualCreate(); + $this->createContributionAndMembershipOrder(); + $contribution = $this->callAPISuccess('contribution', 'get')['values'][$this->ids['Contribution'][0]]; + $this->assertEquals('Pending Label**', $contribution['contribution_status']); + $membership = $this->callAPISuccessGetSingle('Membership', ['contact_id' => $this->_contactID]); + + $this->callAPISuccess('Payment', 'create', [ + 'contribution_id' => $this->ids['Contribution'][0], + 'payment_instrument_id' => 'Check', + 'total_amount' => 300, + ]); + $contribution = $this->callAPISuccess('contribution', 'get')['values'][$this->ids['Contribution'][0]]; + $this->assertEquals('Completed', $contribution['contribution_status']); + + $lineItem = $this->callAPISuccess('LineItem', 'get', [ + 'sequential' => 1, + 'contribution_id' => $this->ids['Contribution'][0], + ])['values']; + $this->assertCount(2, $lineItem); + $this->assertEquals($this->ids['Contribution'][0], $lineItem[0]['entity_id']); + $this->assertEquals('civicrm_contribution', $lineItem[0]['entity_table']); + $this->assertEquals($this->ids['Contribution'][0], $lineItem[0]['contribution_id']); + $this->assertEquals($this->ids['Contribution'][0], $lineItem[1]['contribution_id']); + $this->assertEquals('100.00', $lineItem[0]['line_total']); + $this->assertEquals('200.00', $lineItem[1]['line_total']); + $this->assertEquals($membership['id'], $lineItem[1]['entity_id']); + $this->assertEquals('civicrm_membership', $lineItem[1]['entity_table']); + } + /** * Test financial_type_id override behaviour with a single line item. *