diff --git a/backup/util/ui/tests/behat/behat_backup.php b/backup/util/ui/tests/behat/behat_backup.php index d4ffb0310c1..a5ead378370 100644 --- a/backup/util/ui/tests/behat/behat_backup.php +++ b/backup/util/ui/tests/behat/behat_backup.php @@ -43,19 +43,6 @@ use Behat\Gherkin\Node\TableNode as TableNode, */ class behat_backup extends behat_base { - /** - * Follow a link like 'Backup' or 'Import', where the link name comes from - * a language string, in the settings nav block of a course. - * @param string $langstring the lang string to look for. E.g. 'backup' or 'import'. - * @param string $component (optional) second argument to {@link get_string}. - */ - protected function navigate_to_course_settings_link($langstring, $component = '') { - $behatnavigation = new behat_navigation(); - $behatnavigation->setMink($this->getMink()); - $behatnavigation->i_navigate_to_node_in(get_string($langstring, $component), - get_string('courseadministration')); - } - /** * Backups the specified course using the provided options. If you are interested in restoring this backup would be * useful to provide a 'Filename' option. @@ -70,33 +57,31 @@ class behat_backup extends behat_base { // Go to homepage. $this->getSession()->visit($this->locate_path('/?redirect=0')); + $this->execute("behat_general::wait_until_the_page_is_ready"); // Click the course link. - $this->find_link($backupcourse)->click(); + $this->execute("behat_general::click_link", $backupcourse); // Click the backup link. - $this->navigate_to_course_settings_link('backup'); - $this->wait(); + $this->execute("behat_navigation::i_navigate_to_in_current_page_administration", get_string('backup')); // Initial settings. $this->fill_backup_restore_form($this->get_step_options($options, "Initial")); - $this->find_button(get_string('backupstage1action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('backupstage1action', 'backup')); // Schema settings. $this->fill_backup_restore_form($this->get_step_options($options, "Schema")); - $this->find_button(get_string('backupstage2action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('backupstage2action', 'backup')); // Confirmation and review, backup filename can also be specified. $this->fill_backup_restore_form($this->get_step_options($options, "Confirmation")); - $this->find_button(get_string('backupstage4action', 'backup'))->press(); + $this->execute("behat_forms::press_button", get_string('backupstage4action', 'backup')); // Waiting for it to finish. - $this->wait(self::EXTENDED_TIMEOUT); + $this->execute("behat_general::wait_until_the_page_is_ready"); // Last backup continue button. - $this->find_button(get_string('backupstage16action', 'backup'))->press(); + $this->execute("behat_general::i_click_on", array(get_string('backupstage16action', 'backup'), 'button')); } /** @@ -116,21 +101,19 @@ class behat_backup extends behat_base { $this->getSession()->visit($this->locate_path('/?redirect=0')); // Click the course link. - $this->find_link($backupcourse)->click(); + $this->execute("behat_general::click_link", $backupcourse); // Click the backup link. - $this->find_link(get_string('backup'))->click(); - $this->wait(); + $this->execute("behat_navigation::i_navigate_to_in_current_page_administration", get_string('backup')); // Initial settings. - $this->find_button(get_string('jumptofinalstep', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('jumptofinalstep', 'backup')); // Waiting for it to finish. - $this->wait(self::EXTENDED_TIMEOUT); + $this->execute("behat_general::wait_until_the_page_is_ready"); // Last backup continue button. - $this->find_button(get_string('backupstage16action', 'backup'))->press(); + $this->execute("behat_general::i_click_on", array(get_string('backupstage16action', 'backup'), 'button')); } /** @@ -152,15 +135,13 @@ class behat_backup extends behat_base { // Go to homepage. $this->getSession()->visit($this->locate_path('/?redirect=0')); - $this->wait(); + $this->execute("behat_general::wait_until_the_page_is_ready"); // Click the course link. - $this->find_link($tocourse)->click(); - $this->wait(); + $this->execute("behat_general::click_link", $tocourse); // Click the import link. - $this->navigate_to_course_settings_link('import'); - $this->wait(); + $this->execute("behat_navigation::i_navigate_to_in_current_page_administration", get_string('import')); // Select the course. $exception = new ExpectationException('"' . $fromcourse . '" course not found in the list of courses to import from', @@ -175,25 +156,24 @@ class behat_backup extends behat_base { $radiofield = new behat_form_field($this->getSession(), $radionode); $radiofield->set_value(1); - $this->find_button(get_string('continue'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('continue')); // Initial settings. $this->fill_backup_restore_form($this->get_step_options($options, "Initial")); - $this->find_button(get_string('importbackupstage1action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('importbackupstage1action', 'backup')); // Schema settings. $this->fill_backup_restore_form($this->get_step_options($options, "Schema")); - $this->find_button(get_string('importbackupstage2action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('importbackupstage2action', 'backup')); // Run it. - $this->find_button(get_string('importbackupstage4action', 'backup'))->press(); - $this->wait(self::EXTENDED_TIMEOUT); + $this->execute("behat_forms::press_button", get_string('importbackupstage4action', 'backup')); + + // Wait to ensure restore is complete. + $this->execute("behat_general::wait_until_the_page_is_ready"); // Continue and redirect to 'to' course. - $this->find_button(get_string('continue'))->press(); + $this->execute("behat_general::i_click_on", array(get_string('continue'), 'button')); } /** @@ -215,17 +195,16 @@ class behat_backup extends behat_base { $existingcourse = behat_context_helper::escape($existingcourse); // Selecting the specified course (we can not call behat_forms::select_radio here as is in another behat subcontext). - $radionode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-existing-course ')]" . + $radionodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-existing-course ')]" . "/descendant::div[contains(concat(' ', normalize-space(@class), ' '), ' restore-course-search ')]" . "/descendant::tr[contains(., $existingcourse)]" . - "/descendant::input[@type='radio']"); - $radionode->click(); + "/descendant::input[@type='radio']"; + $this->execute("behat_general::i_click_on", array($radionodexpath, 'xpath_element')); // Pressing the continue button of the restore into an existing course section. - $continuenode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-existing-course ')]" . - "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"); - $continuenode->click(); - $this->wait(); + $continuenodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-existing-course ')]" . + "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"; + $this->execute("behat_general::i_click_on", array($continuenodexpath, 'xpath_element')); // Common restore process using provided key/value options. $this->process_restore($options); @@ -246,16 +225,15 @@ class behat_backup extends behat_base { $this->select_backup($backupfilename); // The first category in the list. - $radionode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-new-course ')]" . + $radionodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-new-course ')]" . "/descendant::div[contains(concat(' ', normalize-space(@class), ' '), ' restore-course-search ')]" . - "/descendant::input[@type='radio']"); - $radionode->click(); + "/descendant::input[@type='radio']"; + $this->execute("behat_general::i_click_on", array($radionodexpath, 'xpath_element')); // Pressing the continue button of the restore into an existing course section. - $continuenode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-new-course ')]" . - "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"); - $continuenode->click(); - $this->wait(); + $continuenodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' bcs-new-course ')]" . + "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"; + $this->execute("behat_general::i_click_on", array($continuenodexpath, 'xpath_element')); // Common restore process using provided key/value options. $this->process_restore($options); @@ -276,15 +254,14 @@ class behat_backup extends behat_base { $this->select_backup($backupfilename); // Merge without deleting radio option. - $radionode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . - "/descendant::input[@type='radio'][@name='target'][@value='1']"); - $radionode->click(); + $radionodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . + "/descendant::input[@type='radio'][@name='target'][@value='1']"; + $this->execute("behat_general::i_click_on", array($radionodexpath, 'xpath_element')); // Pressing the continue button of the restore merging section. - $continuenode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . - "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"); - $continuenode->click(); - $this->wait(); + $continuenodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . + "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"; + $this->execute("behat_general::i_click_on", array($continuenodexpath, 'xpath_element')); // Common restore process using provided key/value options. $this->process_restore($options); @@ -305,15 +282,14 @@ class behat_backup extends behat_base { $this->select_backup($backupfilename); // Delete contents radio option. - $radionode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . - "/descendant::input[@type='radio'][@name='target'][@value='0']"); - $radionode->click(); + $radionodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . + "/descendant::input[@type='radio'][@name='target'][@value='0']"; + $this->execute("behat_general::i_click_on", array($radionodexpath, 'xpath_element')); // Pressing the continue button of the restore merging section. - $continuenode = $this->find('xpath', "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . - "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"); - $continuenode->click(); - $this->wait(); + $continuenodexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), 'bcs-current-course')]" . + "/descendant::input[@type='submit'][@value='" . get_string('continue') . "']"; + $this->execute("behat_general::i_click_on", array($continuenodexpath, 'xpath_element')); // Common restore process using provided key/value options. $this->process_restore($options); @@ -340,7 +316,7 @@ class behat_backup extends behat_base { $restorelink->click(); // Confirm the backup contents. - $restore = $this->find_button(get_string('continue'))->press(); + $this->find_button(get_string('continue'))->press(); } /** @@ -356,23 +332,20 @@ class behat_backup extends behat_base { // Settings. $this->fill_backup_restore_form($this->get_step_options($options, "Settings")); - $this->find_button(get_string('restorestage4action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('restorestage4action', 'backup')); // Schema. $this->fill_backup_restore_form($this->get_step_options($options, "Schema")); - $this->find_button(get_string('restorestage8action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('restorestage8action', 'backup')); // Review, no options here. - $this->find_button(get_string('restorestage16action', 'backup'))->press(); - $this->wait(); + $this->execute("behat_forms::press_button", get_string('restorestage16action', 'backup')); + + // Wait till the final button is visible. + $this->execute("behat_general::wait_until_the_page_is_ready"); // Last restore continue button, redirected to restore course after this. - $this->find_button(get_string('restorestage32action', 'backup'))->press(); - - // Long wait when waiting for the restore to finish. - $this->wait(self::EXTENDED_TIMEOUT); + $this->execute("behat_general::i_click_on", array(get_string('restorestage32action', 'backup'), 'button')); } /** @@ -431,25 +404,4 @@ class behat_backup extends behat_base { return $pageoptions; } - - - /** - * Waits until the DOM and the page Javascript code is ready. - * - * @param int $timeout The number of seconds that we wait. - * @return void - */ - protected function wait($timeout = false) { - - if (!$this->running_javascript()) { - return; - } - - if (!$timeout) { - $timeout = self::TIMEOUT; - } - - $this->getSession()->wait($timeout * 1000, self::PAGE_READY_JS); - } - } diff --git a/theme/boost/tests/behat/behat_theme_boost_behat_backup.php b/theme/boost/tests/behat/behat_theme_boost_behat_backup.php deleted file mode 100644 index d47eda0eba4..00000000000 --- a/theme/boost/tests/behat/behat_theme_boost_behat_backup.php +++ /dev/null @@ -1,48 +0,0 @@ -. - -/** - * Backup and restore actions to help behat feature files writting overrides. - * - * @copyright 2016 Damyon Wiese - * @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__ . '/../../../../backup/util/ui/tests/behat/behat_backup.php'); -require_once(__DIR__ . '/behat_theme_boost_behat_navigation.php'); - -use Behat\Gherkin\Node\TableNode as TableNode, - Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException, - Behat\Mink\Exception\ExpectationException as ExpectationException; - -/** - * Backup-related steps definitions overrides. - * - * @copyright 2016 Damyon Wiese - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class behat_theme_boost_behat_backup extends behat_backup { - - protected function navigate_to_course_settings_link($langstring, $component = '') { - $behatnavigation = new behat_theme_boost_behat_navigation(); - $behatnavigation->setMink($this->getMink()); - $behatnavigation->i_navigate_to_node_in(get_string($langstring, $component), - get_string('courseadministration')); - } - -} diff --git a/theme/boost/tests/behat/blacklist.json b/theme/boost/tests/behat/blacklist.json index 4a8a2cb0c2f..1d0c8d840e2 100644 --- a/theme/boost/tests/behat/blacklist.json +++ b/theme/boost/tests/behat/blacklist.json @@ -3,7 +3,6 @@ "lib/tests/behat/action_menu.feature", "course/tests/behat/activities_edit_with_block_dock.feature", "blocks/tests/behat/hide_blocks.feature", - "blocks/tests/behat/move_blocks.feature", - "backup/util/ui/tests/behat/restore_moodle2_courses.feature" + "blocks/tests/behat/move_blocks.feature" ] }