2 require_once 'CiviTest/CiviUnitTestCase.php';
5 * Class CRM_Contact_BAO_ContactType_ContactTypeTest
7 class CRM_Contact_BAO_ContactType_ContactTypeTest
extends CiviUnitTestCase
{
13 'name' => 'Contact Subtype',
14 'description' => 'Test Contact for subtype.',
15 'group' => 'CiviCRM BAO Tests',
21 $labelsub1 = 'sub1_individual'.substr(sha1(rand()), 0, 7);
23 'label' => $labelsub1,
29 $result = CRM_Contact_BAO_ContactType
::add($params);
30 $this->subTypesIndividual
[] = $params['name'];
32 $labelsub2 = 'sub2_individual'.substr(sha1(rand()), 0, 7);
34 'label' => $labelsub2,
40 $result = CRM_Contact_BAO_ContactType
::add($params);
41 $this->subTypesIndividual
[] = $params['name'];
43 $labelsub = 'sub_organization'.substr(sha1(rand()), 0, 7);
51 $result = CRM_Contact_BAO_ContactType
::add($params);
52 $this->subTypesOrganization
[] = $params['name'];
54 $labelhousehold = 'sub_household'.substr(sha1(rand()), 0, 7);
56 'label' => $labelhousehold,
57 'name' => $labelhousehold,
62 $result = CRM_Contact_BAO_ContactType
::add($params);
63 $this->subTypesHousehold
[] = $params['name'];
67 * Test contactTypes() and subTypes() methods with valid data
70 function testGetMethods() {
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__
);
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__
);
86 $this->assertEquals(in_array($subtype, $this->subTypesOrganization
), FALSE, 'In line ' . __LINE__
);
87 $this->assertEquals(in_array($subtype, $this->subTypesHousehold
), FALSE, 'In line ' . __LINE__
);
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__
);
98 $subTypeName = in_array($subTypeName, $this->subTypesHousehold
);
99 if (empty($subTypeName)) {
100 $this->assertEquals($subTypeName, FALSE, 'In line ' . __LINE__
);
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__
);
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__
);
117 foreach ($this->subTypesOrganization
as $subtype) {
118 $this->assertEquals(in_array($subtype, $result), TRUE, 'In line ' . __LINE__
);
120 foreach ($this->subTypesHousehold
as $subtype) {
121 $this->assertEquals(in_array($subtype, $result), TRUE, 'In line ' . __LINE__
);
126 * Test subTypes() methods with invalid data
128 function testGetMethodsInvalid() {
131 $result = CRM_Contact_BAO_ContactType
::subTypes($params);
132 $this->assertEquals(empty($result), TRUE, 'In line ' . __LINE__
);
134 $params = array('invalid');
135 $result = CRM_Contact_BAO_ContactType
::subTypes($params);
136 $this->assertEquals(empty($result), TRUE, 'In line ' . __LINE__
);
140 * Test add() methods with valid data
146 'label' => 'indiviSubType',
147 'name' => 'indiviSubType',
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
);
159 'label' => 'householdSubType',
160 'name' => 'householdSubType',
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
);
173 * Test add() with invalid data
175 function testAddInvalid1() {
177 // parent id does not exist in db
179 'label' => 'subType',
185 $result = CRM_Contact_BAO_ContactType
::add($params);
186 $this->assertEquals($result, NULL, 'In line ' . __LINE__
);
189 function testAddInvalid2() {
191 // params does not have name and label keys
196 $result = CRM_Contact_BAO_ContactType
::add($params);
197 $this->assertEquals($result, NULL, 'In line ' . __LINE__
);
200 function testAddInvalid3() {
202 // params does not have parent_id
204 'label' => 'subType',
208 $result = CRM_Contact_BAO_ContactType
::add($params);
209 $this->assertEquals($result, NULL, 'In line' . __LINE__
);
213 * Test del() with valid data
219 'label' => 'indiviSubType',
220 'name' => 'indiviSubType',
224 $subtype = CRM_Contact_BAO_ContactType
::add($params);
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__
);
233 * Test del() with invalid data
235 function testDelInvalid() {
237 $del = CRM_Contact_BAO_ContactType
::del(NULL);
238 $this->assertEquals($del, FALSE, 'In line ' . __LINE__
);