Start to tighten open-ended 'return' in tests
authorEileen McNaughton <emcnaughton@wikimedia.org>
Sat, 19 Jun 2021 23:14:45 +0000 (11:14 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Sun, 20 Jun 2021 02:24:16 +0000 (14:24 +1200)
Civi/Test/Api3TestTrait.php
tests/phpunit/CiviTest/CiviUnitTestCase.php

index f544be76f255ca598e86ae890a8011560c646606..58e5563a0379acb95edfa39d086724e8eeff4c80 100644 (file)
@@ -228,6 +228,9 @@ trait Api3TestTrait {
     $params += [
       'version' => $this->_apiversion,
     ];
+    if (!empty($this->isGetSafe) && !isset($params['return'])) {
+      $params['return'] = 'id';
+    }
     $result = $this->civicrm_api($entity, 'getsingle', $params);
     if (!is_array($result) || !empty($result['is_error']) || isset($result['values'])) {
       $unfilteredResult = $this->civicrm_api($entity, 'get', ['version' => $this->_apiversion]);
index d7eb28e6594afd11a1d80ee6abe7828a0192aa79..b55abcc37425a4015337810a0899201c7c72a44f 100644 (file)
@@ -162,6 +162,23 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
    */
   protected $isLocationTypesOnPostAssert = TRUE;
 
+  /**
+   * Has the test class been verified as 'getsafe'.
+   *
+   * If a class is getsafe it means that where
+   * callApiSuccess is called 'return' is specified or 'return' =>'id'
+   * can be added by that function. This is part of getting away
+   * from open-ended get calls.
+   *
+   * Eventually we want to not be doing these in our test classes & start
+   * to work to not do them in our main code base. Note they mainly
+   * cause issues for activity.get and contact.get as these are where the
+   * too many joins limit is most likely to be hit.
+   *
+   * @var bool
+   */
+  protected $isGetSafe = FALSE;
+
   /**
    * Class used for hooks during tests.
    *