1
0
mirror of https://github.com/moodle/moodle.git synced 2025-03-20 07:30:01 +01:00

MDL-69231 tests: Improve existing role generator

Support definition of context levels and permissions.
This commit is contained in:
Andrew Nicols 2020-07-08 13:33:34 +08:00 committed by Simey Lameze
parent 03b605f2eb
commit c49877c8f5
5 changed files with 83 additions and 76 deletions
course/tests/behat
enrol/self/tests/behat
lib/testing/generator
user/tests/behat

@ -1,61 +1,53 @@
@core @core_course @javascript
@core @core_course
Feature: Keyholder role is listed as course contact
As a student I need to know who the keyholder is to enrol in a course
Background:
Given I log in as "admin"
And I am on site homepage
Given the following "roles" exist:
| shortname | name | archetype | context_coursecat | context_course | enrol/self:holdkey |
| keyholder | Keyholder | | 1 | 1 | allow |
And the following "categories" exist:
| name | category | idnumber |
| Cat 1 | 0 | CAT1 |
And I navigate to "Users > Permissions > Define roles" in site administration
And I click on "Add a new role" "button"
And I click on "Continue" "button"
And I set the following fields to these values:
| Short name | keyholder |
| Custom full name | Keyholder |
| contextlevel40 | 1 |
| contextlevel50 | 1 |
| enrol/self:holdkey | 1 |
And I click on "Create this role" "button"
And I navigate to "Appearance > Courses" in site administration
And I click on "Keyholder" "checkbox"
And I press "Save changes"
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
| keyholder1 | Keyholder | 1 | keyholder1@example.com |
| student1 | Student | 1 | teacher1@example.com |
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
| keyholder1 | Keyholder | 1 | keyholder1@example.com |
| student1 | Student | 1 | teacher1@example.com |
And the following "courses" exist:
| fullname | shortname | format | coursedisplay | numsections | category |
| Course 1 | C1 | topics | 0 | 5 | CAT1 |
And I add "Self enrolment" enrolment method in "Course 1" with:
| Course 1 | C1 | topics | 0 | 5 | CAT1 |
When I log in as "admin"
And I navigate to "Appearance > Courses" in site administration
And I set the following fields to these values:
| Keyholder | 1 |
And I press "Save changes"
And I am on "Course 1" course homepage
And I add "Self enrolment" enrolment method with:
| Custom instance name | Test student enrolment |
| Enrolment key | letmein |
| Enrolment key | letmein |
And I log out
Scenario: Keyholder assigned to a course
When I log in as "admin"
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| keyholder1 | C1 | keyholder |
And I log out
And I log in as "student1"
Given the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| keyholder1 | C1 | keyholder |
When I log in as "student1"
And I am on site homepage
And I follow "Course 1"
Then I should see "Keyholder 1"
Scenario: Keyholder assigned to a category
When I log in as "admin"
And the following "role assigns" exist:
| user | role | contextlevel | reference |
| keyholder1 | keyholder | Category | CAT1 |
Given the following "role assigns" exist:
| user | role | contextlevel | reference |
| keyholder1 | keyholder | Category | CAT1 |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
And I log out
And I log in as "student1"
| user | course | role |
| teacher1 | C1 | editingteacher |
When I log in as "student1"
And I am on site homepage
And I follow "Course 1"
Then I should see "Keyholder 1"

@ -5,23 +5,17 @@ Feature: Users can be defined as key holders in courses where self enrolment is
I need to auto enrol me in courses
Background:
Given the following "users" exist:
Given the following "roles" exist:
| shortname | name | archetype | context_course | enrol/self:holdkey |
| keyholder | Key holder | | 1 | allow |
And the following "users" exist:
| username | firstname | lastname | email |
| manager1 | Manager | 1 | manager1@example.com |
| student1 | Student | 1 | student1@example.com |
And the following "courses" exist:
| fullname | shortname | format |
| Course 1 | C1 | topics |
| Course 1 | C1 | topics |
And I log in as "admin"
And I navigate to "Users > Permissions > Define roles" in site administration
And I click on "Add a new role" "button"
And I click on "Continue" "button"
And I set the following fields to these values:
| Short name | keyholder |
| Custom full name | Key holder |
| contextlevel50 | 1 |
| enrol/self:holdkey | 1 |
And I click on "Create this role" "button"
And I navigate to "Appearance > Courses" in site administration
And I set the following fields to these values:
| Key holder | 1 |
@ -38,11 +32,13 @@ Feature: Users can be defined as key holders in courses where self enrolment is
| Custom instance name | Test student enrolment |
| Enrolment key | moodle_rules |
And I log out
And I log in as "student1"
Scenario: The key holder name is displayed on site home page
Given I log in as "student1"
And I am on "Course 1" course homepage
And I should see "You should have received this enrolment key from:"
And I should see "Manager 1"
And I set the following fields to these values:
When I set the following fields to these values:
| Enrolment key | moodle_rules |
And I press "Enrol me"
Then I should see "Topic 1"

