From cdf2ba9d15239068ea2218778173a4f0613490ba Mon Sep 17 00:00:00 2001
From: Rich Lott / Artful Robot <forums@artfulrobot.uk>
Date: Sat, 23 Nov 2019 08:47:09 +0000
Subject: [PATCH] Fix tests

---
 CRM/Dataprocessor/DAO/DataProcessor.php       |  4 +-
 CRM/Dataprocessor/DAO/DataProcessorField.php  |  5 +-
 CRM/Dataprocessor/DAO/DataProcessorFilter.php |  5 +-
 CRM/Dataprocessor/DAO/DataProcessorOutput.php |  5 +-
 CRM/Dataprocessor/DAO/DataProcessorSource.php |  5 +-
 Civi/DataProcessor/Output/UIOutputHelper.php  |  8 +++
 dataprocessor.civix.php                       | 51 ++++++++++---------
 .../Dataprocessor/ImportDataProcessorTest.php |  4 +-
 tests/phpunit/CRM/Dataprocessor/TestBase.php  |  5 +-
 9 files changed, 56 insertions(+), 36 deletions(-)

diff --git a/CRM/Dataprocessor/DAO/DataProcessor.php b/CRM/Dataprocessor/DAO/DataProcessor.php
index 0a2da39a..e7cf9657 100644
--- a/CRM/Dataprocessor/DAO/DataProcessor.php
+++ b/CRM/Dataprocessor/DAO/DataProcessor.php
@@ -4,9 +4,9 @@
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2019
  *
