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