Commit | Line | Data |
---|---|---|
19b53e5b C |
1 | <?php |
2 | ||
380f3545 TO |
3 | /* |
4 | +--------------------------------------------------------------------+ | |
7d61e75f | 5 | | Copyright CiviCRM LLC. All rights reserved. | |
380f3545 | 6 | | | |
7d61e75f TO |
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 | | |
380f3545 TO |
10 | +--------------------------------------------------------------------+ |
11 | */ | |
12 | ||
13 | /** | |
14 | * | |
15 | * @package CRM | |
ca5cec67 | 16 | * @copyright CiviCRM LLC https://civicrm.org/licensing |
380f3545 TO |
17 | * $Id$ |
18 | * | |
19 | */ | |
20 | ||
21 | ||
19b53e5b C |
22 | namespace api\v4\Action; |
23 | ||
24 | use Civi\Api4\Contact; | |
25 | use Civi\Api4\CustomField; | |
26 | use Civi\Api4\CustomGroup; | |
27 | ||
28 | /** | |
29 | * @group headless | |
30 | */ | |
31 | class BasicCustomFieldTest extends BaseCustomValueTest { | |
32 | ||
33 | public function testWithSingleField() { | |
34 | ||
35 | $customGroup = CustomGroup::create() | |
36 | ->setCheckPermissions(FALSE) | |
c752d94b CW |
37 | ->addValue('name', 'MyIndividualFields') |
38 | ->addValue('extends', 'Individual') | |
19b53e5b C |
39 | ->execute() |
40 | ->first(); | |
41 | ||
42 | CustomField::create() | |
43 | ->setCheckPermissions(FALSE) | |
44 | ->addValue('label', 'FavColor') | |
45 | ->addValue('custom_group_id', $customGroup['id']) | |
46 | ->addValue('html_type', 'Text') | |
47 | ->addValue('data_type', 'String') | |
48 | ->execute(); | |
49 | ||
c752d94b CW |
50 | // Individual fields should show up when contact_type = null|Individual but not other contact types |
51 | $getFields = Contact::getFields()->setCheckPermissions(FALSE); | |
52 | $this->assertContains('MyIndividualFields.FavColor', $getFields->execute()->column('name')); | |
53 | $this->assertContains('MyIndividualFields.FavColor', $getFields->setValues(['contact_type' => 'Individual'])->execute()->column('name')); | |
54 | $this->assertNotContains('MyIndividualFields.FavColor', $getFields->setValues(['contact_type' => 'Household'])->execute()->column('name')); | |
55 | ||
19b53e5b C |
56 | $contactId = Contact::create() |
57 | ->setCheckPermissions(FALSE) | |
58 | ->addValue('first_name', 'Johann') | |
59 | ->addValue('last_name', 'Tester') | |
60 | ->addValue('contact_type', 'Individual') | |
c752d94b | 61 | ->addValue('MyIndividualFields.FavColor', 'Red') |
19b53e5b C |
62 | ->execute() |
63 | ->first()['id']; | |
64 | ||
65 | $contact = Contact::get() | |
66 | ->setCheckPermissions(FALSE) | |
67 | ->addSelect('first_name') | |
c752d94b | 68 | ->addSelect('MyIndividualFields.FavColor') |
19b53e5b | 69 | ->addWhere('id', '=', $contactId) |
c752d94b | 70 | ->addWhere('MyIndividualFields.FavColor', '=', 'Red') |
19b53e5b C |
71 | ->execute() |
72 | ->first(); | |
73 | ||
c752d94b | 74 | $this->assertEquals('Red', $contact['MyIndividualFields.FavColor']); |
19b53e5b C |
75 | |
76 | Contact::update() | |
77 | ->addWhere('id', '=', $contactId) | |
c752d94b | 78 | ->addValue('MyIndividualFields.FavColor', 'Blue') |
19b53e5b C |
79 | ->execute(); |
80 | ||
81 | $contact = Contact::get() | |
82 | ->setCheckPermissions(FALSE) | |
c752d94b | 83 | ->addSelect('MyIndividualFields.FavColor') |
19b53e5b C |
84 | ->addWhere('id', '=', $contactId) |
85 | ->execute() | |
86 | ->first(); | |
87 | ||
c752d94b | 88 | $this->assertEquals('Blue', $contact['MyIndividualFields.FavColor']); |
19b53e5b C |
89 | } |
90 | ||
91 | public function testWithTwoFields() { | |
92 | ||
93 | $customGroup = CustomGroup::create() | |
94 | ->setCheckPermissions(FALSE) | |
95 | ->addValue('name', 'MyContactFields') | |
96 | ->addValue('extends', 'Contact') | |
97 | ->execute() | |
98 | ->first(); | |
99 | ||
100 | CustomField::create() | |
101 | ->setCheckPermissions(FALSE) | |
102 | ->addValue('label', 'FavColor') | |
103 | ->addValue('custom_group_id', $customGroup['id']) | |
104 | ->addValue('html_type', 'Text') | |
105 | ->addValue('data_type', 'String') | |
106 | ->execute(); | |
107 | ||
108 | CustomField::create() | |
109 | ->setCheckPermissions(FALSE) | |
110 | ->addValue('label', 'FavFood') | |
111 | ->addValue('custom_group_id', $customGroup['id']) | |
112 | ->addValue('html_type', 'Text') | |
113 | ->addValue('data_type', 'String') | |
114 | ->execute(); | |
115 | ||
116 | $contactId1 = Contact::create() | |
117 | ->setCheckPermissions(FALSE) | |
118 | ->addValue('first_name', 'Johann') | |
119 | ->addValue('last_name', 'Tester') | |
120 | ->addValue('MyContactFields.FavColor', 'Red') | |
121 | ->addValue('MyContactFields.FavFood', 'Cherry') | |
122 | ->execute() | |
123 | ->first()['id']; | |
124 | ||
125 | $contactId2 = Contact::create() | |
126 | ->setCheckPermissions(FALSE) | |
127 | ->addValue('first_name', 'MaryLou') | |
128 | ->addValue('last_name', 'Tester') | |
129 | ->addValue('MyContactFields.FavColor', 'Purple') | |
130 | ->addValue('MyContactFields.FavFood', 'Grapes') | |
131 | ->execute() | |
132 | ->first()['id']; | |
133 | ||
134 | $contact = Contact::get() | |
135 | ->setCheckPermissions(FALSE) | |
136 | ->addSelect('first_name') | |
137 | ->addSelect('MyContactFields.FavColor') | |
138 | ->addSelect('MyContactFields.FavFood') | |
139 | ->addWhere('id', '=', $contactId1) | |
140 | ->addWhere('MyContactFields.FavColor', '=', 'Red') | |
141 | ->addWhere('MyContactFields.FavFood', '=', 'Cherry') | |
142 | ->execute() | |
143 | ->first(); | |
144 | ||
145 | $this->assertArrayHasKey('MyContactFields.FavColor', $contact); | |
146 | $this->assertEquals('Red', $contact['MyContactFields.FavColor']); | |
147 | ||
148 | Contact::update() | |
149 | ->addWhere('id', '=', $contactId1) | |
150 | ->addValue('MyContactFields.FavColor', 'Blue') | |
151 | ->execute(); | |
152 | ||
153 | $contact = Contact::get() | |
154 | ->setCheckPermissions(FALSE) | |
155 | ->addSelect('MyContactFields.FavColor') | |
156 | ->addWhere('id', '=', $contactId1) | |
157 | ->execute() | |
158 | ->first(); | |
159 | ||
160 | $this->assertEquals('Blue', $contact['MyContactFields.FavColor']); | |
161 | ||
162 | $search = Contact::get() | |
163 | ->setCheckPermissions(FALSE) | |
164 | ->addClause('OR', ['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes']) | |
165 | ->addSelect('id') | |
166 | ->addOrderBy('id') | |
167 | ->execute() | |
168 | ->indexBy('id'); | |
169 | ||
170 | $this->assertEquals([$contactId1, $contactId2], array_keys((array) $search)); | |
171 | ||
172 | $search = Contact::get() | |
173 | ->setCheckPermissions(FALSE) | |
174 | ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes']) | |
175 | ->addSelect('id') | |
176 | ->addOrderBy('id') | |
177 | ->execute() | |
178 | ->indexBy('id'); | |
179 | ||
180 | $this->assertNotContains($contactId2, array_keys((array) $search)); | |
181 | ||
182 | $search = Contact::get() | |
183 | ->setCheckPermissions(FALSE) | |
184 | ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes']) | |
185 | ->addSelect('id') | |
186 | ->addOrderBy('id') | |
187 | ->execute() | |
188 | ->indexBy('id'); | |
189 | ||
190 | $this->assertContains($contactId1, array_keys((array) $search)); | |
191 | $this->assertNotContains($contactId2, array_keys((array) $search)); | |
192 | ||
193 | $search = Contact::get() | |
194 | ->setCheckPermissions(FALSE) | |
195 | ->setWhere([['NOT', ['OR', [['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes']]]]]) | |
196 | ->addSelect('id') | |
197 | ->addOrderBy('id') | |
198 | ->execute() | |
199 | ->indexBy('id'); | |
200 | ||
201 | $this->assertNotContains($contactId1, array_keys((array) $search)); | |
202 | $this->assertNotContains($contactId2, array_keys((array) $search)); | |
203 | } | |
204 | ||
205 | } |