Skip to content

Commit

Permalink
unit test for civicrm#18306 - order create api test for contribution
Browse files Browse the repository at this point in the history
  • Loading branch information
Jitendra Purohit authored and eileenmcnaughton committed Oct 16, 2020
1 parent 7d41ce4 commit 61226be
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 13 deletions.
84 changes: 71 additions & 13 deletions tests/phpunit/CRMTraits/Financial/OrderTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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'],
]),
],
];
}

}
36 changes: 36 additions & 0 deletions tests/phpunit/api/v3/ContributionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
*
Expand Down

0 comments on commit 61226be

Please sign in to comment.