X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fapi%2Fv3%2FContributionTest.php;h=00f29808cbcce4b31986de8620293ec62e0bf91d;hb=9e6c4b1e98c67ba8320bd61116134d3a10854cc4;hp=cad444a6b96365998f22e3efe06d62777380a68f;hpb=ed346e8968a36bef96e280f78cebeb17379fb9e9;p=civicrm-core.git diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index cad444a6b9..00f29808cb 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -634,7 +634,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_status_id' => 1, ); - $this->callAPIFailure('contribution', 'create', $params, 'contact_id is not valid : 999'); + $this->callAPIFailure('contribution', 'create', $params); } /** @@ -1058,6 +1058,31 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->_checkFinancialTrxn($contribution, 'paymentInstrument', $instrumentId); } + /** + * Function tests that financial records are updated when Payment Instrument is changed when amount is negative. + */ + public function testCreateUpdateNegativeContributionPaymentInstrument() { + $instrumentId = $this->_addPaymentInstrument(); + $contribParams = array( + 'contact_id' => $this->_individualId, + 'total_amount' => -100.00, + 'financial_type_id' => $this->_financialTypeId, + 'payment_instrument_id' => 4, + 'contribution_status_id' => 1, + + ); + $contribution = $this->callAPISuccess('contribution', 'create', $contribParams); + + $newParams = array_merge($contribParams, array( + 'id' => $contribution['id'], + 'payment_instrument_id' => $instrumentId, + ) + ); + $contribution = $this->callAPISuccess('contribution', 'create', $newParams); + $this->assertAPISuccess($contribution); + $this->_checkFinancialTrxn($contribution, 'paymentInstrument', $instrumentId, array('total_amount' => '-100.00')); + } + /** * Function tests that financial records are added when Contribution is Refunded. */ @@ -1803,11 +1828,10 @@ class api_v3_ContributionTest extends CiviUnitTestCase { } /** - * Test repeat contribution successfully creates line items. + * Test repeat contribution successfully creates line item. */ public function testRepeatTransaction() { - $originalContribution = $this->setUpRepeatTransaction(); - + $originalContribution = $this->setUpRepeatTransaction($recurParams = array(), 'single'); $this->callAPISuccess('contribution', 'repeattransaction', array( 'original_contribution_id' => $originalContribution['id'], 'contribution_status_id' => 'Completed', @@ -1842,11 +1866,61 @@ class api_v3_ContributionTest extends CiviUnitTestCase { } /** - * Test repeat contribution successfully creates line items. + * Test repeat contribution successfully creates line items (plural). + */ + public function testRepeatTransactionLineItems() { + // CRM-19309 + $originalContribution = $this->setUpRepeatTransaction($recurParams = array(), 'multiple'); + $this->callAPISuccess('contribution', 'repeattransaction', array( + 'original_contribution_id' => $originalContribution['id'], + 'contribution_status_id' => 'Completed', + 'trxn_id' => uniqid(), + )); + + $lineItemParams = array( + 'entity_id' => $originalContribution['id'], + 'sequential' => 1, + 'return' => array( + 'entity_table', + 'qty', + 'unit_price', + 'line_total', + 'label', + 'financial_type_id', + 'deductible_amount', + 'price_field_value_id', + 'price_field_id', + ), + ); + $lineItem1 = $this->callAPISuccess('line_item', 'get', array_merge($lineItemParams, array( + 'entity_id' => $originalContribution['id'], + ))); + $lineItem2 = $this->callAPISuccess('line_item', 'get', array_merge($lineItemParams, array( + 'entity_id' => $originalContribution['id'] + 1, + ))); + + // unset id and entity_id for all of them to be able to compare the lineItems: + unset($lineItem1['values'][0]['id'], $lineItem1['values'][0]['entity_id']); + unset($lineItem2['values'][0]['id'], $lineItem2['values'][0]['entity_id']); + $this->assertEquals($lineItem1['values'][0], $lineItem2['values'][0]); + + unset($lineItem1['values'][1]['id'], $lineItem1['values'][1]['entity_id']); + unset($lineItem2['values'][1]['id'], $lineItem2['values'][1]['entity_id']); + $this->assertEquals($lineItem1['values'][1], $lineItem2['values'][1]); + + // CRM-19309 so in future we also want to: + // check that financial_line_items have been created for entity_id 3 and 4; + + $this->callAPISuccessGetCount('FinancialItem', array('description' => 'Sales Tax', 'amount' => 0), 0); + $this->quickCleanUpFinancialEntities(); + } + + /** + * Test repeat contribution successfully creates is_test transaction. */ public function testRepeatTransactionIsTest() { $this->_params['is_test'] = 1; - $originalContribution = $this->setUpRepeatTransaction(array('is_test' => 1)); + $originalContribution = $this->setUpRepeatTransaction(array('is_test' => 1), 'single'); $this->callAPISuccess('contribution', 'repeattransaction', array( 'original_contribution_id' => $originalContribution['id'], @@ -1860,7 +1934,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * Test repeat contribution passed in status. */ public function testRepeatTransactionPassedInStatus() { - $originalContribution = $this->setUpRepeatTransaction(); + $originalContribution = $this->setUpRepeatTransaction($recurParams = array(), 'single'); $this->callAPISuccess('contribution', 'repeattransaction', array( 'original_contribution_id' => $originalContribution['id'], @@ -1929,6 +2003,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'total_amount' => '400', 'fee_amount' => 50, )); + $lineItemParams = array( 'entity_id' => $originalContribution['id'], 'sequential' => 1, @@ -1962,6 +2037,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $lineItem2 = $this->callAPISuccess('line_item', 'get', array_merge($lineItemParams, array( 'entity_id' => $originalContribution['id'] + 1, ))); + unset($expectedLineItem['id'], $expectedLineItem['entity_id']); unset($lineItem2['values'][0]['id'], $lineItem2['values'][0]['entity_id']); $this->assertEquals($expectedLineItem, $lineItem2['values'][0]); @@ -2015,6 +2091,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { ))); unset($expectedLineItem['id'], $expectedLineItem['entity_id']); unset($lineItem2['values'][0]['id'], $lineItem2['values'][0]['entity_id']); + $expectedLineItem['contribution_type_id'] = $lineItem2['values'][0]['contribution_type_id']; $this->assertEquals($expectedLineItem, $lineItem2['values'][0]); } @@ -2065,6 +2142,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { ))); unset($expectedLineItem['id'], $expectedLineItem['entity_id']); unset($lineItem2['values'][0]['id'], $lineItem2['values'][0]['entity_id']); + $expectedLineItem['contribution_type_id'] = $lineItem2['values'][0]['contribution_type_id']; $this->assertEquals($expectedLineItem, $lineItem2['values'][0]); } @@ -2517,9 +2595,36 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'Event', ) ); + + $this->checkCreditCardDetails($mut, $contribution['id']); $mut->stop(); } + /** + * Check credit card details in sent mail via API + * + * @param $mut obj CiviMailUtils instance + * @param int $contributionID Contribution ID + * + */ + public function checkCreditCardDetails($mut, $contributionID) { + $contribution = $this->callAPISuccess('contribution', 'create', $this->_params); + $this->callAPISuccess('contribution', 'sendconfirmation', array( + 'id' => $contributionID, + 'receipt_from_email' => 'api@civicrm.org', + 'payment_processor_id' => $this->paymentProcessorID, + ) + ); + $mut->checkMailLog(array( + 'Credit Card Information', // credit card header + 'Billing Name and Address', // billing header + 'anthony_anderson@civicrm.org', // billing name + ), array( + 'Event', + ) + ); + } + /** * Test sending a mail via the API. */ @@ -2798,10 +2903,18 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $trxnParams1 = array( 'id' => $trxn['financial_trxn_id'], ); - $compareParams = array( - 'total_amount' => -100, - 'status_id' => 1, - ); + if (empty($extraParams)) { + $compareParams = array( + 'total_amount' => -100, + 'status_id' => 1, + ); + } + else { + $compareParams = array( + 'total_amount' => 100, + 'status_id' => 1, + ); + } if ($context == 'paymentInstrument') { $compareParams += array( 'to_financial_account_id' => CRM_Financial_BAO_FinancialTypeAccount::getInstrumentFinancialAccount(4), @@ -2890,7 +3003,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * * @return array */ - protected function setUpRepeatTransaction($recurParams = array()) { + protected function setUpRepeatTransaction($recurParams = array(), $flag) { $paymentProcessorID = $this->paymentProcessorCreate(); $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array_merge(array( 'contact_id' => $this->_individualId, @@ -2903,10 +3016,42 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'frequency_unit' => 'month', 'payment_processor_id' => $paymentProcessorID, ), $recurParams)); - $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( - $this->_params, - array('contribution_recur_id' => $contributionRecur['id'])) - ); + + $originalContribution = ''; + if ($flag == 'multiple') { + // CRM-19309 create a contribution + also add in line_items (plural): + $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( + $this->_params, + array( + 'contribution_recur_id' => $contributionRecur['id'], + 'skipLineItem' => 1, + 'api.line_item.create' => array( + array( + 'price_field_id' => 1, + 'qty' => 2, + 'line_total' => '20', + 'unit_price' => '10', + 'financial_type_id' => 1, + ), + array( + 'price_field_id' => 1, + 'qty' => 1, + 'line_total' => '80', + 'unit_price' => '80', + 'financial_type_id' => 2, + ), + ), + ) + ) + ); + } + elseif ($flag == 'single') { + $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( + $this->_params, + array('contribution_recur_id' => $contributionRecur['id'])) + ); + } + return $originalContribution; }