Merge pull request #10157 from eileenmcnaughton/iida3
[civicrm-core.git] / tests / phpunit / api / v3 / ContributionTest.php
index 83d271a7554d932dc6a28e7756de34d92be71e73..9e36a6210dadb8e5d869f2ccad96ae6965b21758 100644 (file)
@@ -3118,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') {
@@ -3419,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.
    */
@@ -3577,4 +3615,47 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
     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);
+  }
+
 }