Apiv4 - Fix setting defaults for Group.title and SearchDisplay.label
authorcolemanw <coleman@civicrm.org>
Sun, 8 Oct 2023 02:31:03 +0000 (22:31 -0400)
committercolemanw <coleman@civicrm.org>
Sun, 8 Oct 2023 07:33:42 +0000 (03:33 -0400)
CRM/Contact/BAO/Group.php
Civi/Test/Api4TestTrait.php
ext/search_kit/Civi/Api4/Service/Spec/Provider/SearchDisplayCreationSpecProvider.php
ext/search_kit/tests/phpunit/api/v4/SearchDisplay/SearchRunTest.php
tests/phpunit/api/v3/GroupTest.php

index 3a5b8b7b8196ce234697bd21f31efe2d99001c63..7c777557d7c500346e37aea28e2ef87f8187a7f3 100644 (file)
@@ -344,9 +344,11 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
       'parents' => NULL,
     ];
 
+    // Fill title and frontend_title if not supplied
+    if (empty($params['id']) && empty($params['title'])) {
+      $params['title'] = $params['frontend_title'] ?? $params['name'];
+    }
     if (empty($params['id']) && empty($params['frontend_title'])) {
-      // If we were calling writeRecord it would handle this, but we need
-      // to migrate the other bits of magic.
       $params['frontend_title'] = $params['title'];
     }
     $hook = empty($params['id']) ? 'create' : 'edit';
@@ -388,6 +390,8 @@ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group {
 
     // form the name only if missing: CRM-627
     $nameParam = $params['name'] ?? NULL;
+    // If we were calling writeRecord it would handle this, but we need
+    // to migrate the other bits of magic.
     if (!$nameParam && empty($params['id'])) {
       $params['name'] = CRM_Utils_String::titleToVar($params['title']);
     }
index b78e81c7b2985b3bfc7716e2492470e61d4583a1..80ae3c6ecfc7aa29444ef635bf34bb0ebe9db2b9 100644 (file)
@@ -130,9 +130,9 @@ trait Api4TestTrait {
     foreach ($requiredFields as $fieldName => $field) {
       if (
         !isset($values[$fieldName]) &&
-        ($field['required'] || AbstractAction::evaluateCondition($field['required_if'], $values + $extraValues))
+        ($field['required'] || AbstractAction::evaluateCondition($field['required_if'], ['values' => $values + $extraValues]))
       ) {
-        $extraValues[$fieldName] = $this->getRequiredValue($field, $requiredFields);
+        $extraValues[$fieldName] = $this->getRequiredValue($field);
       }
     }
 
index 963e63ef2dfaeb7d90a9d77be220b2020e873a04..618ecad57478e8a92451552a93d6b2e682cce387 100644 (file)
@@ -24,8 +24,7 @@ class SearchDisplayCreationSpecProvider extends \Civi\Core\Service\AutoService i
    * @inheritDoc
    */
   public function modifySpec(RequestSpec $spec) {
-    $spec->getFieldByName('name')->setRequired(FALSE)->setRequiredIf('empty($values.label)');
-    $spec->getFieldByName('label')->setRequired(FALSE)->setRequiredIf('empty($values.name)');
+    $spec->getFieldByName('name')->setRequired(FALSE);
   }
 
   /**
index 0dba79e9594a21cbd5f063fe097f0c5f72f5be1d..d25f36ced94f23deccb40a4cf0d6f60e900ebf07 100644 (file)
@@ -83,7 +83,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => TRUE,
@@ -197,7 +197,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => TRUE,
@@ -270,7 +270,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'actions' => TRUE,
           'pager' => [],
@@ -356,7 +356,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'actions' => TRUE,
           'pager' => [],
@@ -466,7 +466,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => TRUE,
@@ -556,7 +556,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => FALSE,
@@ -802,7 +802,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
           'saved_search_id' => '$id',
           'name' => $displayName,
           'type' => 'table',
-          'label' => '',
+          'label' => 'TestDisplay',
           'acl_bypass' => TRUE,
           'settings' => [
             'limit' => 20,
@@ -979,7 +979,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'list',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => TRUE,
@@ -1496,7 +1496,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'actions' => TRUE,
           'pager' => [],
@@ -1861,7 +1861,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'actions' => TRUE,
           'pager' => [],
@@ -1914,7 +1914,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => TRUE,
@@ -1952,7 +1952,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'actions' => TRUE,
           'pager' => [],
@@ -2072,7 +2072,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'actions' => TRUE,
           'pager' => [],
@@ -2162,7 +2162,7 @@ class SearchRunTest extends Api4TestBase implements TransactionalInterface {
       ],
       'display' => [
         'type' => 'table',
-        'label' => '',
+        'label' => 'tesdDisplay',
         'settings' => [
           'limit' => 20,
           'pager' => TRUE,
index f0d8fd5fa85571e4faca70c0e442dda9747b9ede..6ca4662cbf206a34e2494a533007fa043272510f 100644 (file)
@@ -42,30 +42,6 @@ class api_v3_GroupTest extends CiviUnitTestCase {
     parent::tearDown();
   }
 
-  /**
-   * Test missing required title parameter results in an error.
-   *
-   * @param int $version
-   *
-   * @dataProvider versionThreeAndFour
-   */
-  public function testGroupCreateNoTitle($version) {
-    $this->_apiversion = $version;
-    $params = [
-      'name' => 'Test Group No title ',
-      'domain_id' => 1,
-      'description' => 'New Test Group Created',
-      'is_active' => 1,
-      'visibility' => 'Public Pages',
-      'group_type' => [
-        '1' => 1,
-        '2' => 1,
-      ],
-    ];
-
-    $this->callAPIFailure('group', 'create', $params, 'title');
-  }
-
   /**
    * @param int $version
    *