tests/ - Remove get_info()
[civicrm-core.git] / tests / phpunit / CRM / Group / Page / AjaxTest.php
CommitLineData
3aab90bd 1<?php
2require_once 'CiviTest/CiviUnitTestCase.php';
aba1cd8b
EM
3
4/**
5 * Class CRM_Group_Page_AjaxTest
6 */
3aab90bd 7class CRM_Group_Page_AjaxTest extends CiviUnitTestCase {
8 /**
9 * Permissioned group is used both as an active group the contact can see and as a group that allows
10 * logged in user to see contacts
11 * @var integer
12 */
13 protected $_permissionedGroup;
14 /**
15 * AS disabled group the contact has permission to
16 * @var unknown
17 */
18 protected $_permissionedDisabledGroup;
19
5c2ad8fb
EM
20 protected $hookClass;
21
aaac0e0b
EM
22 protected $_params = array();
23
3aab90bd 24 function setUp() {
25 parent::setUp();
26 $this->_params = array(
27 'sEcho' => '1',
28 'page' => 1,
29 'rp' => 50,
30 'offset' => 0,
31 'rowCount' => 50,
32 'sort' => NULL,
33 'is_unit_test' => TRUE,
34 );
35 $this->hookClass = CRM_Utils_Hook::singleton();
36 $this->createLoggedInUser();
37 $this->_permissionedDisabledGroup = $this->groupCreate(array('title' => 'pick-me-disabled', 'is_active' => 0, 'name' => 'pick-me-disabled'));
38 $this->_permissionedGroup = $this->groupCreate(array('title' => 'pick-me-active', 'is_active' => 1, 'name' => 'pick-me-active'));
39 $this->groupCreate(array('title' => 'not-me-disabled', 'is_active' => 0, 'name' => 'not-me-disabled'));
40 $this->groupCreate(array('title' => 'not-me-active', 'is_active' => 1, 'name' => 'not-me-active'));
41 }
42
43 function tearDown() {
44 CRM_Utils_Hook::singleton()->reset();
45 $this->quickCleanup(array('civicrm_group'));
46 $config = CRM_Core_Config::singleton();
47 unset($config->userPermissionClass->permissions);
48 parent::tearDown();
49 }
50
51 /**
aaac0e0b 52 * @param $permission
3aab90bd 53 */
aaac0e0b
EM
54 function setPermissionAndRequest($permission) {
55 CRM_Core_Config::singleton()->userPermissionClass->permissions = array($permission);
56 CRM_Contact_BAO_Group::getPermissionClause(TRUE);
57 global $_REQUEST;
58 $_REQUEST = $this->_params;
59 }
60
61 /**
62 * @param $permission
63 * @param $hook
64 */
65 function setHookAndRequest($permission, $hook) {
66 CRM_Core_Config::singleton()->userPermissionClass->permissions = array($permission);
67 $this->hookClass->setHook('civicrm_aclGroup', array($this, $hook));
68 CRM_Contact_BAO_Group::getPermissionClause(TRUE);
3aab90bd 69 global $_REQUEST;
70 $_REQUEST = $this->_params;
aaac0e0b
EM
71 }
72 /**
100fef9d 73 * Retrieve groups as 'view all contacts'
aaac0e0b
EM
74 */
75 function testGroupListViewAllContacts() {
76 $this->setPermissionAndRequest('view all contacts');
3aab90bd 77 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
78 $this->assertEquals(2, $total);
79 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
80 $this->assertEquals('not-me-active', $groups[4]['group_name']);
81 }
82
83 /**
100fef9d 84 * Retrieve groups as 'view all contacts' permissioned user
3aab90bd 85 * Without setting params the default is both enabled & disabled
86 * (if you do set default it is enabled only)
87 */
88 function testGroupListViewAllContactsFoundTitle() {
aaac0e0b
EM
89 $this->_params['title'] = 'p';
90 $this->setPermissionAndRequest('view all contacts');
3aab90bd 91 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
92 $this->assertEquals(2, $total);
93 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
94 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
95 }
96
97 /**
100fef9d 98 * Retrieve groups as 'view all contacts'
3aab90bd 99 */
100 function testGroupListViewAllContactsNotFoundTitle() {
aaac0e0b
EM
101 $this->_params['title'] = 'z';
102 $this->setPermissionAndRequest('view all contacts');
3aab90bd 103 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
104 $this->assertEquals(0, $total);
105 }
106 /**
100fef9d 107 * Retrieve groups as 'edit all contacts'
3aab90bd 108 */
109 function testGroupListEditAllContacts() {
aaac0e0b 110 $this->setPermissionAndRequest('edit all contacts');
3aab90bd 111 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
112 $this->assertEquals(2, $total);
113 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
114 $this->assertEquals('not-me-active', $groups[4]['group_name']);
115 }
116
117 /**
100fef9d 118 * Retrieve groups as 'view all contacts'
3aab90bd 119 */
120 function testGroupListViewAllContactsEnabled() {
aaac0e0b
EM
121 $this->_params['status'] = 1;
122 $this->setPermissionAndRequest('view all contacts');
3aab90bd 123 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
124 $this->assertEquals(2, $total);
125 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
126 $this->assertEquals('not-me-active', $groups[4]['group_name']);
127 }
128
129 /**
100fef9d 130 * Retrieve groups as 'view all contacts'
3aab90bd 131 */
132 function testGroupListViewAllContactsDisabled() {
aaac0e0b
EM
133 $this->_params['status'] = 2;
134 $this->setPermissionAndRequest('view all contacts');
3aab90bd 135 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
136 $this->assertEquals(2, $total);
137 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
138 $this->assertEquals('not-me-disabled', $groups[3]['group_name']);
139 }
140
141 /**
100fef9d 142 * Retrieve groups as 'view all contacts'
3aab90bd 143 */
144 function testGroupListViewAllContactsDisabledNotFoundTitle() {
aaac0e0b
EM
145 $this->_params['status'] = 2;
146 $this->_params['title'] = 'n';
147 $this->setPermissionAndRequest('view all contacts');
3aab90bd 148 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
149 $this->assertEquals(1, $total);
150 $this->assertEquals('not-me-disabled', $groups[3]['group_name']);
151 }
152
153 /**
100fef9d 154 * Retrieve groups as 'view all contacts'
3aab90bd 155 */
156 function testGroupListViewAllContactsDisabledFoundTitle() {
aaac0e0b
EM
157 $this->_params['status'] = 2;
158 $this->_params['title'] = 'p';
159 $this->setPermissionAndRequest('view all contacts');
3aab90bd 160 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
161 $this->assertEquals(1, $total);
162 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
163 }
164
165 /**
100fef9d 166 * Retrieve groups as 'view all contacts'
3aab90bd 167 */
168 function testGroupListViewAllContactsAll() {
aaac0e0b
EM
169 $this->_params['status'] = 3;
170 $this->setPermissionAndRequest('view all contacts');
3aab90bd 171 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
172 $this->assertEquals(4, $total);
173 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
174 $this->assertEquals('not-me-disabled', $groups[3]['group_name']);
175 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
176 $this->assertEquals('not-me-active', $groups[4]['group_name']);
177 }
178
179
180 /**
100fef9d 181 * Retrieve groups as 'view all contacts'
3aab90bd 182 */
183 function testGroupListAccessCiviCRM() {
aaac0e0b
EM
184 $this->setPermissionAndRequest('access CiviCRM');
185 $permissionClause = CRM_Contact_BAO_Group::getPermissionClause(TRUE);
186 $this->assertEquals('1 = 0', $permissionClause);
3aab90bd 187 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
188 $this->assertEquals(0, count($groups));
3aab90bd 189 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
190 }
191 /**
100fef9d 192 * Retrieve groups as 'view all contacts'
3aab90bd 193 */
194 function testGroupListAccessCiviCRMEnabled() {
aaac0e0b
EM
195 $this->_params['status'] = 1;
196 $this->setPermissionAndRequest('access CiviCRM');
3aab90bd 197 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
198 $this->assertEquals(0, count($groups));
3aab90bd 199 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
200 }
201 /**
100fef9d 202 * Retrieve groups as 'view all contacts'
3aab90bd 203 */
204 function testGroupListAccessCiviCRMDisabled() {
aaac0e0b
EM
205 $this->_params['status'] = 2;
206 $this->setPermissionAndRequest('access CiviCRM');
3aab90bd 207 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
208 $this->assertEquals(0, count($groups));
3aab90bd 209 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
210 }
211
212 /**
100fef9d 213 * Retrieve groups as 'view all contacts'
3aab90bd 214 */
215 function testGroupListAccessCiviCRMAll() {
aaac0e0b
EM
216 $this->_params['status'] = 2;
217 $this->setPermissionAndRequest('access CiviCRM');
3aab90bd 218 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
219 $this->assertEquals(0, count($groups));
3aab90bd 220 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
221 }
222
223 /**
100fef9d 224 * Retrieve groups as 'view all contacts'
3aab90bd 225 */
226 function testGroupListAccessCiviCRMFound() {
aaac0e0b
EM
227 $this->_params['title'] = 'p';
228 $this->setPermissionAndRequest('access CiviCRM');
3aab90bd 229 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
230 $this->assertEquals(0, count($groups));
231 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
232 }
233
234 /**
100fef9d 235 * Retrieve groups as 'view all contacts'
3aab90bd 236 */
237 function testGroupListAccessCiviCRMNotFound() {
aaac0e0b
EM
238 $this->_params['title'] = 'z';
239 $this->setPermissionAndRequest('access CiviCRM');
3aab90bd 240 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
241 $this->assertEquals(0, count($groups));
242 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
243 }
244
245 function testTraditionalACL () {
246 $this->setupACL();
3aab90bd 247 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
248 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
249 $this->assertEquals(1, $total, 'Total needs to be set correctly');
250 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
251 }
252
253 function testTraditionalACLNotFoundTitle () {
aaac0e0b 254 $this->_params['title'] = 'n';
3aab90bd 255 $this->setupACL();
3aab90bd 256 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
257 $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
258 $this->assertEquals(0, $total, 'Total needs to be set correctly');
259 }
260
261 function testTraditionalACLFoundTitle () {
aaac0e0b 262 $this->_params['title'] = 'p';
3aab90bd 263 $this->setupACL();
3aab90bd 264 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
265 $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
266 $this->assertEquals(2, $total, 'Total needs to be set correctly');
267 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
268 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
269 }
270
271 function testTraditionalACLDisabled () {
aaac0e0b 272 $this->_params['status'] = 2;
3aab90bd 273 $this->setupACL();
3aab90bd 274 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
275 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
276 $this->assertEquals(1, $total, 'Total needs to be set correctly');
277 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
278 }
279
280 function testTraditionalACLDisabledFoundTitle () {
aaac0e0b
EM
281 $this->_params['status'] = 2;
282 $this->_params['title'] = 'p';
3aab90bd 283 $this->setupACL();
3aab90bd 284 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
285 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
286 $this->assertEquals(1, $total, 'Total needs to be set correctly');
287 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
288 }
289
290 function testTraditionalACLDisabledNotFoundTitle () {
aaac0e0b
EM
291 $this->_params['status'] = 2;
292 $this->_params['title'] = 'n';
3aab90bd 293 $this->setupACL();
3aab90bd 294 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
295 $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
296 $this->assertEquals(0, $total, 'Total needs to be set correctly');
297 }
298
299 function testTraditionalACLEnabled () {
aaac0e0b 300 $this->_params['status'] = 1;
3aab90bd 301 $this->setupACL();
3aab90bd 302 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
303 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
304 $this->assertEquals(1, $total, 'Total needs to be set correctly');
305 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
306 }
307
308 function testTraditionalACLAll () {
aaac0e0b 309 $this->_params['status'] = 3;
3aab90bd 310 $this->setupACL();
3aab90bd 311 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
312 $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
313 $this->assertEquals(2, $total, 'Total needs to be set correctly');
314 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
315 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
316 }
317
318 /**
319 * ACL Group hook
320 */
321 function testGroupListAclGroupHookDisabled() {
aaac0e0b
EM
322 $this->_params['status'] = 2;
323 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 324 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
325 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
326 $this->assertEquals(1, $total, 'Total needs to be set correctly');
327 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
328 }
329
330 /**
331 * ACL Group hook
332 */
333 function testGroupListAclGroupHookDisabledFound() {
aaac0e0b
EM
334 $this->_params['status'] = 2;
335 $this->_params['title'] = 'p';
336 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 337 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
338 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
339 $this->assertEquals(1, $total, 'Total needs to be set correctly');
340 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
341 }
342
343 /**
344 * ACL Group hook
345 */
346 function testGroupListAclGroupHookDisabledNotFound() {
aaac0e0b
EM
347 $this->_params['status'] = 2;
348 $this->_params['title'] = 'n';
349 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 350 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
351 $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
352 $this->assertEquals(0, $total, 'Total needs to be set correctly');
353 }
354
355
356 /**
357 * ACL Group hook
358 */
359 function testGroupListAclGroupHook() {
aaac0e0b 360 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 361 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
362 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
363 $this->assertEquals(1, $total, 'Total needs to be set correctly');
364 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
365 }
366
367 /**
368 * ACL Group hook
369 */
370 function testGroupListAclGroupHookTitleNotFound() {
aaac0e0b
EM
371 $this->_params['title'] = 'n';
372 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 373 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
374 $this->assertEquals(0, $total, 'Total needs to be set correctly');
375 $this->assertEquals(0, count($groups), 'Returned groups should exclude disabled by default');
376 }
377
378 /**
379 * ACL Group hook
380 */
381 function testGroupListAclGroupHookTitleFound() {
aaac0e0b
EM
382 $this->_params['title'] = 'p';
383 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 384 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
385 $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
386 $this->assertEquals(2, $total, 'Total needs to be set correctly');
387 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
388 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
389 }
390
391 /**
392 * ACL Group hook
393 */
394 function testGroupListAclGroupHookAll() {
aaac0e0b
EM
395 $this->_params['status'] = 3;
396 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 397 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
398 $this->assertEquals(2, count($groups), 'Returned groups should exclude disabled by default');
399 $this->assertEquals(2, $total, 'Total needs to be set correctly');
400 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
401 $this->assertEquals('pick-me-disabled', $groups[1]['group_name']);
402 }
403
404 /**
405 * ACL Group hook
406 */
407 function testGroupListAclGroupHookEnabled() {
aaac0e0b
EM
408 $this->_params['status'] = 1;
409 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
3aab90bd 410 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
411 $this->assertEquals(1, count($groups), 'Returned groups should exclude disabled by default');
412 $this->assertEquals(1, $total, 'Total needs to be set correctly');
413 $this->assertEquals('pick-me-active', $groups[2]['group_name']);
414 }
415
416 /**
417 * Implements ACLGroup hook
418 * aclGroup function returns a list of permitted groups
419 * @param string $type
420 * @param integer $contactID
421 * @param string $tableName
422 * @param array $allGroups
423 * @param array $currentGroups
424 */
425 function hook_civicrm_aclGroup($type, $contactID, $tableName, &$allGroups, &$currentGroups) {
aaac0e0b 426 //don't use api - you will get a loop
3aab90bd 427 $sql = " SELECT * FROM civicrm_group WHERE name LIKE '%pick%'";
428 $groups = array();
429 $dao = CRM_Core_DAO::executeQuery($sql);
430 while ($dao->fetch()) {
431 $groups[] = $dao->id;
432 }
433
434 if(!empty($allGroups)) {
435 //all groups is empty if we really mean all groups but if a filter like 'is_disabled' is already applied
436 // it is populated, ajax calls from Manage Groups will leave empty but calls from New Mailing pass in a filtered list
437 $currentGroups = array_intersect($groups, array_flip($allGroups));
438 }
439 else {
440 $currentGroups = $groups;
441 }
442 }
443}