Merge pull request #17163 from jitendrapurohit/core-1731
[civicrm-core.git] / tests / phpunit / api / v4 / Action / BasicCustomFieldTest.php
CommitLineData
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
22namespace api\v4\Action;
23
24use Civi\Api4\Contact;
25use Civi\Api4\CustomField;
26use Civi\Api4\CustomGroup;
27
28/**
29 * @group headless
30 */
31class 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}