From 2f83d71ccce65982fbdfb8d2d6ff9784d73ce276 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Wed, 12 Mar 2014 16:42:01 +0000 Subject: [PATCH] MDL-44534 also fix the mod_quiz behat tests. They had duplicated code. I refactored. --- mod/quiz/tests/behat/behat_mod_quiz.php | 18 ++---- question/tests/behat/behat_question.php | 21 ++----- question/tests/behat/behat_question_base.php | 65 ++++++++++++++++++++ 3 files changed, 77 insertions(+), 27 deletions(-) create mode 100644 question/tests/behat/behat_question_base.php diff --git a/mod/quiz/tests/behat/behat_mod_quiz.php b/mod/quiz/tests/behat/behat_mod_quiz.php index 2f04e5dc293..954d47555c0 100644 --- a/mod/quiz/tests/behat/behat_mod_quiz.php +++ b/mod/quiz/tests/behat/behat_mod_quiz.php @@ -26,6 +26,7 @@ // 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'); +require_once(__DIR__ . '/../../../../question/tests/behat/behat_question_base.php'); use Behat\Behat\Context\Step\Given as Given, Behat\Gherkin\Node\TableNode as TableNode; @@ -38,7 +39,7 @@ use Behat\Behat\Context\Step\Given as Given, * @copyright 2014 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class behat_mod_quiz extends behat_base { +class behat_mod_quiz extends behat_question_base { /** * Adds a question to the existing quiz with filling the form. * @@ -47,23 +48,16 @@ class behat_mod_quiz extends behat_base { * @When /^I add a "(?P(?:[^"]|\\")*)" question to the "(?P(?:[^"]|\\")*)" quiz with:$/ * @param string $questiontype * @param string $quizname - * @param TableNode $table with data for filling the add question form + * @param TableNode $questiondata with data for filling the add question form */ - public function i_add_question_to_the_quiz_with($questiontype, $quizname, TableNode $table) { - $questiontype = $this->escape($questiontype); + public function i_add_question_to_the_quiz_with($questiontype, $quizname, TableNode $questiondata) { $quizname = $this->escape($quizname); $editquiz = $this->escape(get_string('editquiz', 'quiz')); $addaquestion = $this->escape(get_string('addaquestion', 'quiz')); - $next = $this->escape(get_string('next')); - $savechanges = $this->escape(get_string('savechanges')); - return array( + return array_merge(array( new Given("I follow \"$quizname\""), new Given("I follow \"$editquiz\""), new Given("I press \"$addaquestion\""), - new Given("I set the field \"$questiontype\" to \"1\""), - new Given("I press \"$next\""), - new Given("I set the following fields to these values:", $table), - new Given("I press \"$savechanges\"") - ); + ), $this->finish_adding_question($questiontype, $questiondata)); } } diff --git a/question/tests/behat/behat_question.php b/question/tests/behat/behat_question.php index 5b2a7f55916..00e0e388448 100644 --- a/question/tests/behat/behat_question.php +++ b/question/tests/behat/behat_question.php @@ -25,7 +25,7 @@ // 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'); +require_once(__DIR__ . '/behat_question_base.php'); use Behat\Behat\Context\Step\Given as Given, Behat\Gherkin\Node\TableNode as TableNode, @@ -40,30 +40,22 @@ use Behat\Behat\Context\Step\Given as Given, * @copyright 2013 David Monllaó * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class behat_question extends behat_base { +class behat_question extends behat_question_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 + * @param TableNode $questiondata The data to fill the question type form. + * @return Given[] the steps. */ public function i_add_a_question_filling_the_form_with($questiontypename, TableNode $questiondata) { - // Using xpath literal to avoid quotes problems. - $questiontypename = $this->getSession()->getSelectorsHandler()->xpathLiteral($questiontypename); - $questiontypexpath = "//span[@class='qtypename'][normalize-space(.)=$questiontypename]" . - "/ancestor::div[@class='qtypeoption']/descendant::input"; - - return array( + return array_merge(array( new Given('I follow "' . get_string('questionbank', 'question') . '"'), new Given('I press "' . get_string('createnewquestion', 'question') . '"'), - new Given('I click on "' . $this->escape($questiontypexpath) . '" "xpath_element"'), - new Given('I click on "#chooseqtype_submit" "css_element"'), - new Given('I set the following fields to these values:', $questiondata), - new Given('I press "id_submitbutton"') - ); + ), $this->finish_adding_question($questiontypename, $questiondata)); } /** @@ -91,5 +83,4 @@ class behat_question extends behat_base { "/descendant::div[@class='state'][contains(., $stateliteral)]"; $this->find('xpath', $xpath, $exception); } - } diff --git a/question/tests/behat/behat_question_base.php b/question/tests/behat/behat_question_base.php new file mode 100644 index 00000000000..0550813d483 --- /dev/null +++ b/question/tests/behat/behat_question_base.php @@ -0,0 +1,65 @@ +. + +/** + * Behat question-related helper code. + * + * @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, + Behat\Mink\Exception\ExpectationException as ExpectationException, + Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; + +/** + * 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_base extends behat_base { + + /** + * Helper used by {@link i_add_a_question_filling_the_form_with()} and + * {@link behat_mod_quiz::i_add_question_to_the_quiz_with to finish creating()}. + * + * @param string $questiontypename The question type name + * @param TableNode $questiondata The data to fill the question type form + * @return Given[] the steps. + */ + protected function finish_adding_question($questiontypename, TableNode $questiondata) { + $questiontypename = $this->getSession()->getSelectorsHandler()->xpathLiteral($questiontypename); + $questiontypexpath = "//span[@class='qtypename'][normalize-space(.)=$questiontypename]" . + "/ancestor::div[@class='qtypeoption']/descendant::input"; + + return array( + new Given('I click on "' . $this->escape($questiontypexpath) . '" "xpath_element"'), + new Given('I click on "#chooseqtype_submit" "css_element"'), + new Given('I set the following fields to these values:', $questiondata), + new Given('I press "id_submitbutton"') + ); + } +}