Skip to content

Commit

Permalink
Merge branch 'MDL-42276_master' of https://github.com/markn86/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
marinaglancy committed Nov 12, 2013
2 parents 93e55a8 + a2d3e3b commit b6168f1
Show file tree
Hide file tree
Showing 4 changed files with 298 additions and 0 deletions.
33 changes: 33 additions & 0 deletions group/tests/behat/create_groups.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 81 additions & 0 deletions group/tests/behat/delete_groups.feature
Original file line number Diff line number Diff line change
@@ -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 changes: 102 additions & 0 deletions group/tests/behat/update_groups.feature
Original file line number Diff line number Diff line change
@@ -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

82 changes: 82 additions & 0 deletions lib/tests/behat/behat_general.php
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,40 @@ public function the_element_should_be_enabled($element, $selectortype) {
}
}

/**
* 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.
*
Expand Down Expand Up @@ -651,4 +685,52 @@ public function i_trigger_cron() {
$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;
}
}
}

0 comments on commit b6168f1

Please sign in to comment.