3 require_once 'CiviTest/Contact.php';
6 * Class CRM_Contact_BAO_ContactType_RelationshipTest
9 class CRM_Contact_BAO_ContactType_RelationshipTest
extends CiviUnitTestCase
{
11 public function setUp() {
14 //create contact subtypes
16 'label' => 'indivi_student',
17 'name' => 'indivi_student',
22 $result = CRM_Contact_BAO_ContactType
::add($params);
23 $this->student
= $params['name'];
26 'label' => 'indivi_parent',
27 'name' => 'indivi_parent',
32 $result = CRM_Contact_BAO_ContactType
::add($params);
33 $this->parent
= $params['name'];
36 'label' => 'org_sponsor',
37 'name' => 'org_sponsor',
42 $result = CRM_Contact_BAO_ContactType
::add($params);
43 $this->sponsor
= $params['name'];
47 'first_name' => 'Anne',
48 'last_name' => 'Grant',
49 'contact_type' => 'Individual',
51 $this->individual
= $this->individualCreate($params);
54 'first_name' => 'Bill',
55 'last_name' => 'Adams',
56 'contact_type' => 'Individual',
57 'contact_sub_type' => $this->student
,
59 $this->indivi_student
= $this->individualCreate($params);
62 'first_name' => 'Alen',
63 'last_name' => 'Adams',
64 'contact_type' => 'Individual',
65 'contact_sub_type' => $this->parent
,
67 $this->indivi_parent
= $this->individualCreate($params);
70 'organization_name' => 'Compumentor',
71 'contact_type' => 'Organization',
73 $this->organization
= $this->organizationCreate($params);
76 'organization_name' => 'Conservation Corp',
77 'contact_type' => 'Organization',
78 'contact_sub_type' => $this->sponsor
,
80 $this->organization_sponsor
= $this->organizationCreate($params);
83 public function tearDown() {
84 $this->quickCleanup(array('civicrm_contact'));
87 DELETE FROM civicrm_contact_type
88 WHERE name IN ('{$this->student}','{$this->parent}','{$this->sponsor}');
90 CRM_Core_DAO
::executeQuery($query);
94 * Methods create relationshipType with valid data.
97 public function testRelationshipTypeAddIndiviParent() {
98 //check Individual to Parent RelationshipType
100 'name_a_b' => 'indivToparent',
101 'name_b_a' => 'parentToindiv',
102 'contact_type_a' => 'Individual',
103 'contact_type_b' => 'Individual',
104 'contact_sub_type_b' => $this->parent
,
107 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
108 $this->assertEquals($result->name_a_b
, 'indivToparent');
109 $this->assertEquals($result->contact_type_a
, 'Individual');
110 $this->assertEquals($result->contact_type_b
, 'Individual');
111 $this->assertEquals($result->contact_sub_type_b
, $this->parent
);
112 $this->relationshipTypeDelete($result->id
);
115 public function testRelationshipTypeAddSponcorIndivi() {
116 //check Sponcor to Individual RelationshipType
118 'name_a_b' => 'SponsorToIndiv',
119 'name_b_a' => 'IndivToSponsor',
120 'contact_type_a' => 'Organization',
121 'contact_sub_type_a' => $this->sponsor
,
122 'contact_type_b' => 'Individual',
125 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
126 $this->assertEquals($result->name_a_b
, 'SponsorToIndiv');
127 $this->assertEquals($result->contact_type_a
, 'Organization');
128 $this->assertEquals($result->contact_sub_type_a
, $this->sponsor
);
129 $this->assertEquals($result->contact_type_b
, 'Individual');
130 $this->relationshipTypeDelete($result->id
);
133 public function testRelationshipTypeAddStudentSponcor() {
134 //check Student to Sponcer RelationshipType
136 'name_a_b' => 'StudentToSponser',
137 'name_b_a' => 'SponsorToStudent',
138 'contact_type_a' => 'Individual',
139 'contact_sub_type_a' => $this->student
,
140 'contact_type_b' => 'Organization',
141 'contact_sub_type_b' => $this->sponsor
,
144 $result = CRM_Contact_BAO_RelationshipType
::add($params, $ids);
145 $this->assertEquals($result->name_a_b
, 'StudentToSponser');
146 $this->assertEquals($result->contact_type_a
, 'Individual');
147 $this->assertEquals($result->contact_sub_type_a
, $this->student
);
148 $this->assertEquals($result->contact_type_b
, 'Organization');
149 $this->assertEquals($result->contact_sub_type_b
, $this->sponsor
);
150 $this->relationshipTypeDelete($result->id
);
154 * Methods create relationshipe within same contact type with invalid Relationships.
156 public function testRelationshipCreateInvalidWithinSameType() {
157 //check for Individual to Parent
158 $relTypeParams = array(
159 'name_a_b' => 'indivToparent',
160 'name_b_a' => 'parentToindiv',
161 'contact_type_a' => 'Individual',
162 'contact_type_b' => 'Individual',
163 'contact_sub_type_b' => $this->parent
,
165 $relTypeIds = array();
166 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
168 'relationship_type_id' => $relType->id
. '_a_b',
169 'contact_check' => array($this->indivi_student
=> 1),
171 $ids = array('contact' => $this->individual
);
173 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
175 $this->assertEquals($invalid, 1);
176 $this->assertEquals(empty($relationshipIds), TRUE);
177 $this->relationshipTypeDelete($relType->id
);
181 * Methods create relationshipe within diff contact type with invalid Relationships.
183 public function testRelCreateInvalidWithinDiffTypeSpocorIndivi() {
184 //check for Sponcer to Individual
185 $relTypeParams = array(
186 'name_a_b' => 'SponsorToIndiv',
187 'name_b_a' => 'IndivToSponsor',
188 'contact_type_a' => 'Organization',
189 'contact_sub_type_a' => $this->sponsor
,
190 'contact_type_b' => 'Individual',
192 $relTypeIds = array();
193 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
195 'relationship_type_id' => $relType->id
. '_a_b',
196 'contact_check' => array($this->individual
=> 1),
198 $ids = array('contact' => $this->indivi_parent
);
200 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
202 $this->assertEquals($invalid, 1);
203 $this->assertEquals(empty($relationshipIds), TRUE);
204 $this->relationshipTypeDelete($relType->id
);
207 public function testRelCreateInvalidWithinDiffTypeStudentSponcor() {
208 //check for Student to Sponcer
209 $relTypeParams = array(
210 'name_a_b' => 'StudentToSponser',
211 'name_b_a' => 'SponsorToStudent',
212 'contact_type_a' => 'Individual',
213 'contact_sub_type_a' => $this->student
,
214 'contact_type_b' => 'Organization',
215 'contact_sub_type_b' => 'Sponser',
217 $relTypeIds = array();
218 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
220 'relationship_type_id' => $relType->id
. '_a_b',
221 'contact_check' => array($this->individual
=> 1),
223 $ids = array('contact' => $this->indivi_parent
);
225 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
227 $this->assertEquals($invalid, 1);
228 $this->assertEquals(empty($relationshipIds), TRUE);
229 $this->relationshipTypeDelete($relType->id
);
233 * Methods create relationshipe within same contact type with valid data.
236 public function testRelationshipCreateWithinSameType() {
237 //check for Individual to Parent
238 $relTypeParams = array(
239 'name_a_b' => 'indivToparent',
240 'name_b_a' => 'parentToindiv',
241 'contact_type_a' => 'Individual',
242 'contact_type_b' => 'Individual',
243 'contact_sub_type_b' => $this->parent
,
245 $relTypeIds = array();
246 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
248 'relationship_type_id' => $relType->id
. '_a_b',
250 'contact_check' => array($this->indivi_parent
=> $this->indivi_parent
),
252 $ids = array('contact' => $this->individual
);
253 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
255 $this->assertEquals($valid, 1);
256 $this->assertEquals(empty($relationshipIds), FALSE);
257 $this->relationshipTypeDelete($relType->id
);
261 * Methods create relationshipe within different contact type with valid data.
264 public function testRelCreateWithinDiffTypeSponsorIndivi() {
265 //check for Sponcer to Individual
266 $relTypeParams = array(
267 'name_a_b' => 'SponsorToIndiv',
268 'name_b_a' => 'IndivToSponsor',
269 'contact_type_a' => 'Organization',
270 'contact_sub_type_a' => $this->sponsor
,
271 'contact_type_b' => 'Individual',
273 $relTypeIds = array();
274 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
276 'relationship_type_id' => $relType->id
. '_a_b',
278 'contact_check' => array($this->indivi_student
=> 1),
280 $ids = array('contact' => $this->organization_sponsor
);
281 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
283 $this->assertEquals($valid, 1);
284 $this->assertEquals(empty($relationshipIds), FALSE);
285 $this->relationshipTypeDelete($relType->id
);
288 public function testRelCreateWithinDiffTypeStudentSponsor() {
289 //check for Student to Sponcer
290 $relTypeParams = array(
291 'name_a_b' => 'StudentToSponsor',
292 'name_b_a' => 'SponsorToStudent',
293 'contact_type_a' => 'Individual',
294 'contact_sub_type_a' => $this->student
,
295 'contact_type_b' => 'Organization',
296 'contact_sub_type_b' => $this->sponsor
,
298 $relTypeIds = array();
299 $relType = CRM_Contact_BAO_RelationshipType
::add($relTypeParams, $relTypeIds);
301 'relationship_type_id' => $relType->id
. '_a_b',
303 'contact_check' => array($this->organization_sponsor
=> 1),
305 $ids = array('contact' => $this->indivi_student
);
306 list($valid, $invalid, $duplicate, $saved, $relationshipIds) = CRM_Contact_BAO_Relationship
::legacyCreateMultiple($params, $ids);
308 $this->assertEquals($valid, 1);
309 $this->assertEquals(empty($relationshipIds), FALSE);
310 $this->relationshipTypeDelete($relType->id
);