Update all payment tests to ensure entity financial items created
authoreileen <emcnaughton@wikimedia.org>
Sat, 2 Nov 2019 02:00:45 +0000 (15:00 +1300)
committereileen <emcnaughton@wikimedia.org>
Tue, 5 Nov 2019 21:01:48 +0000 (10:01 +1300)
Alsothwe had tests for this it turns out they were only checking that they were correct IF created. This
ensures they also exist & is a sanity check to run at the end of tests. The two failing tests are
really failing :-(

tests/phpunit/CRM/Contribute/Form/AdditionalPaymentTest.php
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/api/v3/PaymentTest.php

index 85101096a7fa7b974da6a11931a5ef9f03c16ec7..a13d7b4020accc7cdfa7ec2aa6386abb306968a9 100644 (file)
@@ -161,6 +161,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
 
     $mut->stop();
     $mut->clearMessages();
+    $this->validateAllPayments();
   }
 
   /**
@@ -175,6 +176,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
     // pay additional amount
     $this->submitPayment(70);
     $this->checkResults([30, 70], 2);
+    $this->validateAllPayments();
   }
 
   /**
@@ -207,6 +209,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
     $this->assertEquals(CRM_Core_Session::singleton()->getLoggedInContactID(), $activities[0]['source_contact_id']);
     $this->assertEquals([$this->_individualId], $activities[0]['target_contact_id']);
     $this->assertEquals([], $activities[0]['assignee_contact_id']);
+    $this->validateAllPayments();
   }
 
   /**
@@ -251,6 +254,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
     ]);
     $mut->stop();
     $mut->clearMessages();
+    $this->validateAllPayments();
   }
 
   /**
@@ -281,6 +285,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
     ]);
     $mut->stop();
     $mut->clearMessages();
+    $this->validateAllPayments();
   }
 
   /**
@@ -303,6 +308,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
     // pay additional amount
     $this->submitPayment(30);
     $this->checkResults([30, 70], 2);
+    $this->validateAllPayments();
   }
 
   /**
@@ -320,6 +326,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
     $contributionMembership = $this->callAPISuccessGetSingle('Membership', ['id' => $membership['id']]);
     $membershipStatus = $this->callAPISuccessGetSingle('MembershipStatus', ['id' => $contributionMembership['status_id']]);
     $this->assertEquals('New', $membershipStatus['name']);
+    $this->validateAllPayments();
   }
 
   /**
@@ -385,6 +392,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
 
     $this->submitPayment(10);
     $this->checkResults([40, 20, 30, 10], 4);
+    $this->validateAllPayments();
   }
 
   /**
@@ -411,6 +419,7 @@ class CRM_Contribute_Form_AdditionalPaymentTest extends CiviUnitTestCase {
 
     $this->submitPayment(10, 'live');
     $this->checkResults([50, 20, 20, 10], 4);
+    $this->validateAllPayments();
   }
 
   /**
index d83e6ce442c5596b609c14b951e9feb84351d83c..fc6452fc8e6d15b24a79018703fb31f627806a02 100644 (file)
@@ -3360,4 +3360,34 @@ AND    ( TABLE_NAME LIKE 'civicrm_value_%' )
     return $orderParams;
   }
 
+  /**
+   * @param $payments
+   *
+   * @throws \CRM_Core_Exception
+   */
+  protected function validatePayments($payments) {
+    foreach ($payments as $payment) {
+      $items = $this->callAPISuccess('EntityFinancialTrxn', 'get', [
+        'financial_trxn_id' => $payment['id'],
+        'entity_table' => 'civicrm_financial_item',
+        'return' => ['amount'],
+      ])['values'];
+      $itemTotal = 0;
+      foreach ($items as $item) {
+        $itemTotal += $item['amount'];
+      }
+      $this->assertEquals($payment['total_amount'], $itemTotal);
+    }
+  }
+
+  /**
+   * Validate all created payments.
+   *
+   * @throws \CRM_Core_Exception
+   */
+  protected function validateAllPayments() {
+    $payments = $this->callAPISuccess('Payment', 'get', ['options' => ['limit' => 0]])['values'];
+    $this->validatePayments($payments);
+  }
+
 }
index 02026b7150c68341271f397478c0200c754eaec6..69bdb70677dd8ff312bdbc8c0af4478d9870c24e 100644 (file)
@@ -38,12 +38,10 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
 
   protected $_financialTypeId = 1;
 
