From b100c4e3a111f4abb1d8e4e2f1bf547071bea52d Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Thu, 7 Nov 2013 08:02:49 +0800 Subject: [PATCH] MDL-40975 Behat: Fix test failure with block menus --- blocks/tests/behat/behat_blocks.php | 39 +++++++++++++++++++ .../configure_block_throughout_site.feature | 4 +- blocks/tests/behat/manage_blocks.feature | 4 ++ .../behat/return_block_original_state.feature | 6 +-- 4 files changed, 48 insertions(+), 5 deletions(-) diff --git a/blocks/tests/behat/behat_blocks.php b/blocks/tests/behat/behat_blocks.php index 42fe9a117c7..36d8be2468d 100644 --- a/blocks/tests/behat/behat_blocks.php +++ b/blocks/tests/behat/behat_blocks.php @@ -58,4 +58,43 @@ class behat_blocks extends behat_base { return $steps; } + /** + * Opens a block's actions menu if it is not already opened. + * + * @Given /^I open the "(?P(?:[^"]|\\")*)" blocks action menu$/ + * @throws DriverException The step is not available when Javascript is disabled + * @param string $blockname + * @return Given + */ + public function i_open_the_blocks_action_menu($blockname) { + + if (!$this->running_javascript()) { + throw new DriverException('Blocks action menu not available when Javascript is disabled'); + } + + // If it is already opened we do nothing. + $blocknode = $this->get_block_node($blockname); + $classes = array_flip(explode(' ', $blocknode->getAttribute('class'))); + if (!empty($classes['action-menu-shown'])) { + return; + } + + return new Given('I click on "a[role=\'menuitem\']" "css_element" in the "' . $this->escape($blockname) . '" "block"'); + } + + /** + * Returns the DOM node of the block from
. + * + * @throws ElementNotFoundException Thrown by behat_base::find + * @param string $blockname The block name + * @return NodeElement + */ + protected function get_block_node($blockname) { + + $blockname = $this->getSession()->getSelectorsHandler()->xpathLiteral($blockname); + $xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' block ')][contains(., $blockname)]"; + + return $this->find('xpath', $xpath); + } + } diff --git a/blocks/tests/behat/configure_block_throughout_site.feature b/blocks/tests/behat/configure_block_throughout_site.feature index af2bc33c4df..bc1c316aa48 100644 --- a/blocks/tests/behat/configure_block_throughout_site.feature +++ b/blocks/tests/behat/configure_block_throughout_site.feature @@ -18,7 +18,7 @@ Feature: Add and configure blocks throughout the site And I log in as "manager1" And I follow "Turn editing on" And I add the "Comments" block - And I click on "Actions" "link" in the "Comments" "block" + And I open the "Comments" blocks action menu And I follow "Configure Comments block" And I fill the moodle form with: | Page contexts | Display throughout the entire site | @@ -27,7 +27,7 @@ Feature: Add and configure blocks throughout the site Then I should see "Comments" in the "Comments" "block" And I should see "Save comment" in the "Comments" "block" And I am on homepage - And I click on "Actions" "link" in the "Comments" "block" + And I open the "Comments" blocks action menu And I follow "Configure Comments block" And I fill the moodle form with: | Default weight | -10 (first) | diff --git a/blocks/tests/behat/manage_blocks.feature b/blocks/tests/behat/manage_blocks.feature index 2c3cb7f2cd1..dea4dccfd8c 100644 --- a/blocks/tests/behat/manage_blocks.feature +++ b/blocks/tests/behat/manage_blocks.feature @@ -42,6 +42,7 @@ Feature: Block appearances And I follow "Course 1" And I follow "Turn editing on" And I add the "Comments" block + And I open the "Comments" blocks action menu And I follow "Configure Comments block" And I fill the moodle form with: | Display on page types | Any page | @@ -52,6 +53,7 @@ Feature: Block appearances When I follow "Test survey name" Then I should see "Comments" in the "Comments" "block" And I follow "Course 1" + And I open the "Comments" blocks action menu And I follow "Configure Comments block" And I fill the moodle form with: | Display on page types | Any course page | @@ -63,6 +65,7 @@ Feature: Block appearances @javascript Scenario: Block settings can be modified so that a block can be hidden or moved When I follow "Test book name" + And I open the "Comments" blocks action menu And I follow "Configure Comments block" And I fill the moodle form with: | Visible | No | @@ -72,6 +75,7 @@ Feature: Block appearances Then I should not see "Comments" And I expand "Course administration" node And I follow "Turn editing on" + And I open the "Comments" blocks action menu And I follow "Configure Comments block" And I fill the moodle form with: | Visible | Yes | diff --git a/blocks/tests/behat/return_block_original_state.feature b/blocks/tests/behat/return_block_original_state.feature index 8605ccc5881..af9bce2ef74 100644 --- a/blocks/tests/behat/return_block_original_state.feature +++ b/blocks/tests/behat/return_block_original_state.feature @@ -15,7 +15,7 @@ Feature: The context of a block can always be returned to it's original state. And I add the "Tags" block Then I should see "Tags" in the "Tags" "block" And I click on "Participants" "link" in the "//li[p/span[contains(normalize-space(string(.)), 'Current course')]]" "xpath_element" - And I click on "Actions" "link" in the "Tags" "block" + And I open the "Tags" blocks action menu And I follow "Configure Tags block" And I fill the moodle form with: | Display on page types | Any page | @@ -25,7 +25,7 @@ Feature: The context of a block can always be returned to it's original state. | Assignment name | Assignment1 | | Description | Description | And I follow "Assignment1" - And I click on "Actions" "link" in the "Tags" "block" + And I open the "Tags" blocks action menu And I follow "Configure Tags block" And I fill the moodle form with: | Display on page types | Any assignment module page | @@ -41,7 +41,7 @@ Feature: The context of a block can always be returned to it's original state. | Description | Description | And I follow "Assignment2" And I should see "Tags" in the "Tags" "block" - And I click on "Actions" "link" in the "Tags" "block" + And I open the "Tags" blocks action menu And I follow "Configure Tags block" And I fill the moodle form with: | Display on page types | Any page |