Test fix up & add stuff to diagnose the cleanup issue
authorEileen McNaughton <emcnaughton@wikimedia.org>
Thu, 4 Aug 2022 06:54:23 +0000 (18:54 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Wed, 17 Aug 2022 07:30:39 +0000 (19:30 +1200)
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/api/v3/SettingTest.php

index b833c7253176a940b22fb4f806b7794512842e78..c7f04437871ac1afc9bc9551d435bc21825dd84c 100644 (file)
@@ -3934,4 +3934,33 @@ WHERE a1.is_primary = 0
     ])->execute()->first();
   }
 
+  /**
+   * Get an array of tables with rows - useful for diagnosing cleanup issues.
+   *
+   * @return array
+   */
+  protected function getTablesWithData(): array {
+    $dataObject = new CRM_Core_DAO();
+    $data = [];
+    $sql = CRM_Core_DAO::singleValueQuery("SELECT GROUP_CONCAT(
+      'SELECT \"',
+      table_name,
+      '\" AS table_name, COUNT(*) AS row_count FROM `',
+      table_schema,
+      '`.`',
+      table_name,
+      '`' SEPARATOR ' UNION  '
+    )
+FROM INFORMATION_SCHEMA.TABLES
+WHERE table_schema = '$dataObject->_database'");
+    $result = CRM_Core_DAO::executeQuery($sql);
+    while ($result->fetch()) {
+      $count = (int) $result->row_count;
+      if ($count > 0) {
+        $data[$result->table_name] = $count;
+      }
+    }
+    return $data;
+  }
+
 }
index 37d3ae2f4019f89716262abdc3c43e69b2aa3b32..5156ef7bd74948259a5c0ee729392c1124c6732f 100644 (file)
@@ -27,6 +27,9 @@ class api_v3_SettingTest extends CiviUnitTestCase {
   protected $domainID2;
   protected $domainID3;
 
+  /**
+   * @throws \CRM_Core_Exception
+   */
   public function setUp(): void {
     parent::setUp();
     $params = [
@@ -48,27 +51,44 @@ class api_v3_SettingTest extends CiviUnitTestCase {
     $this->hookClass = CRM_Utils_Hook::singleton();
   }
 
+  /**
+   * @throws \CRM_Core_Exception
+   */
   public function tearDown(): void {
-    CRM_Utils_Hook::singleton()->reset();
     parent::tearDown();
-    $this->callAPISuccess('system', 'flush', []);
-    CRM_Core_DAO::executeQuery('DELETE FROM civicrm_domain WHERE name LIKE "' . __CLASS__ . '%"');
+    try {
+      CRM_Core_DAO::executeQuery('
+        DELETE d, s, n, dc, m
+        FROM civicrm_domain d
+          INNER JOIN civicrm_setting s ON s.domain_id = d.id
+          INNER JOIN civicrm_navigation n ON n.domain_id = d.id
+          INNER JOIN civicrm_menu m ON m.domain_id = d.id
+          INNER JOIN civicrm_dashboard dc ON dc.domain_id = d.id
+        WHERE d.name LIKE "' . __CLASS__ . '%"
+     ');
+    }
+    catch (CRM_Core_Exception $e) {
+      $result = $this->getTablesWithData();
+      throw new CRM_Core_Exception($e->getMessage() . 'look to one of these tables to have the data ...' . print_r($result, TRUE));
+    }
   }
 
   /**
    * Set additional settings into metadata (implements hook)
+   *
    * @param array $metaDataFolders
    */
-  public function setExtensionMetadata(&$metaDataFolders) {
+  public function setExtensionMetadata(array &$metaDataFolders): void {
     global $civicrm_root;
     $metaDataFolders[] = $civicrm_root . '/tests/phpunit/api/v3/settings';
   }
 
   /**
    * @param int $version
+   *
    * @dataProvider versionThreeAndFour
    */
-  public function testGetFields($version) {
+  public function testGetFields(int $version): void {
     $this->_apiversion = $version;
     $description = 'Demonstrate return from getfields - see sub-folder for variants';
     $result = $this->callAPIAndDocument('setting', 'getfields', [], __FUNCTION__, __FILE__, $description);