(REF) ConformanceTest - Ensure that field-specs are consistent when converting to...
authorTim Otten <totten@civicrm.org>
Mon, 28 Jun 2021 23:57:45 +0000 (16:57 -0700)
committerTim Otten <totten@civicrm.org>
Fri, 16 Jul 2021 06:38:24 +0000 (23:38 -0700)
tests/phpunit/api/v4/Entity/ConformanceTest.php

index c03933de963f464dbcc91bac22c07fb58ea1a95a..2bf2386f5c64dc4d418eb3e66bee3fe66d509295 100644 (file)
@@ -23,6 +23,8 @@ use Civi\API\Exception\UnauthorizedException;
 use Civi\Api4\Entity;
 use api\v4\UnitTestCase;
 use Civi\Api4\Event\ValidateValuesEvent;
+use Civi\Api4\Service\Spec\CustomFieldSpec;
+use Civi\Api4\Service\Spec\FieldSpec;
 use Civi\Api4\Utils\CoreUtil;
 use Civi\Test\HookInterface;
 
@@ -193,6 +195,19 @@ class ConformanceTest extends UnitTestCase implements HookInterface {
 
     $this->assertArrayHasKey('data_type', $fields['id'], $errMsg);
     $this->assertEquals('Integer', $fields['id']['data_type']);
+
+    // Ensure that the getFields (FieldSpec) format is generally consistent.
+    foreach ($fields as $field) {
+      $isNotNull = function($v) {
+        return $v !== NULL;
+      };
+      $class = empty($field['custom_field_id']) ? FieldSpec::class : CustomFieldSpec::class;
+      $spec = (new $class($field['name'], $field['entity']))->loadArray($field, TRUE);
+      $this->assertEquals(
+        array_filter($field, $isNotNull),
+        array_filter($spec->toArray(), $isNotNull)
+      );
+    }
   }
 
   /**