-  protected $_apiversion;
-
-  public $debug = 0;
-
   /**
    * Setup function.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function setUp() {
     parent::setUp();
@@ -67,6 +65,8 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
 
   /**
    * Test Get Payment api.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function testGetPayment() {
     $p = [
@@ -105,10 +105,13 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     $this->callAPISuccess('Contribution', 'Delete', [
       'id' => $contribution['id'],
     ]);
+    $this->validateAllPayments();
   }
 
   /**
    * Retrieve Payment using trxn_id.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function testGetPaymentWithTrxnID() {
     $this->_individualId2 = $this->individualCreate();
@@ -151,10 +154,13 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
       ],
     ];
     $this->checkPaymentResult($payment, $expectedResult);
+    $this->validateAllPayments();
   }
 
   /**
    * Test email receipt for partial payment.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function testPaymentEmailReceipt() {
     $mut = new CiviMailUtils($this);
@@ -196,6 +202,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
     $mut->stop();
     $mut->clearMessages();
+    $this->validateAllPayments();
   }
 
   /**
@@ -229,6 +236,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
     $mut->stop();
     $mut->clearMessages();
+    $this->validateAllPayments();
   }
 
   /**
@@ -237,6 +245,8 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
    * @dataProvider getThousandSeparators
    *
    * @param string $thousandSeparator
+   *
+   * @throws \CRM_Core_Exception
    */
   public function testRefundEmailReceipt($thousandSeparator) {
     $this->setCurrencySeparators($thousandSeparator);
@@ -282,6 +292,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
     $mut->stop();
     $mut->clearMessages();
+    $this->validateAllPayments();
   }
 
   /**
@@ -295,6 +306,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
       'order_id' => $order['id'],
       'total_amount' => 50,
     ]);
+    $this->validateAllPayments();
   }
 
   /**
@@ -373,6 +385,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     $this->callAPISuccess('Contribution', 'Delete', [
       'id' => $contribution['id'],
     ]);
+    $this->validateAllPayments();
   }
 
   /**
@@ -461,9 +474,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     $participantPayment = $this->callAPISuccess('ParticipantPayment', 'getsingle', $paymentParticipant);
     $participant = $this->callAPISuccess('participant', 'get', ['id' => $participantPayment['participant_id']]);
     $this->assertEquals($participant['values'][$participant['id']]['participant_status'], 'Registered');
-    $this->callAPISuccess('Contribution', 'Delete', [
-      'id' => $contribution['id'],
-    ]);
+    $this->validateAllPayments();
   }
 
   /**
@@ -502,10 +513,13 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     $this->callAPISuccess('Contribution', 'Delete', [
       'id' => $contribution['id'],
     ]);
+    $this->validateAllPayments();
   }
 
   /**
    * Test delete payment api
+   *
+   * @throws \CRM_Core_Exception
    */
   public function testDeletePayment() {
     CRM_Core_Config::singleton()->userPermissionClass->permissions = ['administer CiviCRM', 'access CiviContribute'];
@@ -662,10 +676,13 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     $this->callAPISuccess('Contribution', 'Delete', [
       'id' => $contribution['id'],
     ]);
+    $this->validateAllPayments();
   }
 
   /**
    * Test create payment api for paylater contribution
+   *
+   * @throws \CRM_Core_Exception
    */
   public function testCreatePaymentPayLater() {
     $this->createLoggedInUser();
@@ -726,12 +743,14 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     $this->callAPISuccess('Contribution', 'Delete', [
       'id' => $contribution['id'],
     ]);
+    $this->validateAllPayments();
   }
 
   /**
    * Test create payment api for pay later contribution with partial payment.
    *
    * https://lab.civicrm.org/dev/financial/issues/69
+   * @throws \CRM_Core_Exception
    */
   public function testCreatePaymentIncompletePaymentPartialPayment() {
     $contributionParams = [
@@ -749,6 +768,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
     $payments = $this->callAPISuccess('Payment', 'get', ['contribution_id' => $contribution['id']])['values'];
     $this->assertCount(1, $payments);
+    $this->validateAllPayments();
   }
 
   /**
@@ -839,6 +859,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
     $this->callAPISuccess('OptionValue', 'get', ['name' => 'Completed', 'option_group_id' => 'contribution_status', 'api.OptionValue.create' => ['label' => 'Completed']]);
     $this->callAPISuccessGetCount('Activity', ['target_contact_id' => $this->_individualId, 'activity_type_id' => 'Payment'], 2);
+    $this->validateAllPayments();
   }
 
   /**
@@ -894,6 +915,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
       'loc_block_id' => $location['id'],
       'is_show_location' => TRUE,
     ]);
+    $this->validateAllPayments();
   }
 
   /**
@@ -922,6 +944,7 @@ class api_v3_PaymentTest extends CiviUnitTestCase {
     ]);
 
     $this->assertEquals($eft['values'][$eft['id']]['amount'], $amount);
+    $this->validateAllPayments();
   }
 
 }