mirror of
https://github.com/moodle/moodle.git
synced 2025-04-14 13:02:07 +02:00
MDL-42276 core_group: added behat tests to automate group actions
1. Added new step definitions to check if an element exists or does not exist in another. 2. Added new step definitions to check if an element is readonly or is not readonly. 3. Automated testing for MDLQA-1812 and MDLQA-1813. Added behat test for deleting groups/groupings with and without the 'moodle/course:changeidnumber' capability. 4. Automated MDLQA-2105. Added behat test for creating groups/groupings without the 'moodle/course:changeidnumber' capability. 5. Automated MDLQA-2238 and MDLQA-2335. Added behat test for updating groups/groupings with and without the 'moodle/course:changeidnumber' capability.
This commit is contained in:
parent
d214057cad
commit
a2d3e3b6ca
@ -58,3 +58,36 @@ Feature: Organize students into groups
|
||||
And I should see "Student 2"
|
||||
And I should see "Student 3"
|
||||
And I should not see "Student 0"
|
||||
|
||||
@javascript
|
||||
Scenario: Create groups and groupings without the 'moodle/course:changeidnumber' capability
|
||||
Given the following "courses" exists:
|
||||
| fullname | shortname | category | groupmode |
|
||||
| Course 1 | C1 | 0 | 1 |
|
||||
And the following "users" exists:
|
||||
| username | firstname | lastname | email |
|
||||
| teacher1 | Teacher | 1 | teacher1@asd.com |
|
||||
And the following "course enrolments" exists:
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
And I log in as "admin"
|
||||
And I set the following system permissions of "Teacher" role:
|
||||
| moodle/course:changeidnumber | Prevent |
|
||||
And I log out
|
||||
And I log in as "teacher1"
|
||||
And I follow "Course 1"
|
||||
And I expand "Users" node
|
||||
And I follow "Groups"
|
||||
When I press "Create group"
|
||||
Then the "idnumber" "field" should be readonly
|
||||
And I fill the moodle form with:
|
||||
| Group name | The greatest group that never existed |
|
||||
And I press "Save changes"
|
||||
And I should see "The greatest group that never existed"
|
||||
And I follow "Groupings"
|
||||
And I press "Create grouping"
|
||||
And the "idnumber" "field" should be readonly
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Not the greatest grouping, but it's ok! |
|
||||
And I press "Save changes"
|
||||
And I should see "Not the greatest grouping, but it's ok!"
|
||||
|
81
group/tests/behat/delete_groups.feature
Normal file
81
group/tests/behat/delete_groups.feature
Normal file
@ -0,0 +1,81 @@
|
||||
@core @core_group
|
||||
Feature: Automatic deletion of groups and groupings
|
||||
In order to check the expected results occur when deleting groups and groupings in different scenarios
|
||||
As a teacher
|
||||
I need to create groups and groupings under different scenarios and check that the expected result occurs when attempting to delete them.
|
||||
|
||||
Background:
|
||||
Given the following "courses" exists:
|
||||
| fullname | shortname | format |
|
||||
| Course 1 | C1 | topics |
|
||||
And the following "users" exists:
|
||||
| username | firstname | lastname | email |
|
||||
| teacher1 | Teacher | 1 | teacher1@asd.com |
|
||||
And the following "course enrolments" exists:
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
And I log in as "teacher1"
|
||||
And I follow "Course 1"
|
||||
And I expand "Users" node
|
||||
And I follow "Groups"
|
||||
And I press "Create group"
|
||||
And I fill the moodle form with:
|
||||
| Group name | Group (without ID) |
|
||||
And I press "Save changes"
|
||||
And I press "Create group"
|
||||
And I fill the moodle form with:
|
||||
| Group name | Group (with ID) |
|
||||
| Group ID number | An ID |
|
||||
And I press "Save changes"
|
||||
And I follow "Groupings"
|
||||
And I press "Create grouping"
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Grouping (without ID) |
|
||||
And I press "Save changes"
|
||||
And I press "Create grouping"
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Grouping (with ID) |
|
||||
| Grouping ID number | An ID |
|
||||
And I press "Save changes"
|
||||
And I follow "Groups"
|
||||
|
||||
@javascript
|
||||
Scenario: Delete groups and groupings with and without ID numbers
|
||||
Given I select "Group (without ID) (0)" from "groups"
|
||||
And I press "Delete selected group"
|
||||
And I press "Yes"
|
||||
Then the "groups" select box should not contain "Group (without ID) (0)"
|
||||
And I select "Group (with ID) (0)" from "groups"
|
||||
And I press "Delete selected group"
|
||||
And I press "Yes"
|
||||
And the "groups" select box should not contain "Group (with ID) (0)"
|
||||
And I follow "Groupings"
|
||||
And I click on "Delete" "link" in the "Grouping (without ID)" "table_row"
|
||||
And I press "Yes"
|
||||
And I should not see "Grouping (without ID)"
|
||||
And I click on "Delete" "link" in the "Grouping (with ID)" "table_row"
|
||||
And I press "Yes"
|
||||
And I should not see "Grouping (with ID)"
|
||||
|
||||
@javascript
|
||||
Scenario: Delete groups and groupings with and without ID numbers without the 'moodle/course:changeidnumber' capability
|
||||
Given I log out
|
||||
And I log in as "admin"
|
||||
And I set the following system permissions of "Teacher" role:
|
||||
| moodle/course:changeidnumber | Prevent |
|
||||
And I log out
|
||||
And I log in as "teacher1"
|
||||
And I follow "Course 1"
|
||||
And I expand "Users" node
|
||||
And I follow "Groups"
|
||||
When I select "Group (with ID) (0)" from "groups"
|
||||
Then the "Delete selected group" "button" should be disabled
|
||||
And I select "Group (without ID) (0)" from "groups"
|
||||
And I press "Delete selected group"
|
||||
And I press "Yes"
|
||||
And I should not see "Group (without ID)"
|
||||
And I follow "Groupings"
|
||||
And "Delete" "link" should not exist in the "Grouping (with ID)" "table_row"
|
||||
And I click on "Delete" "link" in the "Grouping (without ID)" "table_row"
|
||||
And I press "Yes"
|
||||
And I should not see "Grouping (without ID)"
|
102
group/tests/behat/update_groups.feature
Normal file
102
group/tests/behat/update_groups.feature
Normal file
@ -0,0 +1,102 @@
|
||||
@core @core_group
|
||||
Feature: Automatic updating of groups and groupings
|
||||
In order to check the expected results occur when updating groups and groupings in different scenarios
|
||||
As a teacher
|
||||
I need to create groups and groupings under different scenarios and check that the expected result occurs when attempting to update them.
|
||||
|
||||
Background:
|
||||
Given the following "courses" exists:
|
||||
| fullname | shortname | format |
|
||||
| Course 1 | C1 | topics |
|
||||
And the following "users" exists:
|
||||
| username | firstname | lastname | email |
|
||||
| teacher1 | Teacher | 1 | teacher1@asd.com |
|
||||
And the following "course enrolments" exists:
|
||||
| user | course | role |
|
||||
| teacher1 | C1 | editingteacher |
|
||||
And I log in as "teacher1"
|
||||
And I follow "Course 1"
|
||||
And I expand "Users" node
|
||||
And I follow "Groups"
|
||||
And I press "Create group"
|
||||
And I fill the moodle form with:
|
||||
| Group name | Group (without ID) |
|
||||
And I press "Save changes"
|
||||
And I press "Create group"
|
||||
And I fill the moodle form with:
|
||||
| Group name | Group (with ID) |
|
||||
| Group ID number | An ID |
|
||||
And I press "Save changes"
|
||||
And I follow "Groupings"
|
||||
And I press "Create grouping"
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Grouping (without ID) |
|
||||
And I press "Save changes"
|
||||
And I press "Create grouping"
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Grouping (with ID) |
|
||||
| Grouping ID number | An ID |
|
||||
And I press "Save changes"
|
||||
And I follow "Groups"
|
||||
|
||||
@javascript
|
||||
Scenario: Update groups and groupings with ID numbers
|
||||
Given I select "Group (with ID)" from "groups"
|
||||
And I press "Edit group settings"
|
||||
And the "idnumber" field should match "An ID" value
|
||||
And I fill the moodle form with:
|
||||
| Group name | Group (with ID) (updated) |
|
||||
| Group ID number | An ID (updated) |
|
||||
When I press "Save changes"
|
||||
Then I should see "Group (with ID) (updated)"
|
||||
And I select "Group (with ID) (updated)" from "groups"
|
||||
And I press "Edit group settings"
|
||||
And the "idnumber" field should match "An ID (updated)" value
|
||||
And I press "Save changes"
|
||||
And I follow "Groupings"
|
||||
And I click on "Edit" "link" in the "Grouping (with ID)" "table_row"
|
||||
And the "idnumber" field should match "An ID" value
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Grouping (with ID) (updated) |
|
||||
| Grouping ID number | An ID (updated) |
|
||||
And I press "Save changes"
|
||||
And I should see "Grouping (with ID) (updated)"
|
||||
And I click on "Edit" "link" in the "Grouping (with ID) (updated)" "table_row"
|
||||
And the "idnumber" field should match "An ID (updated)" value
|
||||
|
||||
@javascript
|
||||
Scenario: Update groups and groupings with ID numbers without the 'moodle/course:changeidnumber' capability
|
||||
Given I log out
|
||||
And I log in as "admin"
|
||||
And I set the following system permissions of "Teacher" role:
|
||||
| moodle/course:changeidnumber | Prevent |
|
||||
And I log out
|
||||
And I log in as "teacher1"
|
||||
And I follow "Course 1"
|
||||
And I expand "Users" node
|
||||
And I follow "Groups"
|
||||
And I select "Group (with ID)" from "groups"
|
||||
When I press "Edit group settings"
|
||||
Then the "idnumber" "field" should be readonly
|
||||
And the "idnumber" field should match "An ID" value
|
||||
And I fill the moodle form with:
|
||||
| Group name | Group (with ID) (updated) |
|
||||
And I press "Save changes"
|
||||
And I should see "Group (with ID) (updated)"
|
||||
And I select "Group (with ID) (updated)" from "groups"
|
||||
And I press "Edit group settings"
|
||||
And the "idnumber" "field" should be readonly
|
||||
And the "idnumber" field should match "An ID" value
|
||||
And I press "Save changes"
|
||||
And I follow "Groupings"
|
||||
And I click on "Edit" "link" in the "Grouping (with ID)" "table_row"
|
||||
And the "idnumber" "field" should be readonly
|
||||
And the "idnumber" field should match "An ID" value
|
||||
And I fill the moodle form with:
|
||||
| Grouping name | Grouping (with ID) (updated) |
|
||||
And I press "Save changes"
|
||||
And I should see "Grouping (with ID) (updated)"
|
||||
And I click on "Edit" "link" in the "Grouping (with ID) (updated)" "table_row"
|
||||
And the "idnumber" "field" should be readonly
|
||||
And the "idnumber" field should match "An ID" value
|
||||
|
@ -602,6 +602,40 @@ class behat_general extends behat_base {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the provided element and selector type are readonly on the current page.
|
||||
*
|
||||
* @Then /^the "(?P<element_string>(?:[^"]|\\")*)" "(?P<selector_string>[^"]*)" should be readonly$/
|
||||
* @throws ExpectationException Thrown by behat_base::find
|
||||
* @param string $element Element we look in
|
||||
* @param string $selectortype The type of element where we are looking in.
|
||||
*/
|
||||
public function the_element_should_be_readonly($element, $selectortype) {
|
||||
// Transforming from steps definitions selector/locator format to Mink format and getting the NodeElement.
|
||||
$node = $this->get_selected_node($selectortype, $element);
|
||||
|
||||
if (!$node->hasAttribute('readonly')) {
|
||||
throw new ExpectationException('The element "' . $element . '" is not readonly', $this->getSession());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the provided element and selector type are not readonly on the current page.
|
||||
*
|
||||
* @Then /^the "(?P<element_string>(?:[^"]|\\")*)" "(?P<selector_string>[^"]*)" should not be readonly$/
|
||||
* @throws ExpectationException Thrown by behat_base::find
|
||||
* @param string $element Element we look in
|
||||
* @param string $selectortype The type of element where we are looking in.
|
||||
*/
|
||||
public function the_element_should_not_be_readonly($element, $selectortype) {
|
||||
// Transforming from steps definitions selector/locator format to Mink format and getting the NodeElement.
|
||||
$node = $this->get_selected_node($selectortype, $element);
|
||||
|
||||
if ($node->hasAttribute('readonly')) {
|
||||
throw new ExpectationException('The element "' . $element . '" is readonly', $this->getSession());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the provided element and selector type exists in the current page.
|
||||
*
|
||||
@ -651,4 +685,52 @@ class behat_general extends behat_base {
|
||||
$this->getSession()->visit($this->locate_path('/admin/cron.php'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that an element and selector type exists in another element and selector type on the current page.
|
||||
*
|
||||
* This step is for advanced users, use it if you don't find anything else suitable for what you need.
|
||||
*
|
||||
* @Then /^"(?P<element_string>(?:[^"]|\\")*)" "(?P<selector_string>[^"]*)" should exist in the "(?P<element2_string>(?:[^"]|\\")*)" "(?P<selector2_string>[^"]*)"$/
|
||||
* @throws ElementNotFoundException Thrown by behat_base::find
|
||||
* @param string $element The locator of the specified selector
|
||||
* @param string $selectortype The selector type
|
||||
* @param string $containerelement The container selector type
|
||||
* @param string $containerselectortype The container locator
|
||||
*/
|
||||
public function should_exist_in_the($element, $selectortype, $containerelement, $containerselectortype) {
|
||||
// Get the container node.
|
||||
$containernode = $this->get_selected_node($containerselectortype, $containerelement);
|
||||
|
||||
list($selector, $locator) = $this->transform_selector($selectortype, $element);
|
||||
|
||||
// Specific exception giving info about where can't we find the element.
|
||||
$locatorexceptionmsg = $element . '" in the "' . $containerelement. '" "' . $containerselectortype. '"';
|
||||
$exception = new ElementNotFoundException($this->getSession(), $selectortype, null, $locatorexceptionmsg);
|
||||
|
||||
// Looks for the requested node inside the container node.
|
||||
$this->find($selector, $locator, $exception, $containernode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that an element and selector type does not exist in another element and selector type on the current page.
|
||||
*
|
||||
* This step is for advanced users, use it if you don't find anything else suitable for what you need.
|
||||
*
|
||||
* @Then /^"(?P<element_string>(?:[^"]|\\")*)" "(?P<selector_string>[^"]*)" should not exist in the "(?P<element2_string>(?:[^"]|\\")*)" "(?P<selector2_string>[^"]*)"$/
|
||||
* @throws ExpectationException
|
||||
* @param string $element The locator of the specified selector
|
||||
* @param string $selectortype The selector type
|
||||
* @param string $containerelement The container selector type
|
||||
* @param string $containerselectortype The container locator
|
||||
*/
|
||||
public function should_not_exist_in_the($element, $selectortype, $containerelement, $containerselectortype) {
|
||||
try {
|
||||
$this->should_exist_in_the($element, $selectortype, $containerelement, $containerselectortype);
|
||||
throw new ExpectationException('The "' . $element . '" "' . $selectortype . '" exists in the "' .
|
||||
$containerelement . '" "' . $containerselectortype . '"', $this->getSession());
|
||||
} catch (ElementNotFoundException $e) {
|
||||
// It passes.
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user