5 use Civi\Api4\Service\Spec\CustomFieldSpec
;
6 use Civi\Api4\Service\Spec\FieldSpec
;
7 use Civi\Api4\Service\Spec\RequestSpec
;
8 use Civi\Api4\Service\Spec\SpecFormatter
;
9 use api\v
4\UnitTestCase
;
14 class SpecFormatterTest
extends UnitTestCase
{
16 public function testSpecToArray() {
17 $spec = new RequestSpec('Contact', 'get');
18 $fieldName = 'last_name';
19 $field = new FieldSpec($fieldName, 'Contact');
20 $spec->addFieldSpec($field);
21 $arraySpec = SpecFormatter
::specToArray($spec->getFields());
23 $this->assertEquals('String', $arraySpec[$fieldName]['data_type']);
27 * @dataProvider arrayFieldSpecProvider
29 * @param array $fieldData
30 * @param string $expectedName
31 * @param string $expectedType
33 public function testArrayToField($fieldData, $expectedName, $expectedType) {
34 $field = SpecFormatter
::arrayToField($fieldData, 'TestEntity');
36 $this->assertEquals($expectedName, $field->getName());
37 $this->assertEquals($expectedType, $field->getDataType());
40 public function testCustomFieldWillBeReturned() {
41 $customGroupId = 1432;
42 $customFieldId = 3333;
43 $name = 'MyFancyField';
46 'custom_group_id' => $customGroupId,
47 'custom_group.name' => 'my_group',
48 'id' => $customFieldId,
50 'data_type' => 'String',
51 'html_type' => 'Multi-Select',
54 /** @var \Civi\Api4\Service\Spec\CustomFieldSpec $field */
55 $field = SpecFormatter
::arrayToField($data, 'TestEntity');
57 $this->assertInstanceOf(CustomFieldSpec
::class, $field);
58 $this->assertEquals('my_group', $field->getCustomGroupName());
59 $this->assertEquals($customFieldId, $field->getCustomFieldId());
60 $this->assertEquals(\CRM_Core_DAO
::SERIALIZE_SEPARATOR_BOOKEND
, $field->getSerialize());
61 $this->assertEquals('Select', $field->getInputType());
62 $this->assertTrue($field->getInputAttrs()['multiple']);
68 public function arrayFieldSpecProvider() {
74 'type' => \CRM_Utils_Type
::T_STRING
,
83 'type' => \CRM_Utils_Type
::T_STRING
,
84 // this should take precedence
85 'data_type' => 'Boolean',