2 require_once 'CiviTest/CiviUnitTestCase.php';
3 require_once 'CiviTest/Contact.php';
6 * Class CRM_Contact_BAO_ContactType_RelationshipTest
8 class CRM_Contact_BAO_ContactType_RelationshipTest
extends CiviUnitTestCase
{
14 'name' => 'Relationship Subtype',
15 'description' => 'Test Relattionship for subtype.',
16 'group' => 'CiviCRM BAO Tests',
23 //create contact subtypes
25 'label' => 'indivi_student',
26 'name' => 'indivi_student',
31 $result = CRM_Contact_BAO_ContactType
::add($params);
32 $this->student
= $params['name'];
35 'label' => 'indivi_parent',
36 'name' => 'indivi_parent',
41 $result = CRM_Contact_BAO_ContactType
::add($params);
42 $this->parent
= $params['name'];
45 'label' => 'org_sponsor',
46 'name' => 'org_sponsor',
51 $result = CRM_Contact_BAO_ContactType
::add($params);
52 $this->sponsor
= $params['name'];
56 'first_name' => 'Anne',
57 'last_name' => 'Grant',
58 'contact_type' => 'Individual',
60 $this->individual
= Contact
::create($params);
63 'first_name' => 'Bill',
64 'last_name' => 'Adams',
65 'contact_type' => 'Individual',
66 'contact_sub_type' => $this->student
,
68 $this->indivi_student
= Contact
::create($params);
71 'first_name' => 'Alen',
72 'last_name' => 'Adams',
73 'contact_type' => 'Individual',
74 'contact_sub_type' => $this->parent
,
76 $this->indivi_parent
= Contact
::create($params);
79 'organization_name' => 'Compumentor',
80 'contact_type' => 'Organization',
82 $this->organization
= Contact
::create($params);
85 'organization_name' => 'Conservation Corp',
86 'contact_type' => 'Organization',
87 'contact_sub_type' => $this->sponsor
,
89 $this->organization_sponsor
= Contact
::create($params);
93 $this->quickCleanup(array('civicrm_contact'));
96 DELETE FROM civicrm_contact_type
97 WHERE name IN ('{$this->student}','{$this->parent}','{$this->sponsor}');
99 CRM_Core_DAO
::executeQuery($query);
103 * Methods create relationshipType with valid data
107 function testRelationshipTypeAddIndiviParent() {
108 //check Individual to Parent RelationshipType
110 'name_a_b' => 'indivToparent',
111 'name_b_a' => 'parentToindiv',
112 'contact_type_a' => 'Individual',
113 'contact_type_b' => 'Individual',
114 'contact_sub_type_b' => $this->parent
,
117 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
118 $this->assertEquals($result->name_a_b
, 'indivToparent');
119 $this->assertEquals($result->contact_type_a
, 'Individual');
120 $this->assertEquals($result->contact_type_b
, 'Individual');
121 $this->assertEquals($result->contact_sub_type_b
, $this->parent
);
122 $this->relationshipTypeDelete($result->id
);
125 function testRelationshipTypeAddSponcorIndivi() {
126 //check Sponcor to Individual RelationshipType
128 'name_a_b' => 'SponsorToIndiv',
129 'name_b_a' => 'IndivToSponsor',
130 'contact_type_a' => 'Organization',
131 'contact_sub_type_a' => $this->sponsor
,
132 'contact_type_b' => 'Individual',
135 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
136 $this->assertEquals($result->name_a_b
, 'SponsorToIndiv');
137 $this->assertEquals($result->contact_type_a
, 'Organization');
138 $this->assertEquals($result->contact_sub_type_a
, $this->sponsor
);
139 $this->assertEquals($result->contact_type_b
, 'Individual');
140 $this->relationshipTypeDelete($result->id
);
143 function testRelationshipTypeAddStudentSponcor() {
144 //check Student to Sponcer RelationshipType
146 'name_a_b' => 'StudentToSponser',
147 'name_b_a' => 'SponsorToStudent',
148 'contact_type_a' => 'Individual',
149 'contact_sub_type_a' => $this->student
,
150 'contact_type_b' => 'Organization',
151 'contact_sub_type_b' => $this->sponsor
,
154 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
155 $this->assertEquals($result->name_a_b
, 'StudentToSponser');
156 $this->assertEquals($result->contact_type_a
, 'Individual');
157 $this->assertEquals($result->contact_sub_type_a
, $this->student
);
158 $this->assertEquals($result->contact_type_b
, 'Organization');
159 $this->assertEquals($result->contact_sub_type_b
, $this->sponsor
);
160 $this->relationshipTypeDelete($result->id
);
164 * Methods create relationshipe within same contact type with invalid Relationships
167 function testRelationshipCreateInvalidWithinSameType() {
168 //check for Individual to Parent
169 $relTypeParams = array(
170 'name_a_b' => 'indivToparent',
171 'name_b_a' => 'parentToindiv',
172 'contact_type_a' => 'Individual',
173 'contact_type_b' => 'Individual',
174 'contact_sub_type_b' => $this->parent
,
176 $relTypeIds = array();
177 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
179 'relationship_type_id' => $relType->id
. '_a_b',
180 'contact_check' => array($this->indivi_student
=> 1),
182 $ids = array('contact' => $this->individual
);
184 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::create($params, $ids);
186 $this->assertEquals($invalid, 1, 'In line ' . __LINE__
);
187 $this->assertEquals(empty($relationshipIds), TRUE, 'In line ' . __LINE__
);
188 $this->relationshipTypeDelete($relType->id
);
192 * Methods create relationshipe within diff contact type with invalid Relationships
195 function testRelCreateInvalidWithinDiffTypeSpocorIndivi() {
196 //check for Sponcer to Individual
197 $relTypeParams = array(
198 'name_a_b' => 'SponsorToIndiv',
199 'name_b_a' => 'IndivToSponsor',
200 'contact_type_a' => 'Organization',
201 'contact_sub_type_a' => $this->sponsor
,
202 'contact_type_b' => 'Individual',
204 $relTypeIds = array();
205 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
207 'relationship_type_id' => $relType->id
. '_a_b',
208 'contact_check' => array($this->individual
=> 1),
210 $ids = array('contact' => $this->indivi_parent
);
212 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::create($params, $ids);
214 $this->assertEquals($invalid, 1, 'In line ' . __LINE__
);
215 $this->assertEquals(empty($relationshipIds), TRUE, 'In line ' . __LINE__
);
216 $this->relationshipTypeDelete($relType->id
);
219 function testRelCreateInvalidWithinDiffTypeStudentSponcor() {
220 //check for Student to Sponcer
221 $relTypeParams = array(
222 'name_a_b' => 'StudentToSponser',
223 'name_b_a' => 'SponsorToStudent',
224 'contact_type_a' => 'Individual',
225 'contact_sub_type_a' => $this->student
,
226 'contact_type_b' => 'Organization',
227 'contact_sub_type_b' => 'Sponser',
229 $relTypeIds = array();
230 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
232 'relationship_type_id' => $relType->id
. '_a_b',
233 'contact_check' => array($this->individual
=> 1),
235 $ids = array('contact' => $this->indivi_parent
);
237 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::create($params, $ids);
239 $this->assertEquals($invalid, 1, 'In line ' . __LINE__
);
240 $this->assertEquals(empty($relationshipIds), TRUE, 'In line ' . __LINE__
);
241 $this->relationshipTypeDelete($relType->id
);
245 * Methods create relationshipe within same contact type with valid data
249 function testRelationshipCreateWithinSameType() {
250 //check for Individual to Parent
251 $relTypeParams = array(
252 'name_a_b' => 'indivToparent',
253 'name_b_a' => 'parentToindiv',
254 'contact_type_a' => 'Individual',
255 'contact_type_b' => 'Individual',
256 'contact_sub_type_b' => $this->parent
,
258 $relTypeIds = array();
259 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
261 'relationship_type_id' => $relType->id
. '_a_b',
263 'contact_check' => array($this->indivi_parent
=> $this->indivi_parent
),
265 $ids = array('contact' => $this->individual
);
266 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::create($params, $ids);
268 $this->assertEquals($valid, 1, 'In line ' . __LINE__
);
269 $this->assertEquals(empty($relationshipIds), FALSE, 'In line ' . __LINE__
);
270 $this->relationshipTypeDelete($relType->id
);
274 * Methods create relationshipe within different contact type with valid data
278 function testRelCreateWithinDiffTypeSponsorIndivi() {
279 //check for Sponcer to Individual
280 $relTypeParams = array(
281 'name_a_b' => 'SponsorToIndiv',
282 'name_b_a' => 'IndivToSponsor',
283 'contact_type_a' => 'Organization',
284 'contact_sub_type_a' => $this->sponsor
,
285 'contact_type_b' => 'Individual',
287 $relTypeIds = array();
288 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
290 'relationship_type_id' => $relType->id
. '_a_b',
292 'contact_check' => array($this->indivi_student
=> 1),
294 $ids = array('contact' => $this->organization_sponsor
);
295 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::create($params, $ids);
297 $this->assertEquals($valid, 1, 'In line ' . __LINE__
);
298 $this->assertEquals(empty($relationshipIds), FALSE, 'In line ' . __LINE__
);
299 $this->relationshipTypeDelete($relType->id
);
302 function testRelCreateWithinDiffTypeStudentSponsor() {
303 //check for Student to Sponcer
304 $relTypeParams = array(
305 'name_a_b' => 'StudentToSponsor',
306 'name_b_a' => 'SponsorToStudent',
307 'contact_type_a' => 'Individual',
308 'contact_sub_type_a' => $this->student
,
309 'contact_type_b' => 'Organization',
310 'contact_sub_type_b' => $this->sponsor
,
312 $relTypeIds = array();
313 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
315 'relationship_type_id' => $relType->id
. '_a_b',
317 'contact_check' => array($this->organization_sponsor
=> 1),
319 $ids = array('contact' => $this->indivi_student
);
320 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::create($params, $ids);
322 $this->assertEquals($valid, 1, 'In line ' . __LINE__
);
323 $this->assertEquals(empty($relationshipIds), FALSE, 'In line ' . __LINE__
);
324 $this->relationshipTypeDelete($relType->id
);