4 +--------------------------------------------------------------------+
5 | Copyright CiviCRM LLC. All rights reserved. |
7 | This work is published under the GNU AGPLv3 license with some |
8 | permitted exceptions and without any warranty. For full license |
9 | and copyright information, see https://civicrm.org/licensing |
10 +--------------------------------------------------------------------+
16 * @copyright CiviCRM LLC https://civicrm.org/licensing
20 namespace api\v
4\Action
;
22 use Civi\Api4\Contact
;
23 use Civi\Api4\CustomField
;
24 use Civi\Api4\CustomGroup
;
29 class BasicCustomFieldTest
extends BaseCustomValueTest
{
31 public function testWithSingleField() {
33 $customGroup = CustomGroup
::create(FALSE)
34 ->addValue('name', 'MyIndividualFields')
35 ->addValue('extends', 'Individual')
39 CustomField
::create(FALSE)
40 ->addValue('label', 'FavColor')
41 ->addValue('custom_group_id', $customGroup['id'])
42 ->addValue('html_type', 'Text')
43 ->addValue('data_type', 'String')
46 // Individual fields should show up when contact_type = null|Individual but not other contact types
47 $getFields = Contact
::getFields(FALSE);
48 $this->assertContains('MyIndividualFields.FavColor', $getFields->execute()->column('name'));
49 $this->assertContains('MyIndividualFields.FavColor', $getFields->setValues(['contact_type' => 'Individual'])->execute()->column('name'));
50 $this->assertNotContains('MyIndividualFields.FavColor', $getFields->setValues(['contact_type' => 'Household'])->execute()->column('name'));
52 $contactId = Contact
::create(FALSE)
53 ->addValue('first_name', 'Johann')
54 ->addValue('last_name', 'Tester')
55 ->addValue('contact_type', 'Individual')
56 ->addValue('MyIndividualFields.FavColor', 'Red')
60 $contact = Contact
::get(FALSE)
61 ->addSelect('first_name')
62 ->addSelect('MyIndividualFields.FavColor')
63 ->addWhere('id', '=', $contactId)
64 ->addWhere('MyIndividualFields.FavColor', '=', 'Red')
68 $this->assertEquals('Red', $contact['MyIndividualFields.FavColor']);
71 ->addWhere('id', '=', $contactId)
72 ->addValue('MyIndividualFields.FavColor', 'Blue')
75 $contact = Contact
::get(FALSE)
76 ->addSelect('MyIndividualFields.FavColor')
77 ->addWhere('id', '=', $contactId)
81 $this->assertEquals('Blue', $contact['MyIndividualFields.FavColor']);
84 public function testWithTwoFields() {
87 CustomGroup
::create(FALSE)
88 ->addValue('name', 'MyContactFields')
89 ->addValue('extends', 'Contact')
90 ->addChain('field1', CustomField
::create()
91 ->addValue('label', 'FavColor')
92 ->addValue('custom_group_id', '$id')
93 ->addValue('html_type', 'Text')
94 ->addValue('data_type', 'String'))
95 ->addChain('field2', CustomField
::create()
96 ->addValue('label', 'FavFood')
97 ->addValue('custom_group_id', '$id')
98 ->addValue('html_type', 'Text')
99 ->addValue('data_type', 'String'))
103 CustomGroup
::create(FALSE)
104 ->addValue('name', 'MyContactFields2')
105 ->addValue('extends', 'Contact')
106 ->addChain('field1', CustomField
::create()
107 ->addValue('label', 'FavColor')
108 ->addValue('custom_group_id', '$id')
109 ->addValue('html_type', 'Text')
110 ->addValue('data_type', 'String'))
111 ->addChain('field2', CustomField
::create()
112 ->addValue('label', 'FavFood')
113 ->addValue('custom_group_id', '$id')
114 ->addValue('html_type', 'Text')
115 ->addValue('data_type', 'String'))
118 $contactId1 = Contact
::create(FALSE)
119 ->addValue('first_name', 'Johann')
120 ->addValue('last_name', 'Tester')
121 ->addValue('MyContactFields.FavColor', 'Red')
122 ->addValue('MyContactFields.FavFood', 'Cherry')
126 $contactId2 = Contact
::create(FALSE)
127 ->addValue('first_name', 'MaryLou')
128 ->addValue('last_name', 'Tester')
129 ->addValue('MyContactFields.FavColor', 'Purple')
130 ->addValue('MyContactFields.FavFood', 'Grapes')
134 $contact = Contact
::get(FALSE)
135 ->addSelect('first_name')
136 ->addSelect('MyContactFields.FavColor')
137 ->addSelect('MyContactFields.FavFood')
138 ->addWhere('id', '=', $contactId1)
139 ->addWhere('MyContactFields.FavColor', '=', 'Red')
140 ->addWhere('MyContactFields.FavFood', '=', 'Cherry')
144 $this->assertArrayHasKey('MyContactFields.FavColor', $contact);
145 $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
147 // Update 2nd set and ensure 1st hasn't changed
149 ->addWhere('id', '=', $contactId1)
150 ->addValue('MyContactFields2.FavColor', 'Orange')
151 ->addValue('MyContactFields2.FavFood', 'Tangerine')
153 $contact = Contact
::get(FALSE)
154 ->addSelect('MyContactFields.FavColor', 'MyContactFields2.FavColor', 'MyContactFields.FavFood', 'MyContactFields2.FavFood')
155 ->addWhere('id', '=', $contactId1)
158 $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
159 $this->assertEquals('Orange', $contact['MyContactFields2.FavColor']);
160 $this->assertEquals('Cherry', $contact['MyContactFields.FavFood']);
161 $this->assertEquals('Tangerine', $contact['MyContactFields2.FavFood']);
163 // Update 1st set and ensure 2st hasn't changed
165 ->addWhere('id', '=', $contactId1)
166 ->addValue('MyContactFields.FavColor', 'Blue')
168 $contact = Contact
::get(FALSE)
169 ->addSelect('MyContactFields.FavColor', 'MyContactFields2.FavColor', 'MyContactFields.FavFood', 'MyContactFields2.FavFood')
170 ->addWhere('id', '=', $contactId1)
173 $this->assertEquals('Blue', $contact['MyContactFields.FavColor']);
174 $this->assertEquals('Orange', $contact['MyContactFields2.FavColor']);
175 $this->assertEquals('Cherry', $contact['MyContactFields.FavFood']);
176 $this->assertEquals('Tangerine', $contact['MyContactFields2.FavFood']);
178 $search = Contact
::get(FALSE)
179 ->addClause('OR', ['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes'])
185 $this->assertEquals([$contactId1, $contactId2], array_keys((array) $search));
187 $search = Contact
::get(FALSE)
188 ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes'])
194 $this->assertNotContains($contactId2, array_keys((array) $search));
196 $search = Contact
::get(FALSE)
197 ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes'])
203 $this->assertContains($contactId1, array_keys((array) $search));
204 $this->assertNotContains($contactId2, array_keys((array) $search));
206 $search = Contact
::get(FALSE)
207 ->setWhere([['NOT', ['OR', [['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes']]]]])
213 $this->assertNotContains($contactId1, array_keys((array) $search));
214 $this->assertNotContains($contactId2, array_keys((array) $search));