X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fapi%2Fv3%2FContributionTest.php;h=9e36a6210dadb8e5d869f2ccad96ae6965b21758;hb=9bd51e848bde8221f6d8f22eab8c913fc6b7e3a9;hp=d81434af900c997ab39e5a1acc39d2a3a9f67c66;hpb=831d4f8f151ab9d0aa8960fc7cb8f22905db1149;p=civicrm-core.git diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index d81434af90..9e36a6210d 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -822,6 +822,9 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->callAPISuccess('contact', 'delete', array('id' => $contact2['id'])); } + /** + * Test creating contribution with Soft Credit by passing in honor_contact_id. + */ public function testCreateContributionWithHonoreeContact() { $description = "Demonstrates creating contribution with Soft Credit by passing in honor_contact_id."; $subfile = "ContributionCreateWithHonoreeContact"; @@ -839,7 +842,8 @@ class api_v3_ContributionTest extends CiviUnitTestCase { // Default soft credit amount = contribution.total_amount // Legacy mode in create api (honor_contact_id param) uses the standard "In Honor of" soft credit type $this->assertEquals($this->_params['total_amount'], $result['values'][0]['soft_credit'][1]['amount']); - $this->assertEquals(CRM_Core_OptionGroup::getValue('soft_credit_type', 'in_honor_of', 'name'), $result['values'][0]['soft_credit'][1]['soft_credit_type']); + $softCreditValueTypeID = $result['values'][0]['soft_credit'][1]['soft_credit_type']; + $this->assertEquals('in_honor_of', CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_ContributionSoft', 'soft_credit_type_id', $softCreditValueTypeID)); $this->callAPISuccess('contribution', 'delete', array('id' => $contribution['id'])); $this->callAPISuccess('contact', 'delete', array('id' => $contact2['id'])); @@ -2096,17 +2100,18 @@ class api_v3_ContributionTest extends CiviUnitTestCase { } /** * CRM-19945 Tests repeattransaction is using a completed contribution for the template. + * * ( Tests membership is renewed after repeattransaction. ) */ public function testRepeatTransactionUsesCompleted() { list($originalContribution, $membership) = $this->setUpAutoRenewMembership(); $this->callAPISuccess('contribution', 'create', array( - 'contact_id' => $originalContribution['values'][1]['contact_id'], - 'financial_type_id' => $originalContribution['values'][1]['financial_type_id'], - 'total_amount' => $originalContribution['values'][1]['total_amount'], - 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'], - 'contribution_status_id' => "Failed", + 'contact_id' => $originalContribution['values'][1]['contact_id'], + 'financial_type_id' => $originalContribution['values'][1]['financial_type_id'], + 'total_amount' => $originalContribution['values'][1]['total_amount'], + 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'], + 'contribution_status_id' => "Failed", )); $this->callAPISuccess('membership', 'create', array( @@ -2115,18 +2120,22 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'status_id' => 4, )); - $this->callAPISuccess('contribution', 'repeattransaction', array( + $contribution = $this->callAPISuccess('contribution', 'repeattransaction', array( 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'], 'contribution_status_id' => 'Completed', - 'trxn_id' => uniqid(), + 'trxn_id' => 'bobsled', )); - $membershipStatus = $this->callAPISuccess('membership', 'getvalue', array( + $membershipStatusId = $this->callAPISuccess('membership', 'getvalue', array( 'id' => $membership['id'], 'return' => 'status_id', )); - $this->assertEquals('1', $membershipStatus); + $this->assertEquals('New', CRM_Core_PseudoConstant::getLabel('CRM_Member_BAO_Membership', 'status_id', $membershipStatusId)); + + $lineItem = $this->callAPISuccessGetSingle('LineItem', array('contribution_id' => $contribution['id'])); + $this->assertEquals('civicrm_membership', $lineItem['entity_table']); + $this->callAPISuccessGetCount('MembershipPayment', array('membership_id' => $membership['id'])); $this->quickCleanUpFinancialEntities(); $this->contactDelete($originalContribution['values'][1]['contact_id']); } @@ -2424,16 +2433,8 @@ class api_v3_ContributionTest extends CiviUnitTestCase { * CRM-1960 - Test to ensure that completetransaction respects the is_email_receipt setting */ public function testCompleteTransactionWithEmailReceiptInput() { - // Create a Contribution Page with is_email_receipt = TRUE - $contributionPage = $this->callAPISuccess('ContributionPage', 'create', array( - 'receipt_from_name' => 'Mickey Mouse', - 'receipt_from_email' => 'mickey@mouse.com', - 'title' => "Test Contribution Page", - 'financial_type_id' => 1, - 'currency' => 'CAD', - 'is_monetary' => TRUE, - 'is_email_receipt' => TRUE, - )); + $contributionPage = $this->createReceiptableContributionPage(); + $this->_params['contribution_page_id'] = $contributionPage['id']; $params = array_merge($this->_params, array('contribution_status_id' => 2)); $contribution = $this->callAPISuccess('contribution', 'create', $params); @@ -2449,6 +2450,66 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->assertEquals('', $receipt_date); } + /** + * Test that $is_recur is assigned to the receipt. + */ + public function testCompleteTransactionForRecurring() { + + $this->swapMessageTemplateForTestTemplate(); + $recurring = $this->setUpRecurringContribution(); + $contributionPage = $this->createReceiptableContributionPage(array('is_recur' => TRUE, 'recur_frequency_unit' => 'month', 'recur_interval' => 1)); + + $this->_params['contribution_page_id'] = $contributionPage['id']; + $this->_params['contribution_recur_id'] = $recurring['id']; + + $contribution = $this->setUpForCompleteTransaction(); + + $this->callAPISuccess('contribution', 'completetransaction', array( + 'id' => $contribution['id'], + 'trxn_date' => date('2011-04-09'), + 'trxn_id' => 'kazam', + 'is_email_receipt' => 1, + )); + + $this->mut->checkMailLog(array( + 'is_recur:::1', + 'cancelSubscriptionUrl:::http://dummy.com', + )); + $this->mut->stop(); + $this->revertTemplateToReservedTemplate(); + } + /** + * CRM-19710 - Test to ensure that completetransaction respects the input for is_email_receipt setting. + * + * If passed in it will override the default from contribution page. + */ + public function testCompleteTransactionWithEmailReceiptInputTrue() { + $mut = new CiviMailUtils($this, TRUE); + $this->createLoggedInUser(); + // Create a Contribution Page with is_email_receipt = FALSE + $contributionPage = $this->callAPISuccess('ContributionPage', 'create', array( + 'receipt_from_name' => 'Mickey Mouse', + 'receipt_from_email' => 'mickey@mouse.com', + 'title' => "Test Contribution Page", + 'financial_type_id' => 1, + 'currency' => 'CAD', + 'is_monetary' => TRUE, + 'is_email_receipt' => 0, + )); + $this->_params['contribution_page_id'] = $contributionPage['id']; + $params = array_merge($this->_params, array('contribution_status_id' => 2, 'receipt_date' => 'now')); + $contribution = $this->callAPISuccess('contribution', 'create', $params); + // Complete the transaction overriding is_email_receipt to = TRUE + $this->callAPISuccess('contribution', 'completetransaction', array( + 'id' => $contribution['id'], + 'is_email_receipt' => 1, + )); + $mut->checkMailLog(array( + 'Please print this receipt for your records.', + )); + $mut->stop(); + } + /** * Complete the transaction using the template with all the possible. */ @@ -3057,10 +3118,9 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'id' => $trxn['financial_trxn_id'], ); if ($context == 'payLater') { - $relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' ")); $compareParams = array( 'status_id' => 1, - 'from_financial_account_id' => CRM_Contribute_PseudoConstant::financialAccountType($contribution['financial_type_id'], $relationTypeId), + 'from_financial_account_id' => CRM_Contribute_PseudoConstant::getRelationalFinancialAccount($contribution['financial_type_id'], 'Accounts Receivable Account is'), ); } elseif ($context == 'refund') { @@ -3195,17 +3255,17 @@ class api_v3_ContributionTest extends CiviUnitTestCase { */ protected function setUpAutoRenewMembership($generalParams = array(), $recurParams = array()) { $newContact = $this->callAPISuccess('Contact', 'create', array( - 'contact_type' => 'Individual', - 'sort_name' => 'McTesterson, Testy', - 'display_name' => 'Testy McTesterson', - 'preferred_language' => 'en_US', - 'preferred_mail_format' => 'Both', - 'first_name' => 'Testy', - 'last_name' => 'McTesterson', - 'contact_is_deleted' => '0', - 'email_id' => '4', - 'email' => 'tmctesterson@example.com', - 'on_hold' => '0', + 'contact_type' => 'Individual', + 'sort_name' => 'McTesterson, Testy', + 'display_name' => 'Testy McTesterson', + 'preferred_language' => 'en_US', + 'preferred_mail_format' => 'Both', + 'first_name' => 'Testy', + 'last_name' => 'McTesterson', + 'contact_is_deleted' => '0', + 'email_id' => '4', + 'email' => 'tmctesterson@example.com', + 'on_hold' => '0', )); $membershipType = $this->callAPISuccess('MembershipType', 'create', array( 'domain_id' => "Default Domain Name", @@ -3228,6 +3288,17 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'frequency_unit' => 'month', 'payment_processor_id' => $this->paymentProcessorID, ), $generalParams, $recurParams)); + + $membership = $this->callAPISuccess('membership', 'create', array( + 'contact_id' => $newContact['id'], + 'contribution_recur_id' => $contributionRecur['id'], + 'financial_type_id' => "Member Dues", + 'membership_type_id' => $membershipType['id'], + 'num_terms' => 1, + 'skipLineItem' => TRUE, + )); + + CRM_Price_BAO_LineItem::getLineItemArray($this->_params, NULL, 'membership', $membershipType['id']); $originalContribution = $this->callAPISuccess('contribution', 'create', array_merge( $this->_params, array( @@ -3238,18 +3309,12 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'invoice_id' => uniqid(), ), $generalParams) ); - $membership = $this->callAPISuccess('membership', 'create', array( - 'contact_id' => $newContact['id'], - 'contribution_recur_id' => $contributionRecur['id'], - 'financial_type_id' => "Member Dues", - 'membership_type_id' => $membershipType['id'], - 'num_terms' => 1, - )); + $lineItem = $this->callAPISuccess('LineItem', 'getsingle', array()); + $this->assertEquals('civicrm_membership', $lineItem['entity_table']); + $membership = $this->callAPISuccess('Membership', 'getsingle', array('id' => $lineItem['entity_id'])); + $this->callAPISuccess('LineItem', 'getsingle', array()); + $this->callAPISuccessGetCount('MembershipPayment', array('membership_id' => $membership['id']), 1); - $this->callAPISuccess('MembershipPayment', 'create', array( - 'contribution_id' => $originalContribution['id'], - 'membership_id' => $membership['id'], - )); return array($originalContribution, $membership); } /** @@ -3353,6 +3418,45 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $this->quickCleanUpFinancialEntities(); } + /** + * CRM-20008 Tests repeattransaction creates pending membership. + */ + public function testRepeatTransactionPendingMembership() { + list($originalContribution, $membership) = $this->setUpAutoRenewMembership(); + $this->callAPISuccess('membership', 'create', array( + 'id' => $membership['id'], + 'end_date' => 'yesterday', + 'status_id' => 'Expired', + )); + $repeatedContribution = $this->callAPISuccess('contribution', 'repeattransaction', array( + 'contribution_recur_id' => $originalContribution['values'][1]['contribution_recur_id'], + 'contribution_status_id' => 'Pending', + 'trxn_id' => uniqid(), + )); + $membershipStatusId = $this->callAPISuccess('membership', 'getvalue', array( + 'id' => $membership['id'], + 'return' => 'status_id', + )); + + // Let's see if the membership payments got created while we're at it. + $membershipPayments = $this->callAPISuccess('MembershipPayment', 'get', array( + 'memberhip_id' => $membership['id'], + )); + $this->assertEquals(2, $membershipPayments['count']); + + $this->assertEquals('Expired', CRM_Core_PseudoConstant::getLabel('CRM_Member_BAO_Membership', 'status_id', $membershipStatusId)); + $this->callAPISuccess('Contribution', 'completetransaction', array('id' => $repeatedContribution['id'])); + $membership = $this->callAPISuccessGetSingle('membership', array( + 'id' => $membership['id'], + 'return' => 'status_id, end_date', + )); + $this->assertEquals('New', CRM_Core_PseudoConstant::getLabel('CRM_Member_BAO_Membership', 'status_id', $membership['status_id'])); + $this->assertEquals(date('Y-m-d', strtotime('yesterday + 1 month')), $membership['end_date']); + + $this->quickCleanUpFinancialEntities(); + $this->contactDelete($originalContribution['values'][1]['contact_id']); + } + /** * Test sending a mail via the API. */ @@ -3490,4 +3594,68 @@ class api_v3_ContributionTest extends CiviUnitTestCase { $mut->stop(); } + /** + * Create a Contribution Page with is_email_receipt = TRUE. + * + * @param array $params + * Params to overwrite with. + * + * @return array|int + */ + protected function createReceiptableContributionPage($params = array()) { + $contributionPage = $this->callAPISuccess('ContributionPage', 'create', array_merge(array( + 'receipt_from_name' => 'Mickey Mouse', + 'receipt_from_email' => 'mickey@mouse.com', + 'title' => "Test Contribution Page", + 'financial_type_id' => 1, + 'currency' => 'CAD', + 'is_monetary' => TRUE, + 'is_email_receipt' => TRUE, + ), $params)); + return $contributionPage; + } + + /** + * function to test card_type and pan truncation. + */ + public function testCardTypeAndPanTruncation() { + $creditCardTypeIDs = array_flip(CRM_Financial_DAO_FinancialTrxn::buildOptions('card_type_id')); + $contactId = $this->individualCreate(); + $params = array( + 'contact_id' => $contactId, + 'receive_date' => '2016-01-20', + 'total_amount' => 100, + 'financial_type_id' => 1, + 'payment_instrument' => 'Credit Card', + 'card_type_id' => $creditCardTypeIDs['Visa'], + 'pan_truncation' => 4567, + ); + $contribution = $this->callAPISuccess('contribution', 'create', $params); + $lastFinancialTrxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC'); + $financialTrxn = $this->callAPISuccessGetSingle( + 'FinancialTrxn', + array( + 'id' => $lastFinancialTrxnId['financialTrxnId'], + 'return' => array('card_type_id', 'pan_truncation'), + ) + ); + $this->assertEquals(CRM_Utils_Array::value('card_type_id', $financialTrxn), $creditCardTypeIDs['Visa']); + $this->assertEquals(CRM_Utils_Array::value('pan_truncation', $financialTrxn), 4567); + $params = array( + 'id' => $contribution['id'], + 'pan_truncation' => 2345, + 'card_type_id' => $creditCardTypeIDs['Amex'], + ); + $contribution = $this->callAPISuccess('contribution', 'create', $params); + $financialTrxn = $this->callAPISuccessGetSingle( + 'FinancialTrxn', + array( + 'id' => $lastFinancialTrxnId['financialTrxnId'], + 'return' => array('card_type_id', 'pan_truncation'), + ) + ); + $this->assertEquals(CRM_Utils_Array::value('card_type_id', $financialTrxn), $creditCardTypeIDs['Amex']); + $this->assertEquals(CRM_Utils_Array::value('pan_truncation', $financialTrxn), 2345); + } + }