Merge pull request #14591 from JKingsnorth/dev/core#1064
[civicrm-core.git] / tests / phpunit / CRM / Contact / BAO / ContactType / ContactTypeTest.php
1 <?php
2
3 /**
4 * Class CRM_Contact_BAO_ContactType_ContactTypeTest
5 * @group headless
6 */
7 class CRM_Contact_BAO_ContactType_ContactTypeTest extends CiviUnitTestCase {
8
9 public function setUp() {
10 parent::setUp();
11 $labelsub1 = 'sub1_individual' . substr(sha1(rand()), 0, 7);
12 $params = [
13 'label' => $labelsub1,
14 'name' => $labelsub1,
15 // Individual
16 'parent_id' => 1,
17 'is_active' => 1,
18 ];
19 $result = CRM_Contact_BAO_ContactType::add($params);
20 $this->subTypesIndividual[] = $params['name'];
21
22 $labelsub2 = 'sub2_individual' . substr(sha1(rand()), 0, 7);
23 $params = [
24 'label' => $labelsub2,
25 'name' => $labelsub2,
26 // Individual
27 'parent_id' => 1,
28 'is_active' => 1,
29 ];
30 $result = CRM_Contact_BAO_ContactType::add($params);
31 $this->subTypesIndividual[] = $params['name'];
32
33 $labelsub = 'sub_organization' . substr(sha1(rand()), 0, 7);
34 $params = [
35 'label' => $labelsub,
36 'name' => $labelsub,
37 // Organization
38 'parent_id' => 3,
39 'is_active' => 1,
40 ];
41 $result = CRM_Contact_BAO_ContactType::add($params);
42 $this->subTypesOrganization[] = $params['name'];
43
44 $labelhousehold = 'sub_household' . substr(sha1(rand()), 0, 7);
45 $params = [
46 'label' => $labelhousehold,
47 'name' => $labelhousehold,
48 // Household
49 'parent_id' => 2,
50 'is_active' => 1,
51 ];
52 $result = CRM_Contact_BAO_ContactType::add($params);
53 $this->subTypesHousehold[] = $params['name'];
54 }
55
56 /**
57 * Test contactTypes() and subTypes() methods with valid data
58 * success expected
59 */
60 public function testGetMethods() {
61
62 // check all contact types
63 $contactTypes = ['Individual', 'Organization', 'Household'];
64 $result = CRM_Contact_BAO_ContactType::contactTypes('Individual');
65 foreach ($contactTypes as $type) {
66 $this->assertEquals(in_array($type, $result), TRUE);
67 }
68
69 // check for type:Individual
70 $result = CRM_Contact_BAO_ContactType::subTypes('Individual');
71 foreach ($result as $subtype) {
72 $subTypeName = in_array($subtype, $this->subTypesIndividual);
73 if (!empty($subTypeName)) {
74 $this->assertEquals($subTypeName, TRUE);
75 }
76 $this->assertEquals(in_array($subtype, $this->subTypesOrganization), FALSE);
77 $this->assertEquals(in_array($subtype, $this->subTypesHousehold), FALSE);
78 }
79
80 // check for type:Organization
81 $result = CRM_Contact_BAO_ContactType::subTypes('Organization');
82 foreach ($result as $subtype) {
83 $this->assertEquals(in_array($subtype, $this->subTypesIndividual), FALSE);
84 $subTypeName = in_array($subtype, $this->subTypesOrganization);
85 if (!empty($subTypeName)) {
86 $this->assertEquals($subTypeName, TRUE);
87 }
88 $subTypeName = in_array($subTypeName, $this->subTypesHousehold);
89 if (empty($subTypeName)) {
90 $this->assertEquals($subTypeName, FALSE);
91 }
92 }
93
94 // check for type:Household
95 $result = CRM_Contact_BAO_ContactType::subTypes('Household');
96 foreach ($result as $subtype) {
97 $this->assertEquals(in_array($subtype, $this->subTypesIndividual), FALSE);
98 $this->assertEquals(in_array($subtype, $this->subTypesOrganization), FALSE);
99 $this->assertEquals(in_array($subtype, $this->subTypesHousehold), TRUE);
100 }
101
102 // check for all conatct types
103 $result = CRM_Contact_BAO_ContactType::subTypes();
104 foreach ($this->subTypesIndividual as $subtype) {
105 $this->assertEquals(in_array($subtype, $result), TRUE);
106 }
107 foreach ($this->subTypesOrganization as $subtype) {
108 $this->assertEquals(in_array($subtype, $result), TRUE);
109 }
110 foreach ($this->subTypesHousehold as $subtype) {
111 $this->assertEquals(in_array($subtype, $result), TRUE);
112 }
113 }
114
115 /**
116 * Test subTypes() methods with invalid data
117 */
118 public function testGetMethodsInvalid() {
119
120 $params = 'invalid';
121 $result = CRM_Contact_BAO_ContactType::subTypes($params);
122 $this->assertEquals(empty($result), TRUE);
123
124 $params = ['invalid'];
125 $result = CRM_Contact_BAO_ContactType::subTypes($params);
126 $this->assertEquals(empty($result), TRUE);
127 }
128
129 /**
130 * Test add() methods with valid data
131 * success expected
132 */
133 public function testAdd() {
134
135 $params = [
136 'label' => 'indiviSubType',
137 'name' => 'indiviSubType',
138 'parent_id' => 1,
139 'is_active' => 1,
140 ];
141 $result = CRM_Contact_BAO_ContactType::add($params);
142 $this->assertEquals($result->label, $params['label']);
143 $this->assertEquals($result->name, $params['name']);
144 $this->assertEquals($result->parent_id, $params['parent_id']);
145 $this->assertEquals($result->is_active, $params['is_active']);
146 CRM_Contact_BAO_ContactType::del($result->id);
147
148 $params = [
149 'label' => 'householdSubType',
150 'name' => 'householdSubType',
151 'parent_id' => 2,
152 'is_active' => 0,
153 ];
154 $result = CRM_Contact_BAO_ContactType::add($params);
155 $this->assertEquals($result->label, $params['label']);
156 $this->assertEquals($result->name, $params['name']);
157 $this->assertEquals($result->parent_id, $params['parent_id']);
158 $this->assertEquals($result->is_active, $params['is_active']);
159 CRM_Contact_BAO_ContactType::del($result->id);
160 }
161
162 /**
163 * Test add() with invalid data
164 */
165 public function testAddInvalid1() {
166
167 // parent id does not exist in db
168 $params = [
169 'label' => 'subType',
170 'name' => 'subType',
171 // non existent
172 'parent_id' => 100,
173 'is_active' => 1,
174 ];
175 $result = CRM_Contact_BAO_ContactType::add($params);
176 $this->assertEquals($result, NULL);
177 }
178
179 public function testAddInvalid2() {
180
181 // params does not have name and label keys
182 $params = [
183 'parent_id' => 1,
184 'is_active' => 1,
185 ];
186 $result = CRM_Contact_BAO_ContactType::add($params);
187 $this->assertEquals($result, NULL);
188 }
189
190 public function testAddInvalid3() {
191
192 // params does not have parent_id
193 $params = [
194 'label' => 'subType',
195 'name' => 'subType',
196 'is_active' => 1,
197 ];
198 $result = CRM_Contact_BAO_ContactType::add($params);
199 $this->assertEquals($result, NULL, 'In line' . __LINE__);
200 }
201
202 /**
203 * Test del() with valid data.
204 */
205 public function testDel() {
206
207 $params = [
208 'label' => 'indiviSubType',
209 'name' => 'indiviSubType',
210 'parent_id' => 1,
211 'is_active' => 1,
212 ];
213 $subtype = CRM_Contact_BAO_ContactType::add($params);
214 $result = CRM_Contact_BAO_ContactType::subTypes();
215 $this->assertEquals(TRUE, in_array($subtype->name, $result, TRUE));
216 $this->callAPISuccess('ContactType', 'delete', ['id' => $subtype->id]);
217
218 $result = CRM_Contact_BAO_ContactType::subTypes();
219 $this->assertEquals(FALSE, in_array($subtype->name, $result, TRUE));
220 }
221
222 /**
223 * Test del() with invalid data
224 */
225 public function testDelInvalid() {
226
227 $del = CRM_Contact_BAO_ContactType::del(NULL);
228 $this->assertEquals($del, FALSE);
229 }
230
231 }