diff --git a/lib/tests/behat/behat_general.php b/lib/tests/behat/behat_general.php index 76fbdc3a56a..02e890cda67 100644 --- a/lib/tests/behat/behat_general.php +++ b/lib/tests/behat/behat_general.php @@ -63,6 +63,25 @@ class behat_general extends behat_base { $this->getSession()->reload(); } + /** + * Switches to the specified window. Useful when interacting with popup windows. + * + * @Given /^I switch to "(?P(?:[^"]|\\")*)" window$/ + * @param string $windowname + */ + public function switch_to_window($windowname) { + $this->getSession()->switchToWindow($windowname); + } + + /** + * Switches to the main Moodle window. Useful when you finish interacting with popup windows. + * + * @Given /^I switch to the main window$/ + */ + public function switch_to_the_main_window() { + $this->getSession()->switchToWindow(); + } + /** * Clicks link with specified id|title|alt|text. * diff --git a/lib/tests/behat/behat_hooks.php b/lib/tests/behat/behat_hooks.php index 60b6768778e..8d99b54d8ea 100644 --- a/lib/tests/behat/behat_hooks.php +++ b/lib/tests/behat/behat_hooks.php @@ -29,9 +29,10 @@ require_once(__DIR__ . '/../../behat/behat_base.php'); -use Behat\Behat\Event\SuiteEvent as SuiteEvent; -use Behat\Behat\Event\ScenarioEvent as ScenarioEvent; -use Behat\Behat\Event\StepEvent as StepEvent; +use Behat\Behat\Event\SuiteEvent as SuiteEvent, + Behat\Behat\Event\ScenarioEvent as ScenarioEvent, + Behat\Behat\Event\StepEvent as StepEvent, + WebDriver\Exception\NoSuchWindow as NoSuchWindow; /** * Hooks to the behat process. @@ -170,7 +171,11 @@ class behat_hooks extends behat_base { } // Wait until the page is ready. - $this->getSession()->wait(self::TIMEOUT, '(document.readyState === "complete")'); + try { + $this->getSession()->wait(self::TIMEOUT, '(document.readyState === "complete")'); + } catch (NoSuchWindow $e) { + // If we were interacting with a popup window it will not exists after closing it. + } } } diff --git a/question/tests/behat/behat_question.php b/question/tests/behat/behat_question.php new file mode 100644 index 00000000000..cb1e423f7a4 --- /dev/null +++ b/question/tests/behat/behat_question.php @@ -0,0 +1,65 @@ +. + +/** + * Behat question-related steps definitions. + * + * @package core_question + * @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 related with the question bank management. + * + * @package core_question + * @category test + * @copyright 2013 David Monllaó + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class behat_question extends behat_base { + + /** + * Creates a question in the current course questions bank with the provided data. This step can only be used when creating question types composed by a single form. + * + * @Given /^I add a "(?P(?:[^"]|\\")*)" question filling the form with:$/ + * @param string $questiontypename The question type name + * @param TableNode $questiondata The data to fill the question type form + */ + public function i_add_a_question_filling_the_form_with($questiontypename, TableNode $questiondata) { + + $questiontypexpath = "//span[@class='qtypename'][.='" . $questiontypename . "'] +/ancestor::div[@class='qtypeoption']/descendant::input"; + + return array( + new Given('I follow "' . get_string('questionbank', 'question') . '"'), + new Given('I press "' . get_string('createnewquestion', 'question') . '"'), + new Given('I click on "' . $questiontypexpath . '" "xpath_element"'), + new Given('I click on "Next" "button" in the "#qtypechoicecontainer" "css_element"'), + new Given('I fill the moodle form with:', $questiondata), + new Given('I press "Save changes"') + ); + } + +} diff --git a/question/tests/behat/edit_questions.feature b/question/tests/behat/edit_questions.feature new file mode 100644 index 00000000000..124b86e55f0 --- /dev/null +++ b/question/tests/behat/edit_questions.feature @@ -0,0 +1,44 @@ +@core_question +Feature: A teacher can edit questions in the question bank + In order to refine questions contents + As a teacher + I need to edit questions + + @javascript + Scenario: Edit a previously created question + Given the following "users" exists: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@asd.com | + And the following "courses" exists: + | fullname | shortname | format | + | Course 1 | C1 | weeks | + And the following "course enrolments" exists: + | user | course | role | + | teacher1 | C1 | editingteacher | + And I log in as "admin" + And I follow "Course 1" + And I add a "Essay" question filling the form with: + | Question name | Test question name | + | Question text | Write about whatever you want | + And I log out + And I log in as "teacher1" + And I follow "Course 1" + And I follow "Question bank" + When I click on "Edit" "link" in the "Test question name" table row + And I fill the moodle form with: + | Question name | Edited question name | + | Question text | Write a lot about what you want | + And I press "Save changes" + Then I should see "Edited question name" + And I should not see "Test question name" + And I should see "Admin User" in the ".categoryquestionscontainer tbody .creatorname" "css_element" + And I should see "Teacher 1" in the ".categoryquestionscontainer tbody .modifiername" "css_element" + And I click on "Edit" "link" in the "Edited question name" table row + And the "Question name" field should match "Edited question name" value + And I press "Cancel" + And I click on "Preview" "link" in the "Edited question name" table row + And I switch to "questionpreview" window + And I should see "Edited question name" + And I should see "Write a lot about what you want" + And I press "Close preview" + And I switch to the main window