Merge pull request #11571 from magnolia61/CRM-21693_Show_Name_in_OnlinePayNow_UI
[civicrm-core.git] / tests / phpunit / WebTest / ACL / AssignUsersToRolesTest.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
81621fee 4 | CiviCRM version 4.7 |
6a488035 5 +--------------------------------------------------------------------+
8c9251b3 6 | Copyright CiviCRM LLC (c) 2004-2018 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License along with this program; if not, contact CiviCRM LLC |
21 | at info[AT]civicrm[DOT]org. If you have questions about the |
22 | GNU Affero General Public License or the licensing of CiviCRM, |
23 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
24 +--------------------------------------------------------------------+
d25dd0ee 25 */
6a488035 26
6a488035 27require_once 'CiviTest/CiviSeleniumTestCase.php';
e9479dcf
EM
28
29/**
30 * Class WebTest_ACL_AssignUsersToRolesTest
31 */
6a488035
TO
32class WebTest_ACL_AssignUsersToRolesTest extends CiviSeleniumTestCase {
33
34 protected function setUp() {
35 parent::setUp();
36 }
37
00be9182 38 public function testAssignUsersToRoles() {
6a488035
TO
39
40 $this->webtestLogin();
42daf119 41
bb21371e 42 $this->openCiviPage("group/add", "reset=1");
6a488035
TO
43 $groupTitle = "testGroup" . substr(sha1(rand()), 0, 4);
44 $this->type("title", $groupTitle);
45 $this->click("group_type[1]");
46 $this->click("_qf_Edit_upload-bottom");
47 $this->waitForPageToLoad($this->getTimeoutMsec());
48
6c5f7368 49 $this->waitForText('crm-notification-container', "The Group '{$groupTitle}' has been saved.");
6a488035 50
118e964e 51 $this->openCiviPage("admin/options/acl_role", "action=add&reset=1", "_qf_Options_cancel-bottom");
6a488035
TO
52
53 $label = "TestAclRole" . substr(sha1(rand()), 0, 4);
54 $this->type("label", $label);
45d22844 55 $this->type("value", "Acl value" . $label);
44c45561 56 $this->click("_qf_Options_next-bottom");
6c5f7368 57
44c45561 58 $this->waitForText('crm-notification-container', "The ACL Role '{$label}' has been saved.");
6a488035 59
bb21371e 60 $this->openCiviPage("acl/entityrole", "action=add&reset=1");
6a488035
TO
61
62 $this->select("acl_role_id", "label=" . $label);
63 $this->select("entity_id", "label={$groupTitle}");
64
6c5f7368 65 $this->clickLink("_qf_EntityRole_next-botttom");
6a488035 66
bb21371e 67 $this->openCiviPage("acl", "action=add&reset=1");
6a488035
TO
68 $this->click("group_id");
69 $this->select("group_id", "label={$groupTitle}");
70 $this->select("operation", "label=View");
71 $this->select("entity_id", "label={$label}");
72 $this->type("name", "describe {$label}");
6c5f7368 73 $this->clickLink("_qf_ACL_next-bottom");
6a488035 74 }
4c117a1a 75
f4e1672f 76 /**
77 * Check ACL for Smart Groups and Profiles.
78 */
79 public function testACLforSmartGroupsAndProfiles() {
4c117a1a 80 $this->webtestLogin();
81
82 //Create role
83 $role = 'role' . substr(sha1(rand()), 0, 7);
84 $this->open($this->sboxPath . "admin/people/permissions/roles");
6494453b 85 $this->waitForAjaxContent();
4c117a1a 86 $this->type("edit-name", $role);
87 $this->click("edit-add");
88 $this->waitForPageToLoad($this->getTimeoutMsec());
89 $this->open($this->sboxPath . "admin/people/permissions/roles");
90 $this->waitForElementPresent("xpath=//table[@id='user-roles']/tbody//tr/td[1][text()='{$role}']");
91 $roleURL = explode('/', $this->getAttribute("xpath=//table[@id='user-roles']/tbody//tr/td[1][text()='{$role}']/../td[4]/a[text()='edit permissions']/@href"));
92 $roleId = end($roleURL);
93
94 //create user with roleId
95 $this->open($this->sboxPath . "admin/people/create");
96 $this->waitForElementPresent("edit-submit");
97 $user = "TestUser" . substr(sha1(rand()), 0, 4);
98 $this->type("edit-name", $user);
99 $emailId = substr(sha1(rand()), 0, 7) . '@web.com';
100 $this->type("edit-mail", $emailId);
101 $this->type("edit-pass-pass1", "Test12345");
102 $this->type("edit-pass-pass2", "Test12345");
103 $role = "edit-roles-" . $roleId;
104 $this->check("name=roles[$roleId] value={$roleId}");
105 $firstName = 'Ma' . substr(sha1(rand()), 0, 4);
106 $lastName = 'An' . substr(sha1(rand()), 0, 7);
107 $this->type("first_name", $firstName);
108 $this->type("last_name", $lastName);
109 $this->click("edit-submit");
89432ee3 110 $this->waitForPageToLoad($this->getTimeoutMsec());
4c117a1a 111 $permissions = array("edit-{$roleId}-access-civicrm");
112 $this->changePermissions($permissions);
113
114 //Create group and add your user's contact to that group
115 $this->openCiviPage("group/add", "reset=1");
116 $groupTitle = "testGroup" . substr(sha1(rand()), 0, 4);
117 $this->type("title", $groupTitle);
118 $this->click("group_type[1]");
119 $this->click("_qf_Edit_upload-bottom");
120 $this->waitForPageToLoad($this->getTimeoutMsec());
121 $this->waitForText('crm-notification-container', "The Group '{$groupTitle}' has been saved.");
122 $this->waitForElementPresent("_qf_Basic_refresh");
123 $this->type('sort_name', $firstName);
124 $this->click('_qf_Basic_refresh');
125 $this->waitForPageToLoad($this->getTimeoutMsec());
126 $this->waitForElementPresent("_qf_Basic_next_action");
f08c3858
WA
127 $this->assertTrue($this->isElementPresent("xpath=//table[@class='selector row-highlight']/tbody/tr/td[3]/a[text()='{$lastName}, {$firstName}']"));
128 $this->click("xpath=//table[@class='selector row-highlight']/tbody//tr/td[1]/input[@type='checkbox']");
4c117a1a 129 $this->click('_qf_Basic_next_action');
130 $this->waitForElementPresent("_qf_AddToGroup_back-bottom");
131 $this->click('_qf_AddToGroup_next-bottom');
132 $this->waitForText('crm-notification-container', "1 contact added to group");
133
134 //create Smart Group
135 $this->openCiviPage('contact/search/advanced', 'reset=1');
136 $this->click("location");
137 $this->waitForElementPresent("country");
86797006 138 $this->select("country", "UNITED STATES");
4c117a1a 139 $this->clickLink("_qf_Advanced_refresh");
140 $this->waitForElementPresent("task");
141 $this->click('radio_ts', 'ts_all');
142 $this->click('task');
7f12f044 143 $this->select('task', 'label=Group - create smart group');
4c117a1a 144 $this->waitForPageToLoad($this->getTimeoutMsec());
145 $smartGroupTitle = "SmartGroup" . substr(sha1(rand()), 0, 4);
146 $this->type("title", $smartGroupTitle);
147 $this->clickLink("_qf_SaveSearch_next-bottom");
24f591b0 148 $this->waitForText('crm-notification-container', "Your smart group has been saved as '$smartGroupTitle'");
4c117a1a 149
150 //Create ACL role
f4e1672f 151 $this->openCiviPage("admin/options/acl_role", "reset=1", "xpath=//a[@class='button new-option']");
152 $this->click("xpath=//a[@class='button new-option']");
4c117a1a 153 $label = "TestAclRole" . substr(sha1(rand()), 0, 4);
f4e1672f 154 $this->waitForElementPresent("label");
4c117a1a 155 $this->type("label", $label);
156 $this->click("_qf_Options_next-bottom");
157 $this->waitForText('crm-notification-container', "The ACL Role '{$label}' has been saved.");
158
159 // Assign group to ACL role created
f4e1672f 160 $this->openCiviPage("acl/entityrole", "reset=1", 'newACL');
161 $this->click('newACL');
162 $this->waitForElementPresent("acl_role_id");
4c117a1a 163 $this->select("acl_role_id", "label=" . $label);
a8d9d207 164 $this->waitForAjaxContent();
4c117a1a 165 $this->select("entity_id", "label={$groupTitle}");
f4e1672f 166 $this->clickLink("_qf_EntityRole_next-botttom", 'newACL', FALSE);
4c117a1a 167
168 //Create ACL granting 'Edit' access on smart group to the role
c79fb98e 169 $this->waitForAjaxContent();
f4e1672f 170 $this->openCiviPage("acl", "reset=1");
171 $this->click('newACL');
172 $this->waitForElementPresent("group_id");
4c117a1a 173 $this->select("group_id", "label={$smartGroupTitle}");
174 $this->select("operation", "label=Edit");
a8d9d207 175 $this->waitForAjaxContent();
4c117a1a 176 $this->select("entity_id", "label={$label}");
177 $this->type("name", "describe {$label}");
f4e1672f 178 $this->clickLink("_qf_ACL_next-bottom", 'newACL', FALSE);
179
180 //ACL granting edit permission on events.
c79fb98e 181 $this->waitForAjaxContent();
f4e1672f 182 $this->click('newACL');
183 $this->waitForElementPresent('name');
184 $this->type("name", "Edit All Events $label");
185 $this->select("entity_id", "label={$label}");
a8d9d207 186 $this->waitForAjaxContent();
f4e1672f 187 $this->select("operation", "label=Edit");
188 $this->click("xpath=//label[contains(text(), 'Events')]");
189 $this->select("event_id", "value=0");
190 $this->clickLink("_qf_ACL_next-bottom", 'newACL', FALSE);
191
192 $this->webtestLogin($user, 'Test12345');
193 $this->openCiviPage('event/manage/registration', 'reset=1&action=update&id=3');
194 //ensure all the three buttons are not displayed
195 $this->waitForElementPresent('registration_screen');
196 $this->verifyElementNotPresent("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div/button[contains(text(), 'Edit')]");
197 $this->verifyElementNotPresent("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div//button[contains(text(), 'Copy')]");
198 $this->verifyElementNotPresent("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div//button[contains(text(), 'Create')]");
199 $this->webtestLogout();
200
201 $this->webtestLogin();
202
203 //Create ACL granting Edit permission on Profiles
204 $this->openCiviPage("acl", "reset=1", 'newACL');
205 $this->click('newACL');
206 $this->waitForElementPresent('name');
207 $this->type("name", "Edit All Profiles $label");
208 $this->select("entity_id", "label={$label}");
209 $this->select("operation", "label=Edit");
210 $this->click("xpath=//label[contains(text(), 'A profile')]");
211 $this->select("uf_group_id", "value=0");
212 $this->clickLink("_qf_ACL_next-bottom", 'newACL', FALSE);
4c117a1a 213
214 //Login as your role user and do Find Contacts
215 $this->webtestLogin($user, 'Test12345');
216 $this->openCiviPage('contact/search/advanced', 'reset=1');
217 $this->click("location");
218 $this->waitForElementPresent("country");
86797006 219 $this->select("country", "UNITED STATES");
4c117a1a 220 $this->clickLink("_qf_Advanced_refresh");
221 $this->waitForElementPresent("xpath=//div[@class='crm-search-results']");
222 $this->assertElementNotContainsText("xpath=//form[@id='Advanced']/div[3]/div/div", "No matches found for");
86797006 223 $this->verifyText("xpath=//div[@class='crm-search-results']//table/tbody/tr[1]/td[8]", 'UNITED STATES');
f4e1672f 224
225 $this->checkEditOnEventProfile();
226 }
227
228 /**
229 * CRM-16776 - Check Profile Edit on Events with 'manage event profile' permission.
230 */
231 public function testEventProfilePermission() {
232 $this->webtestLogin();
233
234 //create new role
235 $role = 'role' . substr(sha1(rand()), 0, 7);
236 $this->open($this->sboxPath . "admin/people/permissions/roles");
237
6494453b 238 $this->waitForAjaxContent();
f4e1672f 239 $this->type("edit-name", $role);
240 $this->click("edit-add");
241 $this->waitForPageToLoad($this->getTimeoutMsec());
242
243 $this->open($this->sboxPath . "admin/people/permissions/roles");
244 $this->waitForElementPresent("xpath=//table[@id='user-roles']/tbody//tr/td[1][text()='{$role}']");
245 $roleId = explode('/', $this->getAttribute("xpath=//table[@id='user-roles']/tbody//tr/td[1][text()='{$role}']/../td[4]/a[text()='edit permissions']/@href"));
246 $roleId = end($roleId);
247
248 $this->open($this->sboxPath . "admin/people/create");
249 $this->waitForElementPresent("edit-submit");
250 $name = "TestUser" . substr(sha1(rand()), 0, 4);
251 $this->type("edit-name", $name);
252 $emailId = substr(sha1(rand()), 0, 7) . '@web.com';
253 $this->type("edit-mail", $emailId);
254 $this->type("edit-pass-pass1", "Test12345");
255 $this->type("edit-pass-pass2", "Test12345");
256 $role = "edit-roles-" . $roleId;
257 $this->check("name=roles[$roleId] value={$roleId}");
258
259 //Add profile Details
260 $firstName = 'Ma' . substr(sha1(rand()), 0, 4);
261 $lastName = 'An' . substr(sha1(rand()), 0, 7);
262 $this->type("first_name", $firstName);
263 $this->type("last_name", $lastName);
264
265 $this->click("edit-submit");
266 $this->waitForPageToLoad($this->getTimeoutMsec());
267
268 $permissions = array("edit-{$roleId}-access-civicrm", "edit-{$roleId}-edit-all-events", "edit-{$roleId}-manage-event-profiles");
269 $this->changePermissions($permissions);
270 $this->webtestLogout();
271 $this->webtestLogin($name, 'Test12345');
272 $this->checkEditOnEventProfile();
273 }
274
275 /**
276 * Check Profile Edit on OnlineRegistration Tab
277 */
278 public function checkEditOnEventProfile() {
279 $this->openCiviPage('event/manage/registration', 'reset=1&action=update&id=3');
280 //ensure all the three buttons are displayed
281 $this->waitForElementPresent("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div/button[contains(text(), 'Edit')]");
282 $this->waitForElementPresent("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div//button[contains(text(), 'Copy')]");
283 $this->waitForElementPresent("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div//button[contains(text(), 'Create')]");
284
285 $this->click("xpath=//div[@id='registration_screen']/table[2]/tbody/tr/td[2]/div/div/button[contains(text(), 'Edit')]");
286 $this->waitForAjaxContent();
287 $this->waitForElementPresent("//div[@class='crm-designer-fields-region']");
288 if ($this->isElementPresent("xpath=//span[@class='crm-designer-label'][contains(text(), 'City')]")) {
289 $this->click("xpath=//span[@class='crm-designer-label'][contains(text(), 'City')]/../../span//a[@title='Remove']");
290 $this->waitForElementNotPresent("xpath=//span[@class='crm-designer-label'][contains(text(), 'City')]");
291 }
292 else {
293 $this->click("xpath=//li[@class='crm-designer-palette-section jstree-closed']/a[contains(text(), 'Individual')]");
294 $this->waitForAjaxContent();
295 $this->doubleClick("xpath=//a[contains(text(), 'Individual')]/../ul//li/a[contains(text(), 'City')]");
296 $this->waitForAjaxContent();
297 }
298 $this->click("xpath=//button/span[contains(text(), 'Save')]");
299 $this->waitForElementPresent("crm-notification-container");
300 $this->assertElementNotContainsText("crm-notification-container", 'API permission check failed for UFGroup/create call; insufficient permission: require administer CiviCRM');
301 $this->click("_qf_Registration_upload-top");
302 $this->waitForTextPresent("'Online Registration' information has been saved.");
4c117a1a 303 }
96025800 304
d2abb0a8
WA
305 /**
306 * CRM-16777: Allow to add schedule reminder for event through ACLs 'edit' permission
307 */
308 public function testACLforReminders() {
309 $this->webtestLogin('admin');
310
311 //Details for ACLUser1
312 $ACLrole1 = 'ACLrole1' . substr(sha1(rand()), 0, 7);
313 $ACLUser1 = "ACLUser1" . substr(sha1(rand()), 0, 4);
314 $emailId1 = substr(sha1(rand()), 0, 7) . '@web.com';
315
316 //create ACLrole1 (with 'Access CiviCRM' and 'Access CiviEvent' permissions only).
317 $this->open($this->sboxPath . "admin/people/permissions/roles");
318 $this->type("edit-name", $ACLrole1);
319 $this->waitForElementPresent("edit-add");
320 $this->click("edit-add");
321 $this->waitForPageToLoad($this->getTimeoutMsec());
322 $this->open($this->sboxPath . "admin/people/permissions/roles");
323 $this->waitForElementPresent("xpath=//table[@id='user-roles']/tbody//tr/td[1][text()='{$ACLrole1}']");
6494453b 324 $roleId = explode("people/permissions/", $this->getAttribute("xpath=//table[@id='user-roles']/tbody//tr/td[1][text()='{$ACLrole1}']/../td[4]/a[text()='edit permissions']/@href"));
d2abb0a8 325 $permissions = array(
6494453b
SB
326 "edit-{$roleId[1]}-access-civicrm",
327 "edit-{$roleId[1]}-access-civievent",
d2abb0a8
WA
328 );
329 $this->changePermissions($permissions);
330
331 //Create ACLUser1
332 $this->open($this->sboxPath . "admin/people/create");
333 $this->waitForElementPresent("edit-submit");
334 $this->type("edit-name", $ACLUser1);
335 $this->type("edit-mail", $emailId1);
336 $this->type("edit-pass-pass1", "Test12345");
337 $this->type("edit-pass-pass2", "Test12345");
338 $this->click("xpath=//div[@class='form-item form-type-checkboxes form-item-roles']/div//div/label[contains(text(), '{$ACLrole1}')]");
339 $firstName = 'Ma' . substr(sha1(rand()), 0, 4);
340 $lastName = 'An' . substr(sha1(rand()), 0, 7);
341 $this->type("first_name", $firstName);
342 $this->type("last_name", $lastName);
343 $this->type("street_address-1", "902C El Camino Way SW");
344 $this->type("city-1", "Dumfries");
345 $this->type("postal_code-1", "1234");
346 $this->select("state_province-1", "value=1019");
347 $this->click("edit-submit");
348 $this->waitForPageToLoad($this->getTimeoutMsec());
349
350 //Create group and add contact.
351 $this->openCiviPage('group/add', 'reset=1', '_qf_Edit_upload-bottom');
352 $groupTitle = 'ACLGroup' . substr(sha1(rand()), 0, 7);
353 $this->type("title", $groupTitle);
354 $this->click("group_type_1");
355 $this->click("_qf_Edit_upload-bottom");
356 $this->waitForElementPresent('_qf_Basic_refresh');
357 $this->type("sort_name", $firstName);
358 $this->click('_qf_Basic_refresh');
359 $this->waitForElementPresent('toggleSelect');
360 $this->click('_qf_Basic_next_action');
361 $this->waitForElementPresent('_qf_AddToGroup_back-bottom');
362 $this->click('_qf_AddToGroup_next-bottom');
363 $this->waitForTextPresent("1 contact added to group");
364
365 //Add the ACLs
366 $this->openCiviPage("admin/options/acl_role", "action=add&reset=1", "_qf_Options_cancel-bottom");
367 $label = "TestAclRole" . substr(sha1(rand()), 0, 4);
368 $this->type("label", $label);
369 $this->type("value", "Acl value" . $label);
370 $this->click("_qf_Options_next-bottom");
371 $this->waitForText('crm-notification-container', "The ACL Role '{$label}' has been saved.");
372 $this->waitForAjaxContent();
373 $this->openCiviPage("acl/entityrole", "action=add&reset=1");
374 $this->waitForAjaxContent();
375 $this->select("acl_role_id", "label=" . $label);
376 $this->waitForAjaxContent();
377 $this->select("entity_id", "label={$groupTitle}");
378 $this->clickLink("_qf_EntityRole_next-botttom");
379 $this->openCiviPage("acl", "action=add&reset=1");
380 $this->type("name", "Edit Events{$label}");
381 $this->select("operation", "label=Edit");
382 $this->select("entity_id", "label={$label}");
a8d9d207 383 $this->waitForElementPresent("xpath=//tr[@class='crm-acl-form-block-object_type']/td[2]/label[contains(text(), 'Events')]");
d2abb0a8
WA
384 $this->click("xpath=//tr[@class='crm-acl-form-block-object_type']/td[2]/label[contains(text(), 'Events')]");
385 $this->select("event_id", "label=All Events");
386 $this->clickLink("_qf_ACL_next-bottom");
387 $this->webtestLogout();
388 $this->webtestLogin($ACLUser1, 'Test12345');
389
390 //Add scheduled reminder
391 $this->openCiviPage("event/manage/reminder", "reset=1&action=browse&setTab=1&id=1");
392 $reminderTitle = "Fall Fundraiser Dinner" . substr(sha1(rand()), 0, 4);
393 $this->waitForElementPresent('newScheduleReminder');
394 $this->click("newScheduleReminder");
395 $this->waitForElementPresent("_qf_ScheduleReminders_next-bottom");
396 $this->type("title", $reminderTitle);
397 $this->select('entity', 'label=Registered');
398 $this->select('start_action_offset', 'label=1');
399 $this->select('start_action_condition', 'label=after');
400 $this->click('is_repeat');
401 $this->select('repetition_frequency_interval', 'label=2');
402 $this->select('end_date', 'label=Event End Date');
403 $this->click('recipient');
404 $this->select('recipient', 'label=Participant Role');
405 $subject = 'subject' . substr(sha1(rand()), 0, 4);
406 $this->type('subject', $subject);
407 $this->fillRichTextField("html_message", "This is the test HTML version here!!!", 'CKEditor');
408 $this->type("text_message", "This is the test text version here!!!");
409 $this->click('_qf_ScheduleReminders_next-bottom');
410 $this->webtestLogout();
411
412 //Disable the ACLs
413 $this->webtestLogin('admin');
414 $this->openCiviPage("acl", "reset=1");
415 $this->waitForAjaxContent();
416 $this->click("xpath=//div[contains(text(), 'Edit Events{$label}')]/../../td[7]/span/a[2][contains(text(), 'Disable')]");
417 $this->waitForTextPresent("Are you sure you want to disable this ACL?");
418 $this->click("xpath=//button//span[contains(text(), 'Yes')]");
419
420 //Login with same test-user created above
421 $this->webtestLogin($ACLUser1, 'Test12345');
422 $this->openCiviPage("event/manage", "reset=1");
423 $this->waitForElementPresent("xpath=//div[@id='event_status_id']/div[@class='dataTables_wrapper no-footer']");
424 $this->verifyText("xpath=//div[@id='event_status_id']/div[@class='dataTables_wrapper no-footer']/table/tbody/tr/td", "None found.");
425 }
426
6a488035 427}