@ -789,7 +789,20 @@ EOD;
// If no archetype was specified we allow it to be added to all contexts,
// otherwise we allow it in the archetype contexts.
if (!$record['archetype']) {
$contextlevels = array_keys(context_helper::get_all_levels());
$contextlevels = [];
$usefallback = true;
foreach (context_helper::get_all_levels() as $level => $title) {
if (array_key_exists($title, $record)) {
$usefallback = false;
if (!empty($record[$title])) {
$contextlevels[] = $level;
}
}
}
if ($usefallback) {
$contextlevels = array_keys(context_helper::get_all_levels());
}
} else {
// Copying from the archetype default rol.
$archetyperoleid = $DB->get_field(
@ -802,7 +815,6 @@ EOD;
set_role_contextlevels($newroleid, $contextlevels);
if ($record['archetype']) {
// We copy all the roles the archetype can assign, override, switch to and view.
if ($record['archetype']) {
$types = array('assign', 'override', 'switch', 'view');
@ -820,6 +832,31 @@ EOD;
role_cap_duplicate($sourcerole, $newroleid);
}
$allcapabilities = get_all_capabilities();
$foundcapabilities = array_intersect(array_keys($allcapabilities), array_keys($record));
$systemcontext = \context_system::instance();
$allpermissions = [
'inherit' => CAP_INHERIT,
'allow' => CAP_ALLOW,
'prevent' => CAP_PREVENT,
'prohibit' => CAP_PROHIBIT,
];
foreach ($foundcapabilities as $capability) {
$permission = $record[$capability];
if (!array_key_exists($permission, $allpermissions)) {
throw new \coding_exception("Unknown capability permissions '{$permission}'");
}
assign_capability(
$capability,
$allpermissions[$permission],
$newroleid,
$systemcontext->id,
true
);
}
return $newroleid;
}

@ -59,22 +59,13 @@ Feature: The student can navigate to their grades page and user grade report.
Then I should see "My badges from Acceptance test site web site"
Scenario: Log in as a parent and view a childs grades.
Given the following "roles" exist:
| shortname | name | archetype | context_user | moodle/user:editprofile | moodle/user:viewalldetails | moodle/user:viewuseractivitiesreport | moodle/user:viewdetails |
| Parent | Parent | | 1 | allow | allow | allow | allow |
When I log in as "admin"
And I am on site homepage
And I turn editing mode on
And I add the "Mentees" block
And I navigate to "Users > Permissions > Define roles" in site administration
And I click on "Add a new role" "button"
And I click on "Continue" "button"
And I set the following fields to these values:
| Short name | Parent |
| Custom full name | Parent |
| contextlevel30 | 1 |
| moodle/user:editprofile | 1 |
| moodle/user:viewalldetails | 1 |
| moodle/user:viewuseractivitiesreport | 1 |
| moodle/user:viewdetails | 1 |
And I click on "Create this role" "button"
And I am on the "student1" "user > profile" page
And I click on "Preferences" "link" in the ".profile_tree" "css_element"
And I follow "Assign roles relative to this user"

@ -52,22 +52,13 @@ Feature: Access to preferences page
Then I should see "Preferences" in the "region-main" "region"
Scenario: A user with the appropriate permissions can view another user's permissions page.
Given I log in as "admin"
Given the following "roles" exist:
| shortname | name | archetype | context_user | moodle/user:editprofile | moodle/user:viewalldetails | moodle/user:viewuseractivitiesreport | moodle/user:viewdetails |
| Parent | Parent | | 1 | allow | allow | allow | allow |
When I log in as "admin"
And I am on site homepage
And I turn editing mode on
And I add the "Mentees" block
And I navigate to "Users > Permissions > Define roles" in site administration
And I click on "Add a new role" "button"
And I click on "Continue" "button"
And I set the following fields to these values:
| Short name | Parent |
| Custom full name | Parent |
| contextlevel30 | 1 |
| moodle/user:editprofile | 1 |
| moodle/user:viewalldetails | 1 |
| moodle/user:viewuseractivitiesreport | 1 |
| moodle/user:viewdetails | 1 |
And I click on "Create this role" "button"
And I am on the "student1" "user > profile" page
And I click on "Preferences" "link" in the ".profile_tree" "css_element"
And I follow "Assign roles relative to this user"