Fix for intermittent test failure
authoreileen <emcnaughton@wikimedia.org>
Thu, 28 Jul 2016 02:14:16 +0000 (14:14 +1200)
committereileen <emcnaughton@wikimedia.org>
Thu, 28 Jul 2016 05:46:32 +0000 (17:46 +1200)
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/api/v3/JobTest.php

index fa833485124f48e71da5adc8c90fc141f907d6b1..f89c36ea1ca8e29bcac32b86e418cf5453938c68 100644 (file)
@@ -132,6 +132,15 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase {
    */
   protected $origExtensionSystem;
 
+  /**
+   * Array of IDs created during test setup routine.
+   *
+   * The cleanUpSetUpIds method can be used to clear these at the end of the test.
+   *
+   * @var array
+   */
+  public $setupIDs = array();
+
   /**
    *  Constructor.
    *
@@ -1137,7 +1146,7 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase {
   public function membershipTypeCreate($params = array()) {
     CRM_Member_PseudoConstant::flush('membershipType');
     CRM_Core_Config::clearDBCache();
-    $memberOfOrganization = $this->organizationCreate();
+    $this->setupIDs['contact'] = $memberOfOrganization = $this->organizationCreate();
     $params = array_merge(array(
       'name' => 'General',
       'duration_unit' => 'year',
@@ -3590,4 +3599,23 @@ AND    ( TABLE_NAME LIKE 'civicrm_value_%' )
     $this->callAPISuccessGetCount('FinancialItem', array('description' => 'Sales Tax', 'amount' => 0), 0);
   }
 
+  /**
+   * Cleanup function for contents of $this->ids.
+   *
+   * This is a best effort cleanup to use in tear downs etc.
+   *
+   * It will not fail if the data has already been removed (some tests may do
+   * their own cleanup).
+   */
+  protected function cleanUpSetUpIDs() {
+    foreach ($this->setupIDs as $entity => $id) {
+      try {
+        civicrm_api3($entity, 'delete', array('id' => $id, 'skip_undelete' => 1));
+      }
+      catch (CiviCRM_API3_Exception $e) {
+        // This is a best-effort cleanup function, ignore.
+      }
+    }
+  }
+
 }
index b5c964d4bd6b033a2c022404e83bbb9be7ea6611..ec1a2b5a851171c8ccc4cceaacb0f104bb4b4a98 100644 (file)
@@ -73,7 +73,9 @@ class api_v3_JobTest extends CiviUnitTestCase {
 
   public function tearDown() {
     parent::tearDown();
+    // The membershipType create breaks transactions so this extra cleanup is needed.
     $this->membershipTypeDelete(array('id' => $this->membershipTypeID));
+    $this->cleanUpIDs();
   }
 
   /**