From e800f0d6ae912b935ca4a466ee0ab4105298e6d7 Mon Sep 17 00:00:00 2001 From: David Monllao Date: Fri, 22 Mar 2013 14:27:59 +0800 Subject: [PATCH 1/4] MDL-38619 behat: New test According to MDLQA-1177, an administrator can create a cohort and add users to it. --- cohort/tests/behat/add_cohort.feature | 62 +++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 cohort/tests/behat/add_cohort.feature diff --git a/cohort/tests/behat/add_cohort.feature b/cohort/tests/behat/add_cohort.feature new file mode 100644 index 00000000000..69c2ee67ee4 --- /dev/null +++ b/cohort/tests/behat/add_cohort.feature @@ -0,0 +1,62 @@ +@admin @cohorts +Feature: Add cohorts of users + In order to create site-wide groups + As a moodle admin + I need to create cohorts and add users on them + + Background: + Given the following "users" exists: + | username | firstname | lastname | email | + | user1 | First | User | first@user.com | + | user2 | Second | User | second@user.com | + | user3 | Third | User | third@user.com | + | user4 | Forth | User | forth@user.com | + And I log in as "admin" + And I expand "Front page settings" node + And I expand "Site administration" node + And I expand "Users" node + And I expand "Accounts" node + And I follow "Cohorts" + And I press "Add" + And I fill the moodle form with: + | Name | Test cohort name | + | Context | System | + | Cohort ID | 333 | + | Description | Test cohort description | + And I press "Save changes" + + @javascript + Scenario: Add a cohort + When I follow "Cohorts" + Then I should see "Test cohort name" + And I should see "333" + And I should see "Test cohort description" + And I should see "Created manually" + + @javascript + Scenario: Add users to a cohort selecting them from the system users list + When I add "user1" user to "333" cohort + And I add "user2" user to "333" cohort + Then I should see "2" in the "#cohorts" "css_element" + And I follow "Assign" + And the "Current users" select box should contain "First User (first@user.com)" + And the "Current users" select box should contain "Second User (second@user.com)" + And the "Current users" select box should not contain "Forth User (forth@user.com)" + + @javascript + Scenario: Add users to a cohort uploading a users file + When I follow "Bulk user actions" + And I select "Third User" from "Available" + And I press "Add to selection" + And I select "Forth User" from "Available" + And I press "Add to selection" + And I select "Add to cohort" from "id_action" + And I press "Go" + And I select "Test cohort name [333]" from "Cohort" + And I press "Add to cohort" + And I follow "Cohorts" + Then I should see "2" in the "#cohorts" "css_element" + And I follow "Assign" + And the "Current users" select box should contain "Third User (third@user.com)" + And the "Current users" select box should contain "Forth User (forth@user.com)" + And the "Current users" select box should not contain "First User (first@user.com)" From 23349a73aeb59dd9d8e74019949426fa711fa80d Mon Sep 17 00:00:00 2001 From: David Monllao Date: Fri, 22 Mar 2013 16:13:08 +0800 Subject: [PATCH 2/4] MDL-38619 testing: Adapter to cohorts data generator --- lib/tests/behat/behat_data_generators.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/tests/behat/behat_data_generators.php b/lib/tests/behat/behat_data_generators.php index c3f0932c486..605624abca4 100644 --- a/lib/tests/behat/behat_data_generators.php +++ b/lib/tests/behat/behat_data_generators.php @@ -102,6 +102,10 @@ class behat_data_generators extends behat_base { 'datagenerator' => 'grouping_group', 'required' => array('grouping', 'group'), 'switchids' => array('grouping' => 'groupingid', 'group' => 'groupid') + ), + 'cohorts' => array( + 'datagenerator' => 'cohort', + 'required' => array('idnumber') ) ); From f0e4cf5e31269515a007fcfd50c5dfcc85c9ff91 Mon Sep 17 00:00:00 2001 From: David Monllao Date: Fri, 22 Mar 2013 16:14:23 +0800 Subject: [PATCH 3/4] MDL-38619 behat: Step definition to add enrolment methods to courses --- cohort/tests/behat/behat_cohort.php | 80 +++++++++++++++++++++++++++++ enrol/tests/behat/behat_enrol.php | 61 ++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 cohort/tests/behat/behat_cohort.php create mode 100644 enrol/tests/behat/behat_enrol.php diff --git a/cohort/tests/behat/behat_cohort.php b/cohort/tests/behat/behat_cohort.php new file mode 100644 index 00000000000..884bb02a5e8 --- /dev/null +++ b/cohort/tests/behat/behat_cohort.php @@ -0,0 +1,80 @@ +. + +/** + * Cohorts steps definitions. + * + * @package core + * @category test + * @copyright 2013 David Monllaó + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. + +require_once(__DIR__ . '/../../../lib/behat/behat_base.php'); + +use Behat\Behat\Context\Step\Given as Given; + +/** + * Steps definitions for cohort actions. + * + * @package core + * @category test + * @copyright 2013 David Monllaó + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_cohort extends behat_base { + + /** + * Adds the user to the specified cohort. + * + * @Given /^I add "(?P(?:[^"]|\\")*)" user to "(?P(?:[^"]|\\")*)" cohort$/ + * @param string $username + * @param string $cohortidnumber + */ + public function i_add_user_to_cohort($username, $cohortidnumber) { + global $DB; + + // The user was created by the data generator, executed by the same PHP process that is + // running this step, not by any Selenium action. + $userid = $DB->get_field('user', 'id', array('username' => $username)); + + $steps = array( + new Given('I click on "Assign" "link" in the "//table[@id=\'cohorts\']//tr[contains(., \'' . $cohortidnumber . '\')]" "xpath_element"'), + new Given('I select "' . $userid . '" from "Potential users"'), + new Given('I press "Add"'), + new Given('I press "Back to cohorts"') + ); + + // If we are not in the cohorts management we should move there before anything else. + if (!$this->getSession()->getPage()->find('css', 'input#cohort_search_q')) { + $steps = array_merge( + array( + new Given('I am on homepage'), + new Given('I expand "Front page settings" node'), + new Given('I expand "Site administration" node'), + new Given('I expand "Users" node'), + new Given('I expand "Accounts" node'), + new Given('I follow "Cohorts"') + ), + $steps + ); + } + + return $steps; + } +} diff --git a/enrol/tests/behat/behat_enrol.php b/enrol/tests/behat/behat_enrol.php new file mode 100644 index 00000000000..0b18d78b202 --- /dev/null +++ b/enrol/tests/behat/behat_enrol.php @@ -0,0 +1,61 @@ +. + +/** + * Enrolment steps definitions. + * + * @package core_enrol + * @category test + * @copyright 2013 David Monllaó + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +// NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. + +require_once(__DIR__ . '/../../../lib/behat/behat_base.php'); + +use Behat\Behat\Context\Step\Given as Given, + Behat\Gherkin\Node\TableNode as TableNode; + +/** + * Steps definitions for general enrolment actions. + * + * @package core_enrol + * @category test + * @copyright 2013 David Monllaó + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_enrol extends behat_base { + + /** + * Adds the specified enrolment method to the current course filling the form with the provided data. + * + * @Given /^I add "(?P(?:[^"]|\\")*)" enrolment method with:$/ + * @param string $enrolmethod + * @param TableNode $table + */ + public function i_add_enrolment_method_with($enrolmethod, TableNode $table) { + + return array( + new Given('I expand "Users" node'), + new Given('I follow "Enrolment methods"'), + new Given('I select "' . $enrolmethod . '" from "Add method"'), + new Given('I fill the moodle form with:', $table), + new Given('I press "Add method"') + ); + } + +} From ba097b82535538142c94a93fa38e4e92ef4be17f Mon Sep 17 00:00:00 2001 From: David Monllao Date: Fri, 22 Mar 2013 16:14:58 +0800 Subject: [PATCH 4/4] MDL-38619 behat: New test According to MDLQA-1445, an administrator can upload users to a cohort. --- .../tests/behat/upload_cohort_users.feature | 55 +++++++++++++++++++ lib/tests/fixtures/upload_users_cohorts.csv | 5 ++ 2 files changed, 60 insertions(+) create mode 100644 cohort/tests/behat/upload_cohort_users.feature create mode 100644 lib/tests/fixtures/upload_users_cohorts.csv diff --git a/cohort/tests/behat/upload_cohort_users.feature b/cohort/tests/behat/upload_cohort_users.feature new file mode 100644 index 00000000000..f8024e2c4e9 --- /dev/null +++ b/cohort/tests/behat/upload_cohort_users.feature @@ -0,0 +1,55 @@ +@admin @cohorts +Feature: Upload users to a cohort + In order to quickly fill site-wide groups with users + As a moodle admin + I need to upload a file with users data containing cohort assigns + + @javascript + Scenario: Upload users and assign them to a course with cohort enrolment method enabled + Given the following "cohorts" exists: + | name | idnumber | + | Cohort 1 | ASD | + | Cohort 2 | DSA | + And the following "courses" exists: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + | Course 2 | C2 | 0 | + And I log in as "admin" + And I follow "Course 1" + And I add "Cohort sync" enrolment method with: + | Cohort | Cohort 1 | + And I am on homepage + And I follow "Course 2" + And I add "Cohort sync" enrolment method with: + | Cohort | Cohort 2 | + And I expand "Course administration" node + And I expand "Site administration" node + And I expand "Users" node + And I expand "Accounts" node + When I follow "Upload users" + And I upload "lib/tests/fixtures/upload_users_cohorts.csv" file to "File" filepicker + And I press "Upload users" + And I press "Upload users" + And I press "Continue" + And I follow "Cohorts" + And I click on "Assign" "link" in the "//table[@id='cohorts']//tr[contains(., 'Cohort 1')]" "xpath_element" + Then the "Current users" select box should contain "Tom Jones (tomjones@example.com)" + And the "Current users" select box should contain "Bob Jones (bobjones@example.com)" + And I press "Back to cohorts" + And I click on "Assign" "link" in the "//table[@id='cohorts']//tr[contains(., 'Cohort 2')]" "xpath_element" + And the "Current users" select box should contain "Mary Smith (marysmith@example.com)" + And the "Current users" select box should contain "Alice Smith (alicesmith@example.com)" + And I am on homepage + And I follow "Course 1" + And I expand "Users" node + And I follow "Enrolled users" + And I should see "Tom Jones" + And I should see "Bob Jones" + And I should not see "Mary Smith" + And I am on homepage + And I follow "Course 2" + And I expand "Users" node + And I follow "Enrolled users" + And I should see "Mary Smith" + And I should see "Alice Smith" + And I should not see "Tom Jones" diff --git a/lib/tests/fixtures/upload_users_cohorts.csv b/lib/tests/fixtures/upload_users_cohorts.csv new file mode 100644 index 00000000000..bb9c2d79179 --- /dev/null +++ b/lib/tests/fixtures/upload_users_cohorts.csv @@ -0,0 +1,5 @@ +username,password,firstname,lastname,email,cohort1 +tomjones,Pass1234*,Tom,Jones,tomjones@example.com,ASD +marysmith,Pass1234*,Mary,Smith,marysmith@example.com,DSA +bobjones,Pass1234*,Bob,Jones,bobjones@example.com,ASD +alicesmith,Pass1234*,Alice,Smith,alicesmith@example.com,DSA