X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fapi%2Fv3%2FContributionTest.php;h=2320f688c9fb1931a2df84c1a008b9171ad941cb;hb=aafc57bd17342c42762d9e007aea922a8c3b5c4b;hp=e3e6c0936aa3eaec21381ccc9d7053748af6dadb;hpb=f150931b77650e66d9b2648a3202f96771bd55ed;p=civicrm-core.git diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index e3e6c0936a..2320f688c9 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2016 | + | Copyright CiviCRM LLC (c) 2004-2017 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -147,25 +147,26 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_id' => $this->_contribution['id'], ); - $contribution = $this->callAPIAndDocument('contribution', 'get', $params, __FUNCTION__, __FILE__); + $contributions = $this->callAPIAndDocument('contribution', 'get', $params, __FUNCTION__, __FILE__); $financialParams['id'] = $this->_financialTypeId; $default = NULL; CRM_Financial_BAO_FinancialType::retrieve($financialParams, $default); - $this->assertEquals(1, $contribution['count']); - $this->assertEquals($contribution['values'][$contribution['id']]['contact_id'], $this->_individualId); + $this->assertEquals(1, $contributions['count']); + $contribution = $contributions['values'][$contributions['id']]; + $this->assertEquals($contribution['contact_id'], $this->_individualId); // Note there was an assertion converting financial_type_id to 'Donation' which wasn't working. // Passing back a string rather than an id seems like an error/cruft. // If it is to be introduced we should discuss. - $this->assertEquals($contribution['values'][$contribution['id']]['financial_type_id'], 1); - $this->assertEquals($contribution['values'][$contribution['id']]['total_amount'], 100.00); - $this->assertEquals($contribution['values'][$contribution['id']]['non_deductible_amount'], 10.00); - $this->assertEquals($contribution['values'][$contribution['id']]['fee_amount'], 5.00); - $this->assertEquals($contribution['values'][$contribution['id']]['net_amount'], 95.00); - $this->assertEquals($contribution['values'][$contribution['id']]['trxn_id'], 23456); - $this->assertEquals($contribution['values'][$contribution['id']]['invoice_id'], 78910); - $this->assertEquals($contribution['values'][$contribution['id']]['contribution_source'], 'SSF'); - $this->assertEquals($contribution['values'][$contribution['id']]['contribution_status'], 'Completed'); + $this->assertEquals($contribution['financial_type_id'], 1); + $this->assertEquals($contribution['total_amount'], 100.00); + $this->assertEquals($contribution['non_deductible_amount'], 10.00); + $this->assertEquals($contribution['fee_amount'], 5.00); + $this->assertEquals($contribution['net_amount'], 95.00); + $this->assertEquals($contribution['trxn_id'], 23456); + $this->assertEquals($contribution['invoice_id'], 78910); + $this->assertEquals($contribution['contribution_source'], 'SSF'); + $this->assertEquals($contribution['contribution_status'], 'Completed'); // Create a second contribution - we are testing that 'id' gets the right contribution id (not the contact id). $p['trxn_id'] = '3847'; $p['invoice_id'] = '3847'; @@ -213,6 +214,71 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->callAPISuccessGetSingle('Contribution', array('is_test' => 1)); } + /** + * Test the 'return' param works for all fields. + */ + public function testGetContributionReturnFunctionality() { + $params = $this->_params; + $params['check_number'] = 'bouncer'; + $params['payment_instrument_id'] = 'Check'; + $params['cancel_date'] = 'yesterday'; + $params['receipt_date'] = 'yesterday'; + $params['thankyou_date'] = 'yesterday'; + $params['revenue_recognition_date'] = 'yesterday'; + $params['amount_level'] = 'Unreasonable'; + $params['cancel_reason'] = 'You lose sucker'; + $params['creditnote_id'] = 'sudo rm -rf'; + $params['tax_amount'] = '1'; + $address = $this->callAPISuccess('Address', 'create', array( + 'street_address' => 'Knockturn Alley', + 'contact_id' => $this->_individualId, + 'location_type_id' => 'Home', + )); + $params['address_id'] = $address['id']; + $contributionPage = $this->contributionPageCreate(); + $params['contribution_page_id'] = $contributionPage['id']; + $contributionRecur = $this->callAPISuccess('ContributionRecur', 'create', array( + 'contact_id' => $this->_individualId, + 'frequency_interval' => 1, + 'amount' => 5, + )); + $params['contribution_recur_id'] = $contributionRecur['id']; + + $params['campaign_id'] = $this->campaignCreate(); + + $contributionID = $this->contributionCreate($params); + $contribution = $this->callAPISuccessGetSingle('Contribution', array('id' => $contributionID)); + $this->assertEquals('bouncer', $contribution['check_number']); + $this->assertEquals('bouncer', $contribution['contribution_check_number']); + + $fields = CRM_Contribute_BAO_Contribution::fields(); + // Re-add these 2 to the fields to check. They were locked in but the metadata changed so we + // need to specify them. + $fields['address_id'] = $fields['contribution_address_id']; + $fields['check_number'] = $fields['contribution_check_number']; + + $fieldsLockedIn = array( + 'contribution_id', 'contribution_contact_id', 'financial_type_id', 'contribution_page_id', + 'payment_instrument_id', 'receive_date', 'non_deductible_amount', 'total_amount', + 'fee_amount', 'net_amount', 'trxn_id', 'invoice_id', 'currency', 'cancel_date', 'cancel_reason', + 'receipt_date', 'thankyou_date', 'contribution_source', 'amount_level', 'contribution_recur_id', + 'is_test', 'is_pay_later', 'contribution_status_id', 'address_id', 'check_number', 'contribution_campaign_id', + 'creditnote_id', 'tax_amount', 'revenue_recognition_date', 'decoy', + ); + $missingFields = array_diff($fieldsLockedIn, array_keys($fields)); + // If any of the locked in fields disappear from the $fields array we need to make sure it is still + // covered as the test contract now guarantees them in the return array. + $this->assertEquals($missingFields, array(29 => 'decoy'), 'A field which was covered by the test contract has changed.'); + foreach ($fields as $fieldName => $fieldSpec) { + $contribution = $this->callAPISuccessGetSingle('Contribution', array('id' => $contributionID, 'return' => $fieldName)); + $returnField = $fieldName; + if ($returnField == 'contribution_contact_id') { + $returnField = 'contact_id'; + } + $this->assertTrue((!empty($contribution[$returnField]) || $contribution[$returnField] === "0"), $returnField); + } + } + /** * We need to ensure previous tested behaviour still works as part of the api contract. */ @@ -235,7 +301,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $params = array( 'contribution_id' => $this->_contribution['id'], ); - $contribution = $this->callAPIAndDocument('contribution', 'get', $params, __FUNCTION__, __FILE__); + $contribution = $this->callAPISuccess('contribution', 'get', $params); $financialParams['id'] = $this->_financialTypeId; $default = NULL; CRM_Financial_BAO_FinancialType::retrieve($financialParams, $default); @@ -435,7 +501,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_status_id' => 1, ); - $contribution = $this->callAPIAndDocument('contribution', 'create', $params, __FUNCTION__, __FILE__); + $contribution = $this->callAPISuccess('contribution', 'create', $params); $this->assertEquals($contribution['values'][$contribution['id']]['contact_id'], $this->_individualId); $this->assertEquals($contribution['values'][$contribution['id']]['total_amount'], 100.00); $this->assertEquals($contribution['values'][$contribution['id']]['financial_type_id'], 1); @@ -540,6 +606,16 @@ class api_v3_ContributionTest extends CiviUnitTestCase { // 2); } + /** + * Check the credit note retrieval is case insensitive. + */ + public function testGetCreditNoteCaseInsensitive() { + $this->contributionCreate(array('contact_id' => $this->_individualId)); + $this->contributionCreate(array('creditnote_id' => 'cN1234', 'contact_id' => $this->_individualId, 'invoice_id' => rand(), 'trxn_id' => rand())); + $contribution = $this->callAPISuccess('Contribution', 'getsingle', array('creditnote_id' => 'CN1234')); + $this->assertEquals($contribution['creditnote_id'], 'cN1234'); + } + /** * Test retrieval by total_amount works. * @@ -799,7 +875,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_status_id' => 1, ); - $contribution = $this->callAPIAndDocument('contribution', 'create', $params, __FUNCTION__, __FILE__); + $contribution = $this->callAPISuccess('contribution', 'create', $params); $this->assertEquals($contribution['values'][$contribution['id']]['contact_id'], $this->_individualId); $this->assertEquals($contribution['values'][$contribution['id']]['total_amount'], 100.00); $this->assertEquals($contribution['values'][$contribution['id']]['fee_amount'], 50.00); @@ -852,7 +928,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { ); - $contribution = $this->callAPIAndDocument('contribution', 'create', $params, __FUNCTION__, __FILE__); + $contribution = $this->callAPISuccess('contribution', 'create', $params); $this->assertEquals($contribution['values'][$contribution['id']]['contact_id'], $this->_individualId); $this->assertEquals($contribution['values'][$contribution['id']]['total_amount'], 100.00); $this->assertEquals($contribution['values'][$contribution['id']]['financial_type_id'], 1); @@ -945,7 +1021,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_status_id' => 2, ); - $contribution = $this->callAPIAndDocument('contribution', 'create', $params, __FUNCTION__, __FILE__); + $contribution = $this->callAPISuccess('contribution', 'create', $params); $this->assertEquals($contribution['values'][$contribution['id']]['contact_id'], $this->_individualId); $this->assertEquals($contribution['values'][$contribution['id']]['total_amount'], 100.00); $this->assertEquals($contribution['values'][$contribution['id']]['financial_type_id'], 1); @@ -1458,7 +1534,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'non_deductible_amount' => 10.00, 'net_amount' => 100.00, 'contribution_status_id' => 1, - 'note' => 'Donating for Nobel Cause', + 'note' => 'Donating for Noble Cause', ); @@ -1468,19 +1544,20 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'contribution_id' => $contribution['id'], ); - $contribution = $this->callAPISuccess('contribution', 'get', $new_params); - - $this->assertEquals($contribution['values'][$contributionID]['contact_id'], $this->_individualId); - $this->assertEquals($contribution['values'][$contributionID]['total_amount'], 110.00); - $this->assertEquals($contribution['values'][$contributionID]['financial_type_id'], $this->_financialTypeId); - $this->assertEquals($contribution['values'][$contributionID]['instrument_id'], $old_payment_instrument); - $this->assertEquals($contribution['values'][$contributionID]['non_deductible_amount'], 10.00); - $this->assertEquals($contribution['values'][$contributionID]['fee_amount'], $old_fee_amount); - $this->assertEquals($contribution['values'][$contributionID]['net_amount'], 100.00); - $this->assertEquals($contribution['values'][$contributionID]['trxn_id'], $old_trxn_id); - $this->assertEquals($contribution['values'][$contributionID]['invoice_id'], $old_invoice_id); - $this->assertEquals($contribution['values'][$contributionID]['contribution_source'], $old_source); - $this->assertEquals($contribution['values'][$contributionID]['contribution_status'], 'Completed'); + $contribution = $this->callAPISuccessGetSingle('contribution', $new_params); + + $this->assertEquals($contribution['contact_id'], $this->_individualId); + $this->assertEquals($contribution['total_amount'], 110.00); + $this->assertEquals($contribution['financial_type_id'], $this->_financialTypeId); + $this->assertEquals($contribution['financial_type'], 'Donation'); + $this->assertEquals($contribution['instrument_id'], $old_payment_instrument); + $this->assertEquals($contribution['non_deductible_amount'], 10.00); + $this->assertEquals($contribution['fee_amount'], $old_fee_amount); + $this->assertEquals($contribution['net_amount'], 100.00); + $this->assertEquals($contribution['trxn_id'], $old_trxn_id); + $this->assertEquals($contribution['invoice_id'], $old_invoice_id); + $this->assertEquals($contribution['contribution_source'], $old_source); + $this->assertEquals($contribution['contribution_status'], 'Completed'); $params = array( 'contribution_id' => $contributionID, @@ -1489,8 +1566,6 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->assertAPISuccess($result); } - ///////////////// civicrm_contribution_delete methods - /** * Attempt (but fail) to delete a contribution without parameters. */ @@ -1987,6 +2062,39 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->quickCleanUpFinancialEntities(); } + /** + * CRM-19873 Test repattransaction if contribution_recur_id is a test. + */ + public function testRepeatTransactionTestRecurId() { + $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array( + 'contact_id' => $this->_individualId, + 'frequency_interval' => '1', + 'amount' => '1.00', + 'contribution_status_id' => 1, + 'start_date' => '2017-01-01 00:00:00', + 'currency' => 'USD', + 'frequency_unit' => 'month', + 'payment_processor_id' => $this->paymentProcessorID, + 'is_test' => 1, + )); + $this->callAPISuccess('contribution', 'create', array_merge( + $this->_params, + array( + 'contribution_recur_id' => $contributionRecur['id'], + 'is_test' => 1, + )) + ); + + $repeatedContribution = $this->callAPISuccess('contribution', 'repeattransaction', array( + 'contribution_recur_id' => $contributionRecur['id'], + 'contribution_status_id' => 'Completed', + 'trxn_id' => uniqid(), + )); + + $this->assertEquals($contributionRecur['values'][1]['is_test'], $repeatedContribution['values'][2]['is_test']); + $this->quickCleanUpFinancialEntities(); + } + /** * CRM-16397 test appropriate action if total amount has changed for single line items. */