Fix fatal errors which break CRM_AllTests.
[civicrm-core.git] / tests / phpunit / CRM / Group / Page / AjaxTest.php
1 <?php
2 require_once 'CiviTest/CiviUnitTestCase.php';
3
4 /**
5 * Class CRM_Group_Page_AjaxTest
6 */
7 class 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
20 public $hookClass;
21
22 protected $_params = array();
23
24 public 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(
38 'title' => 'pick-me-disabled',
39 'is_active' => 0,
40 'name' => 'pick-me-disabled',
41 ));
42 $this->_permissionedGroup = $this->groupCreate(array(
43 'title' => 'pick-me-active',
44 'is_active' => 1,
45 'name' => 'pick-me-active',
46 ));
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
51 public function tearDown() {
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 /**
60 * @param $permission
61 */
62 public function setPermissionAndRequest($permission) {
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 */
73 public function setHookAndRequest($permission, $hook) {
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);
77 global $_REQUEST;
78 $_REQUEST = $this->_params;
79 }
80
81 /**
82 * Retrieve groups as 'view all contacts'
83 */
84 public function testGroupListViewAllContacts() {
85 $this->setPermissionAndRequest('view all contacts');
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 /**
93 * Retrieve groups as 'view all contacts' permissioned user
94 * Without setting params the default is both enabled & disabled
95 * (if you do set default it is enabled only)
96 */
97 public function testGroupListViewAllContactsFoundTitle() {
98 $this->_params['title'] = 'p';
99 $this->setPermissionAndRequest('view all contacts');
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 /**
107 * Retrieve groups as 'view all contacts'
108 */
109 public function testGroupListViewAllContactsNotFoundTitle() {
110 $this->_params['title'] = 'z';
111 $this->setPermissionAndRequest('view all contacts');
112 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
113 $this->assertEquals(0, $total);
114 }
115
116 /**
117 * Retrieve groups as 'edit all contacts'
118 */
119 public function testGroupListEditAllContacts() {
120 $this->setPermissionAndRequest('edit all contacts');
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 /**
128 * Retrieve groups as 'view all contacts'
129 */
130 public function testGroupListViewAllContactsEnabled() {
131 $this->_params['status'] = 1;
132 $this->setPermissionAndRequest('view all contacts');
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 /**
140 * Retrieve groups as 'view all contacts'
141 */
142 public function testGroupListViewAllContactsDisabled() {
143 $this->_params['status'] = 2;
144 $this->setPermissionAndRequest('view all contacts');
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 /**
152 * Retrieve groups as 'view all contacts'
153 */
154 public function testGroupListViewAllContactsDisabledNotFoundTitle() {
155 $this->_params['status'] = 2;
156 $this->_params['title'] = 'n';
157 $this->setPermissionAndRequest('view all contacts');
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 /**
164 * Retrieve groups as 'view all contacts'
165 */
166 public function testGroupListViewAllContactsDisabledFoundTitle() {
167 $this->_params['status'] = 2;
168 $this->_params['title'] = 'p';
169 $this->setPermissionAndRequest('view all contacts');
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 /**
176 * Retrieve groups as 'view all contacts'
177 */
178 public function testGroupListViewAllContactsAll() {
179 $this->_params['status'] = 3;
180 $this->setPermissionAndRequest('view all contacts');
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 /**
191 * Retrieve groups as 'view all contacts'
192 */
193 public function testGroupListAccessCiviCRM() {
194 $this->setPermissionAndRequest('access CiviCRM');
195 $permissionClause = CRM_Contact_BAO_Group::getPermissionClause(TRUE);
196 $this->assertEquals('1 = 0', $permissionClause);
197 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
198 $this->assertEquals(0, count($groups));
199 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
200 }
201
202 /**
203 * Retrieve groups as 'view all contacts'
204 */
205 public function testGroupListAccessCiviCRMEnabled() {
206 $this->_params['status'] = 1;
207 $this->setPermissionAndRequest('access CiviCRM');
208 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
209 $this->assertEquals(0, count($groups));
210 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
211 }
212
213 /**
214 * Retrieve groups as 'view all contacts'
215 */
216 public function testGroupListAccessCiviCRMDisabled() {
217 $this->_params['status'] = 2;
218 $this->setPermissionAndRequest('access CiviCRM');
219 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
220 $this->assertEquals(0, count($groups));
221 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
222 }
223
224 /**
225 * Retrieve groups as 'view all contacts'
226 */
227 public function testGroupListAccessCiviCRMAll() {
228 $this->_params['status'] = 2;
229 $this->setPermissionAndRequest('access CiviCRM');
230 list($groups, $total) = CRM_Group_Page_AJAX::getGroupList();
231 $this->assertEquals(0, count($groups));
232 $this->assertEquals(0, $total, 'Total returned should be accurate based on permissions');
233 }
234
235 /**
236 * Retrieve groups as 'view all contacts'
237 */
238 public function testGroupListAccessCiviCRMFound() {
239 $this->_params['title'] = 'p';
240 $this->setPermissionAndRequest('access CiviCRM');
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 /**
247 * Retrieve groups as 'view all contacts'
248 */
249 public function testGroupListAccessCiviCRMNotFound() {
250 $this->_params['title'] = 'z';
251 $this->setPermissionAndRequest('access CiviCRM');
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
257 public function testTraditionalACL() {
258 $this->setupACL();
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
265 public function testTraditionalACLNotFoundTitle() {
266 $this->_params['title'] = 'n';
267 $this->setupACL();
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
273 public function testTraditionalACLFoundTitle() {
274 $this->_params['title'] = 'p';
275 $this->setupACL();
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
283 public function testTraditionalACLDisabled() {
284 $this->_params['status'] = 2;
285 $this->setupACL();
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
292 public function testTraditionalACLDisabledFoundTitle() {
293 $this->_params['status'] = 2;
294 $this->_params['title'] = 'p';
295 $this->setupACL();
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
302 public function testTraditionalACLDisabledNotFoundTitle() {
303 $this->_params['status'] = 2;
304 $this->_params['title'] = 'n';
305 $this->setupACL();
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
311 public function testTraditionalACLEnabled() {
312 $this->_params['status'] = 1;
313 $this->setupACL();
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
320 public function testTraditionalACLAll() {
321 $this->_params['status'] = 3;
322 $this->setupACL();
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 /**
331 * ACL Group hook.
332 */
333 public function testGroupListAclGroupHookDisabled() {
334 $this->_params['status'] = 2;
335 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
343 * ACL Group hook.
344 */
345 public function testGroupListAclGroupHookDisabledFound() {
346 $this->_params['status'] = 2;
347 $this->_params['title'] = 'p';
348 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
356 * ACL Group hook.
357 */
358 public function testGroupListAclGroupHookDisabledNotFound() {
359 $this->_params['status'] = 2;
360 $this->_params['title'] = 'n';
361 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
369 * ACL Group hook.
370 */
371 public function testGroupListAclGroupHook() {
372 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
380 * ACL Group hook.
381 */
382 public function testGroupListAclGroupHookTitleNotFound() {
383 $this->_params['title'] = 'n';
384 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
391 * ACL Group hook.
392 */
393 public function testGroupListAclGroupHookTitleFound() {
394 $this->_params['title'] = 'p';
395 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
404 * ACL Group hook.
405 */
406 public function testGroupListAclGroupHookAll() {
407 $this->_params['status'] = 3;
408 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
417 * ACL Group hook.
418 */
419 public function testGroupListAclGroupHookEnabled() {
420 $this->_params['status'] = 1;
421 $this->setHookAndRequest('access CiviCRM', 'hook_civicrm_aclGroup');
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 /**
429 * Implements ACLGroup hook.
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 */
437 public function hook_civicrm_aclGroup($type, $contactID, $tableName, &$allGroups, &$currentGroups) {
438 //don't use api - you will get a loop
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
446 if (!empty($allGroups)) {
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 }
455
456 }