b115d5f6641acf806cbdffc8b1e915a9b9dffcfd
[civicrm-core.git] / tests / phpunit / api / v4 / Action / BasicCustomFieldTest.php
1 <?php
2
3 namespace api\v4\Action;
4
5 use Civi\Api4\Contact;
6 use Civi\Api4\CustomField;
7 use Civi\Api4\CustomGroup;
8
9 /**
10 * @group headless
11 */
12 class BasicCustomFieldTest extends BaseCustomValueTest {
13
14 public function testWithSingleField() {
15
16 $customGroup = CustomGroup::create()
17 ->setCheckPermissions(FALSE)
18 ->addValue('name', 'MyContactFields')
19 ->addValue('extends', 'Contact')
20 ->execute()
21 ->first();
22
23 CustomField::create()
24 ->setCheckPermissions(FALSE)
25 ->addValue('label', 'FavColor')
26 ->addValue('custom_group_id', $customGroup['id'])
27 ->addValue('html_type', 'Text')
28 ->addValue('data_type', 'String')
29 ->execute();
30
31 $contactId = Contact::create()
32 ->setCheckPermissions(FALSE)
33 ->addValue('first_name', 'Johann')
34 ->addValue('last_name', 'Tester')
35 ->addValue('contact_type', 'Individual')
36 ->addValue('MyContactFields.FavColor', 'Red')
37 ->execute()
38 ->first()['id'];
39
40 $contact = Contact::get()
41 ->setCheckPermissions(FALSE)
42 ->addSelect('first_name')
43 ->addSelect('MyContactFields.FavColor')
44 ->addWhere('id', '=', $contactId)
45 ->addWhere('MyContactFields.FavColor', '=', 'Red')
46 ->execute()
47 ->first();
48
49 $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
50
51 Contact::update()
52 ->addWhere('id', '=', $contactId)
53 ->addValue('MyContactFields.FavColor', 'Blue')
54 ->execute();
55
56 $contact = Contact::get()
57 ->setCheckPermissions(FALSE)
58 ->addSelect('MyContactFields.FavColor')
59 ->addWhere('id', '=', $contactId)
60 ->execute()
61 ->first();
62
63 $this->assertEquals('Blue', $contact['MyContactFields.FavColor']);
64 }
65
66 public function testWithTwoFields() {
67
68 $customGroup = CustomGroup::create()
69 ->setCheckPermissions(FALSE)
70 ->addValue('name', 'MyContactFields')
71 ->addValue('extends', 'Contact')
72 ->execute()
73 ->first();
74
75 CustomField::create()
76 ->setCheckPermissions(FALSE)
77 ->addValue('label', 'FavColor')
78 ->addValue('custom_group_id', $customGroup['id'])
79 ->addValue('html_type', 'Text')
80 ->addValue('data_type', 'String')
81 ->execute();
82
83 CustomField::create()
84 ->setCheckPermissions(FALSE)
85 ->addValue('label', 'FavFood')
86 ->addValue('custom_group_id', $customGroup['id'])
87 ->addValue('html_type', 'Text')
88 ->addValue('data_type', 'String')
89 ->execute();
90
91 $contactId1 = Contact::create()
92 ->setCheckPermissions(FALSE)
93 ->addValue('first_name', 'Johann')
94 ->addValue('last_name', 'Tester')
95 ->addValue('MyContactFields.FavColor', 'Red')
96 ->addValue('MyContactFields.FavFood', 'Cherry')
97 ->execute()
98 ->first()['id'];
99
100 $contactId2 = Contact::create()
101 ->setCheckPermissions(FALSE)
102 ->addValue('first_name', 'MaryLou')
103 ->addValue('last_name', 'Tester')
104 ->addValue('MyContactFields.FavColor', 'Purple')
105 ->addValue('MyContactFields.FavFood', 'Grapes')
106 ->execute()
107 ->first()['id'];
108
109 $contact = Contact::get()
110 ->setCheckPermissions(FALSE)
111 ->addSelect('first_name')
112 ->addSelect('MyContactFields.FavColor')
113 ->addSelect('MyContactFields.FavFood')
114 ->addWhere('id', '=', $contactId1)
115 ->addWhere('MyContactFields.FavColor', '=', 'Red')
116 ->addWhere('MyContactFields.FavFood', '=', 'Cherry')
117 ->execute()
118 ->first();
119
120 $this->assertArrayHasKey('MyContactFields.FavColor', $contact);
121 $this->assertEquals('Red', $contact['MyContactFields.FavColor']);
122
123 Contact::update()
124 ->addWhere('id', '=', $contactId1)
125 ->addValue('MyContactFields.FavColor', 'Blue')
126 ->execute();
127
128 $contact = Contact::get()
129 ->setCheckPermissions(FALSE)
130 ->addSelect('MyContactFields.FavColor')
131 ->addWhere('id', '=', $contactId1)
132 ->execute()
133 ->first();
134
135 $this->assertEquals('Blue', $contact['MyContactFields.FavColor']);
136
137 $search = Contact::get()
138 ->setCheckPermissions(FALSE)
139 ->addClause('OR', ['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes'])
140 ->addSelect('id')
141 ->addOrderBy('id')
142 ->execute()
143 ->indexBy('id');
144
145 $this->assertEquals([$contactId1, $contactId2], array_keys((array) $search));
146
147 $search = Contact::get()
148 ->setCheckPermissions(FALSE)
149 ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes'])
150 ->addSelect('id')
151 ->addOrderBy('id')
152 ->execute()
153 ->indexBy('id');
154
155 $this->assertNotContains($contactId2, array_keys((array) $search));
156
157 $search = Contact::get()
158 ->setCheckPermissions(FALSE)
159 ->addClause('NOT', ['MyContactFields.FavColor', '=', 'Purple'], ['MyContactFields.FavFood', '=', 'Grapes'])
160 ->addSelect('id')
161 ->addOrderBy('id')
162 ->execute()
163 ->indexBy('id');
164
165 $this->assertContains($contactId1, array_keys((array) $search));
166 $this->assertNotContains($contactId2, array_keys((array) $search));
167
168 $search = Contact::get()
169 ->setCheckPermissions(FALSE)
170 ->setWhere([['NOT', ['OR', [['MyContactFields.FavColor', '=', 'Blue'], ['MyContactFields.FavFood', '=', 'Grapes']]]]])
171 ->addSelect('id')
172 ->addOrderBy('id')
173 ->execute()
174 ->indexBy('id');
175
176 $this->assertNotContains($contactId1, array_keys((array) $search));
177 $this->assertNotContains($contactId2, array_keys((array) $search));
178 }
179
180 }