- * Generated from /buildkit/build/search/web/sites/all/modules/civicrm/tools/extensions/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessor.xml
+ * Generated from /buildkit/build/dmaster/sites/default/files/civicrm/ext/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessor.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d6907bd0c85e77ce033cc7aef3d0aa3a)
+ * (GenCodeChecksum:0963e22b20916c48e9e2f9ab6a2b3845)
  */
 
 /**
diff --git a/CRM/Dataprocessor/DAO/DataProcessorField.php b/CRM/Dataprocessor/DAO/DataProcessorField.php
index d4c03939..0bf75bcf 100644
--- a/CRM/Dataprocessor/DAO/DataProcessorField.php
+++ b/CRM/Dataprocessor/DAO/DataProcessorField.php
@@ -4,9 +4,9 @@
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2019
  *
- * Generated from /buildkit/build/search/web/sites/all/modules/civicrm/tools/extensions/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorField.xml
+ * Generated from /buildkit/build/dmaster/sites/default/files/civicrm/ext/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorField.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d274dcffe6113de94c614b35f32dc06b)
+ * (GenCodeChecksum:d5389a48546e169033f2adf9c1997062)
  */
 
 /**
@@ -120,6 +120,7 @@ class CRM_Dataprocessor_DAO_DataProcessorField extends CRM_Core_DAO {
           'entity' => 'DataProcessorField',
           'bao' => 'CRM_Dataprocessor_DAO_DataProcessorField',
           'localizable' => 0,
+          'FKClassName' => 'CRM_Dataprocessor_DAO_DataProcessor',
         ],
         'weight' => [
           'name' => 'weight',
diff --git a/CRM/Dataprocessor/DAO/DataProcessorFilter.php b/CRM/Dataprocessor/DAO/DataProcessorFilter.php
index f8db5256..60fdb1dd 100644
--- a/CRM/Dataprocessor/DAO/DataProcessorFilter.php
+++ b/CRM/Dataprocessor/DAO/DataProcessorFilter.php
@@ -4,9 +4,9 @@
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2019
  *
- * Generated from /buildkit/build/search/web/sites/all/modules/civicrm/tools/extensions/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorFilter.xml
+ * Generated from /buildkit/build/dmaster/sites/default/files/civicrm/ext/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorFilter.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:24f21f0d15aa13b3b28792ad454e68e8)
+ * (GenCodeChecksum:5811dcf05d6329b04f426920538c3661)
  */
 
 /**
@@ -135,6 +135,7 @@ class CRM_Dataprocessor_DAO_DataProcessorFilter extends CRM_Core_DAO {
           'entity' => 'DataProcessorFilter',
           'bao' => 'CRM_Dataprocessor_DAO_DataProcessorFilter',
           'localizable' => 0,
+          'FKClassName' => 'CRM_Dataprocessor_DAO_DataProcessor',
         ],
         'weight' => [
           'name' => 'weight',
diff --git a/CRM/Dataprocessor/DAO/DataProcessorOutput.php b/CRM/Dataprocessor/DAO/DataProcessorOutput.php
index 9651e89a..aceb1505 100644
--- a/CRM/Dataprocessor/DAO/DataProcessorOutput.php
+++ b/CRM/Dataprocessor/DAO/DataProcessorOutput.php
@@ -4,9 +4,9 @@
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2019
  *
- * Generated from /buildkit/build/search/web/sites/all/modules/civicrm/tools/extensions/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorOutput.xml
+ * Generated from /buildkit/build/dmaster/sites/default/files/civicrm/ext/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorOutput.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:b084899f5823b297a409b16cc41bdf7a)
+ * (GenCodeChecksum:811c729e9dd8df469a391ef9392ee624)
  */
 
 /**
@@ -125,6 +125,7 @@ class CRM_Dataprocessor_DAO_DataProcessorOutput extends CRM_Core_DAO {
           'entity' => 'DataProcessorOutput',
           'bao' => 'CRM_Dataprocessor_DAO_DataProcessorOutput',
           'localizable' => 0,
+          'FKClassName' => 'CRM_Dataprocessor_DAO_DataProcessor',
         ],
         'type' => [
           'name' => 'type',
diff --git a/CRM/Dataprocessor/DAO/DataProcessorSource.php b/CRM/Dataprocessor/DAO/DataProcessorSource.php
index 5aab7945..c9aa0ccf 100644
--- a/CRM/Dataprocessor/DAO/DataProcessorSource.php
+++ b/CRM/Dataprocessor/DAO/DataProcessorSource.php
@@ -4,9 +4,9 @@
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2019
  *
- * Generated from /buildkit/build/search/web/sites/all/modules/civicrm/tools/extensions/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorSource.xml
+ * Generated from /buildkit/build/dmaster/sites/default/files/civicrm/ext/dataprocessor/xml/schema/CRM/Dataprocessor/DataProcessorSource.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:8b610b28b2023badbccde15e8fa1010d)
+ * (GenCodeChecksum:c3767f626a9a361ecebe5385f6653d6f)
  */
 
 /**
@@ -130,6 +130,7 @@ class CRM_Dataprocessor_DAO_DataProcessorSource extends CRM_Core_DAO {
           'entity' => 'DataProcessorSource',
           'bao' => 'CRM_Dataprocessor_DAO_DataProcessorSource',
           'localizable' => 0,
+          'FKClassName' => 'CRM_Dataprocessor_DAO_DataProcessor',
         ],
         'weight' => [
           'name' => 'weight',
diff --git a/Civi/DataProcessor/Output/UIOutputHelper.php b/Civi/DataProcessor/Output/UIOutputHelper.php
index f42d17a2..9b98dcd6 100644
--- a/Civi/DataProcessor/Output/UIOutputHelper.php
+++ b/Civi/DataProcessor/Output/UIOutputHelper.php
@@ -66,6 +66,10 @@ class UIOutputHelper {
    */
   public static function preHook($op, $objectName, $id, &$params) {
     if ($objectName == 'DataProcessorOutput') {
+      // Disable this hook in unit tests because the menu rebuild it causes breaks transactions.
+      if (CIVICRM_UF === 'UnitTests') {
+        return;
+      }
       if ($op == 'delete') {
         $output = civicrm_api3('DataProcessorOutput', 'getsingle', ['id' => $id]);
         self::removeOutputFromNavigation($output['configuration']);
@@ -141,6 +145,10 @@ class UIOutputHelper {
     if ($objectName != 'DataProcessorOutput') {
       return;
     }
+    // Disable this hook in unit tests because the menu rebuild it causes breaks transactions.
+    if (CIVICRM_UF === 'UnitTests') {
+      return;
+    }
 
     if (self::$rebuildMenu) {
       // Rebuild the CiviCRM Menu (which holds all the pages)
diff --git a/dataprocessor.civix.php b/dataprocessor.civix.php
index ca12f343..950e7f54 100644
--- a/dataprocessor.civix.php
+++ b/dataprocessor.civix.php
@@ -24,9 +24,9 @@ class CRM_Dataprocessor_ExtensionUtil {
    *   Translated text.
    * @see ts
    */
-  public static function ts($text, $params = array()) {
+  public static function ts($text, $params = []) {
     if (!array_key_exists('domain', $params)) {
-      $params['domain'] = array(self::LONG_NAME, NULL);
+      $params['domain'] = [self::LONG_NAME, NULL];
     }
     return ts($text, $params);
   }
@@ -100,7 +100,7 @@ function _dataprocessor_civix_civicrm_config(&$config = NULL) {
     array_unshift($template->template_dir, $extDir);
   }
   else {
-    $template->template_dir = array($extDir, $template->template_dir);
+    $template->template_dir = [$extDir, $template->template_dir];
   }
 
   $include_path = $extRoot . PATH_SEPARATOR . get_include_path();
@@ -140,7 +140,7 @@ function _dataprocessor_civix_civicrm_install() {
 function _dataprocessor_civix_civicrm_postInstall() {
   _dataprocessor_civix_civicrm_config();
   if ($upgrader = _dataprocessor_civix_upgrader()) {
-    if (is_callable(array($upgrader, 'onPostInstall'))) {
+    if (is_callable([$upgrader, 'onPostInstall'])) {
       $upgrader->onPostInstall();
     }
   }
@@ -166,7 +166,7 @@ function _dataprocessor_civix_civicrm_uninstall() {
 function _dataprocessor_civix_civicrm_enable() {
   _dataprocessor_civix_civicrm_config();
   if ($upgrader = _dataprocessor_civix_upgrader()) {
-    if (is_callable(array($upgrader, 'onEnable'))) {
+    if (is_callable([$upgrader, 'onEnable'])) {
       $upgrader->onEnable();
     }
   }
@@ -181,7 +181,7 @@ function _dataprocessor_civix_civicrm_enable() {
 function _dataprocessor_civix_civicrm_disable() {
   _dataprocessor_civix_civicrm_config();
   if ($upgrader = _dataprocessor_civix_upgrader()) {
-    if (is_callable(array($upgrader, 'onDisable'))) {
+    if (is_callable([$upgrader, 'onDisable'])) {
       $upgrader->onDisable();
     }
   }
@@ -217,22 +217,23 @@ function _dataprocessor_civix_upgrader() {
 }
 
 /**
- * Search directory tree for files which match a glob pattern
+ * Search directory tree for files which match a glob pattern.
  *
  * Note: Dot-directories (like "..", ".git", or ".svn") will be ignored.
  * Note: In Civi 4.3+, delegate to CRM_Utils_File::findFiles()
  *
- * @param $dir string, base dir
- * @param $pattern string, glob pattern, eg "*.txt"
+ * @param string $dir base dir
+ * @param string $pattern , glob pattern, eg "*.txt"
+ *
  * @return array(string)
  */
 function _dataprocessor_civix_find_files($dir, $pattern) {
-  if (is_callable(array('CRM_Utils_File', 'findFiles'))) {
+  if (is_callable(['CRM_Utils_File', 'findFiles'])) {
     return CRM_Utils_File::findFiles($dir, $pattern);
   }
 
-  $todos = array($dir);
-  $result = array();
+  $todos = [$dir];
+  $result = [];
   while (!empty($todos)) {
     $subdir = array_shift($todos);
     foreach (_dataprocessor_civix_glob("$subdir/$pattern") as $match) {
@@ -296,14 +297,13 @@ function _dataprocessor_civix_civicrm_caseTypes(&$caseTypes) {
     $name = preg_replace('/\.xml$/', '', basename($file));
     if ($name != CRM_Case_XMLProcessor::mungeCaseType($name)) {
       $errorMessage = sprintf("Case-type file name is malformed (%s vs %s)", $name, CRM_Case_XMLProcessor::mungeCaseType($name));
-      CRM_Core_Error::fatal($errorMessage);
-      // throw new CRM_Core_Exception($errorMessage);
+      throw new CRM_Core_Exception($errorMessage);
     }
-    $caseTypes[$name] = array(
+    $caseTypes[$name] = [
       'module' => E::LONG_NAME,
       'name' => $name,
       'file' => $file,
-    );
+    ];
   }
 }
 
@@ -361,11 +361,12 @@ function _dataprocessor_civix_civicrm_themes(&$themes) {
  *
  * @link http://php.net/glob
  * @param string $pattern
+ *
  * @return array, possibly empty
  */
 function _dataprocessor_civix_glob($pattern) {
   $result = glob($pattern);
-  return is_array($result) ? $result : array();
+  return is_array($result) ? $result : [];
 }
 
 /**
@@ -376,16 +377,18 @@ function _dataprocessor_civix_glob($pattern) {
  *    'Mailing', or 'Administer/System Settings'
  * @param array $item - the item to insert (parent/child attributes will be
  *    filled for you)
+ *
+ * @return bool
  */
 function _dataprocessor_civix_insert_navigation_menu(&$menu, $path, $item) {
   // If we are done going down the path, insert menu
   if (empty($path)) {
-    $menu[] = array(
-      'attributes' => array_merge(array(
+    $menu[] = [
+      'attributes' => array_merge([
         'label'      => CRM_Utils_Array::value('name', $item),
         'active'     => 1,
-      ), $item),
-    );
+      ], $item),
+    ];
     return TRUE;
   }
   else {
@@ -396,9 +399,9 @@ function _dataprocessor_civix_insert_navigation_menu(&$menu, $path, $item) {
     foreach ($menu as $key => &$entry) {
       if ($entry['attributes']['name'] == $first) {
         if (!isset($entry['child'])) {
-          $entry['child'] = array();
+          $entry['child'] = [];
         }
-        $found = _dataprocessor_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item, $key);
+        $found = _dataprocessor_civix_insert_navigation_menu($entry['child'], implode('/', $path), $item);
       }
     }
     return $found;
@@ -409,7 +412,7 @@ function _dataprocessor_civix_insert_navigation_menu(&$menu, $path, $item) {
  * (Delegated) Implements hook_civicrm_navigationMenu().
  */
 function _dataprocessor_civix_navigationMenu(&$nodes) {
-  if (!is_callable(array('CRM_Core_BAO_Navigation', 'fixNavigationMenu'))) {
+  if (!is_callable(['CRM_Core_BAO_Navigation', 'fixNavigationMenu'])) {
     _dataprocessor_civix_fixNavigationMenu($nodes);
   }
 }
diff --git a/tests/phpunit/CRM/Dataprocessor/ImportDataProcessorTest.php b/tests/phpunit/CRM/Dataprocessor/ImportDataProcessorTest.php
index 02947cc6..0e511fb5 100644
--- a/tests/phpunit/CRM/Dataprocessor/ImportDataProcessorTest.php
+++ b/tests/phpunit/CRM/Dataprocessor/ImportDataProcessorTest.php
@@ -77,8 +77,10 @@ class CRM_Dataprocessor_ImportDataProcessorTest extends CRM_Dataprocessor_TestBa
 
     $importCode = json_decode($configuration, TRUE);
     $importResult = CRM_Dataprocessor_Utils_Importer::import($importCode, '', true);
-    $id = $importResult['original_id'];
+
+    $id = $importResult['new_id'];
     $result = civicrm_api3('DataProcessor', 'get',  array("id"=> $id));
+
     $fields = civicrm_api3('DataProcessorField', 'get',  array("data_processor_id"=> $id));
     $datasource = civicrm_api3('DataProcessorSource', 'get',  array("data_processor_id"=> $id));
     $outputs = civicrm_api3('DataProcessorOutput', 'get',  array("data_processor_id"=> $id));
diff --git a/tests/phpunit/CRM/Dataprocessor/TestBase.php b/tests/phpunit/CRM/Dataprocessor/TestBase.php
index 291f626f..85ced743 100644
--- a/tests/phpunit/CRM/Dataprocessor/TestBase.php
+++ b/tests/phpunit/CRM/Dataprocessor/TestBase.php
@@ -62,10 +62,13 @@ class CRM_Dataprocessor_TestBase extends \PHPUnit\Framework\TestCase implements
     // See: https://docs.civicrm.org/dev/en/latest/testing/phpunit/#civitest
     return \Civi\Test::headless()
       ->installMe(__DIR__)
-      ->apply(TRUE);
+      ->apply(FALSE);
   }
 
   public function setUp() {
+    // This assertion is here to catch the issue previously caused in UIOutputHelper::postHook
+    // whereby running a test would break the transaction of the test and therefore leave
+    // a processor defined in the test databsae, corrupting the fixture for the next tests.
     $c = CRM_Core_DAO::singleValueQuery("SELECT count(*) FROM civicrm_data_processor");
     $this->assertEquals(0, $c, "setup: already $c data processors defined.");
     parent::setUp();
-- 
GitLab