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