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
{
10 public function setUp() {
13 //create contact subtypes
15 'label' => 'indivi_student',
16 'name' => 'indivi_student',
21 $result = CRM_Contact_BAO_ContactType
::add($params);
22 $this->student
= $params['name'];
25 'label' => 'indivi_parent',
26 'name' => 'indivi_parent',
31 $result = CRM_Contact_BAO_ContactType
::add($params);
32 $this->parent
= $params['name'];
35 'label' => 'org_sponsor',
36 'name' => 'org_sponsor',
41 $result = CRM_Contact_BAO_ContactType
::add($params);
42 $this->sponsor
= $params['name'];
46 'first_name' => 'Anne',
47 'last_name' => 'Grant',
48 'contact_type' => 'Individual',
50 $this->individual
= Contact
::create($params);
53 'first_name' => 'Bill',
54 'last_name' => 'Adams',
55 'contact_type' => 'Individual',
56 'contact_sub_type' => $this->student
,
58 $this->indivi_student
= Contact
::create($params);
61 'first_name' => 'Alen',
62 'last_name' => 'Adams',
63 'contact_type' => 'Individual',
64 'contact_sub_type' => $this->parent
,
66 $this->indivi_parent
= Contact
::create($params);
69 'organization_name' => 'Compumentor',
70 'contact_type' => 'Organization',
72 $this->organization
= Contact
::create($params);
75 'organization_name' => 'Conservation Corp',
76 'contact_type' => 'Organization',
77 'contact_sub_type' => $this->sponsor
,
79 $this->organization_sponsor
= Contact
::create($params);
82 public function tearDown() {
83 $this->quickCleanup(array('civicrm_contact'));
86 DELETE FROM civicrm_contact_type
87 WHERE name IN ('{$this->student}','{$this->parent}','{$this->sponsor}');
89 CRM_Core_DAO
::executeQuery($query);
93 * Methods create relationshipType with valid data.
96 public function testRelationshipTypeAddIndiviParent() {
97 //check Individual to Parent RelationshipType
99 'name_a_b' => 'indivToparent',
100 'name_b_a' => 'parentToindiv',
101 'contact_type_a' => 'Individual',
102 'contact_type_b' => 'Individual',
103 'contact_sub_type_b' => $this->parent
,
106 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
107 $this->assertEquals($result->name_a_b
, 'indivToparent');
108 $this->assertEquals($result->contact_type_a
, 'Individual');
109 $this->assertEquals($result->contact_type_b
, 'Individual');
110 $this->assertEquals($result->contact_sub_type_b
, $this->parent
);
111 $this->relationshipTypeDelete($result->id
);
114 public function testRelationshipTypeAddSponcorIndivi() {
115 //check Sponcor to Individual RelationshipType
117 'name_a_b' => 'SponsorToIndiv',
118 'name_b_a' => 'IndivToSponsor',
119 'contact_type_a' => 'Organization',
120 'contact_sub_type_a' => $this->sponsor
,
121 'contact_type_b' => 'Individual',
124 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
125 $this->assertEquals($result->name_a_b
, 'SponsorToIndiv');
126 $this->assertEquals($result->contact_type_a
, 'Organization');
127 $this->assertEquals($result->contact_sub_type_a
, $this->sponsor
);
128 $this->assertEquals($result->contact_type_b
, 'Individual');
129 $this->relationshipTypeDelete($result->id
);
132 public function testRelationshipTypeAddStudentSponcor() {
133 //check Student to Sponcer RelationshipType
135 'name_a_b' => 'StudentToSponser',
136 'name_b_a' => 'SponsorToStudent',
137 'contact_type_a' => 'Individual',
138 'contact_sub_type_a' => $this->student
,
139 'contact_type_b' => 'Organization',
140 'contact_sub_type_b' => $this->sponsor
,
143 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
144 $this->assertEquals($result->name_a_b
, 'StudentToSponser');
145 $this->assertEquals($result->contact_type_a
, 'Individual');
146 $this->assertEquals($result->contact_sub_type_a
, $this->student
);
147 $this->assertEquals($result->contact_type_b
, 'Organization');
148 $this->assertEquals($result->contact_sub_type_b
, $this->sponsor
);
149 $this->relationshipTypeDelete($result->id
);
153 * Methods create relationshipe within same contact type with invalid Relationships.
155 public function testRelationshipCreateInvalidWithinSameType() {
156 //check for Individual to Parent
157 $relTypeParams = array(
158 'name_a_b' => 'indivToparent',
159 'name_b_a' => 'parentToindiv',
160 'contact_type_a' => 'Individual',
161 'contact_type_b' => 'Individual',
162 'contact_sub_type_b' => $this->parent
,
164 $relTypeIds = array();
165 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
167 'relationship_type_id' => $relType->id
. '_a_b',
168 'contact_check' => array($this->indivi_student
=> 1),
170 $ids = array('contact' => $this->individual
);
172 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
174 $this->assertEquals($invalid, 1, 'In line ' . __LINE__
);
175 $this->assertEquals(empty($relationshipIds), TRUE, 'In line ' . __LINE__
);
176 $this->relationshipTypeDelete($relType->id
);
180 * Methods create relationshipe within diff contact type with invalid Relationships.
182 public function testRelCreateInvalidWithinDiffTypeSpocorIndivi() {
183 //check for Sponcer to Individual
184 $relTypeParams = array(
185 'name_a_b' => 'SponsorToIndiv',
186 'name_b_a' => 'IndivToSponsor',
187 'contact_type_a' => 'Organization',
188 'contact_sub_type_a' => $this->sponsor
,
189 'contact_type_b' => 'Individual',
191 $relTypeIds = array();
192 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
194 'relationship_type_id' => $relType->id
. '_a_b',
195 'contact_check' => array($this->individual
=> 1),
197 $ids = array('contact' => $this->indivi_parent
);
199 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
201 $this->assertEquals($invalid, 1, 'In line ' . __LINE__
);
202 $this->assertEquals(empty($relationshipIds), TRUE, 'In line ' . __LINE__
);
203 $this->relationshipTypeDelete($relType->id
);
206 public function testRelCreateInvalidWithinDiffTypeStudentSponcor() {
207 //check for Student to Sponcer
208 $relTypeParams = array(
209 'name_a_b' => 'StudentToSponser',
210 'name_b_a' => 'SponsorToStudent',
211 'contact_type_a' => 'Individual',
212 'contact_sub_type_a' => $this->student
,
213 'contact_type_b' => 'Organization',
214 'contact_sub_type_b' => 'Sponser',
216 $relTypeIds = array();
217 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
219 'relationship_type_id' => $relType->id
. '_a_b',
220 'contact_check' => array($this->individual
=> 1),
222 $ids = array('contact' => $this->indivi_parent
);
224 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
226 $this->assertEquals($invalid, 1, 'In line ' . __LINE__
);
227 $this->assertEquals(empty($relationshipIds), TRUE, 'In line ' . __LINE__
);
228 $this->relationshipTypeDelete($relType->id
);
232 * Methods create relationshipe within same contact type with valid data.
235 public function testRelationshipCreateWithinSameType() {
236 //check for Individual to Parent
237 $relTypeParams = array(
238 'name_a_b' => 'indivToparent',
239 'name_b_a' => 'parentToindiv',
240 'contact_type_a' => 'Individual',
241 'contact_type_b' => 'Individual',
242 'contact_sub_type_b' => $this->parent
,
244 $relTypeIds = array();
245 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
247 'relationship_type_id' => $relType->id
. '_a_b',
249 'contact_check' => array($this->indivi_parent
=> $this->indivi_parent
),
251 $ids = array('contact' => $this->individual
);
252 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
254 $this->assertEquals($valid, 1, 'In line ' . __LINE__
);
255 $this->assertEquals(empty($relationshipIds), FALSE, 'In line ' . __LINE__
);
256 $this->relationshipTypeDelete($relType->id
);
260 * Methods create relationshipe within different contact type with valid data.
263 public function testRelCreateWithinDiffTypeSponsorIndivi() {
264 //check for Sponcer to Individual
265 $relTypeParams = array(
266 'name_a_b' => 'SponsorToIndiv',
267 'name_b_a' => 'IndivToSponsor',
268 'contact_type_a' => 'Organization',
269 'contact_sub_type_a' => $this->sponsor
,
270 'contact_type_b' => 'Individual',
272 $relTypeIds = array();
273 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
275 'relationship_type_id' => $relType->id
. '_a_b',
277 'contact_check' => array($this->indivi_student
=> 1),
279 $ids = array('contact' => $this->organization_sponsor
);
280 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
282 $this->assertEquals($valid, 1, 'In line ' . __LINE__
);
283 $this->assertEquals(empty($relationshipIds), FALSE, 'In line ' . __LINE__
);
284 $this->relationshipTypeDelete($relType->id
);
287 public function testRelCreateWithinDiffTypeStudentSponsor() {
288 //check for Student to Sponcer
289 $relTypeParams = array(
290 'name_a_b' => 'StudentToSponsor',
291 'name_b_a' => 'SponsorToStudent',
292 'contact_type_a' => 'Individual',
293 'contact_sub_type_a' => $this->student
,
294 'contact_type_b' => 'Organization',
295 'contact_sub_type_b' => $this->sponsor
,
297 $relTypeIds = array();
298 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
300 'relationship_type_id' => $relType->id
. '_a_b',
302 'contact_check' => array($this->organization_sponsor
=> 1),
304 $ids = array('contact' => $this->indivi_student
);
305 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
307 $this->assertEquals($valid, 1, 'In line ' . __LINE__
);
308 $this->assertEquals(empty($relationshipIds), FALSE, 'In line ' . __LINE__
);
309 $this->relationshipTypeDelete($relType->id
);