MDL-58428 theme: Shift templates ready for Bootstrapbase removal
[moodle.git] / theme / bootstrapbase / tests / behat / behat_theme_bootstrapbase_behat_navigation.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Navigation steps overrides.
19  *
20  * @package    theme_bootstrapbase
21  * @category   test
22  * @copyright  2016 Damyon Wiese
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 // NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php.
28 require_once(__DIR__ . '/../../../../lib/tests/behat/behat_navigation.php');
30 use Behat\Mink\Exception\ExpectationException as ExpectationException;
31 use Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException;
33 /**
34  * Steps definitions to navigate through the navigation tree nodes (overrides).
35  *
36  * @package    theme_bootstrapbase
37  * @category   test
38  * @copyright  2016 Damyon Wiese
39  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
40  */
41 class behat_theme_bootstrapbase_behat_navigation extends behat_navigation {
43     public function i_follow_in_the_user_menu($nodetext) {
45         if ($this->running_javascript()) {
46             // The user menu must be expanded when JS is enabled.
47             $xpath = "//div[@class='usermenu']//a[contains(concat(' ', @class, ' '), ' toggle-display ')]";
48             $this->execute("behat_general::i_click_on", array($this->escape($xpath), "xpath_element"));
49         }
51         // Now select the link.
52         // The CSS path is always present, with or without JS.
53         $csspath = ".usermenu [data-rel='menu-content']";
55         $this->execute('behat_general::i_click_on_in_the',
56                 array($nodetext, "link", $csspath, "css_element")
57         );
58     }
60     protected function get_top_navigation_node($nodetext) {
62         // Avoid problems with quotes.
63         $nodetextliteral = behat_context_helper::escape($nodetext);
64         $exception = new ExpectationException('Top navigation node "' . $nodetext . ' not found in "', $this->getSession());
66         // First find in navigation block.
67         $xpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]" .
68                 "/ul[contains(concat(' ', normalize-space(@class), ' '), ' block_tree ')]" .
69                 "/li[contains(concat(' ', normalize-space(@class), ' '), ' contains_branch ')]" .
70                 "/ul/li[contains(concat(' ', normalize-space(@class), ' '), ' contains_branch ')]" .
71                 "[p[contains(concat(' ', normalize-space(@class), ' '), ' branch ')]" .
72                 "[span[normalize-space(.)=" . $nodetextliteral ."] or a[normalize-space(.)=" . $nodetextliteral ."]]]" .
73                 "|" .
74                 "//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]/div" .
75                 "/ul[contains(concat(' ', normalize-space(@class), ' '), ' block_tree ')]" .
76                 "/li[contains(concat(' ', normalize-space(@class), ' '), ' contains_branch ')]" .
77                 "/ul/li[contains(concat(' ', normalize-space(@class), ' '), ' contains_branch ')]" .
78                 "[p[contains(concat(' ', normalize-space(@class), ' '), ' branch ')]" .
79                 "/span[normalize-space(.)=" . $nodetextliteral ."]]" .
80                 "|" .
81                 "//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]/div" .
82                 "/ul[contains(concat(' ', normalize-space(@class), ' '), ' block_tree ')]" .
83                 "/li[p[contains(concat(' ', normalize-space(@class), ' '), ' branch ')]" .
84                 "/span[normalize-space(.)=" . $nodetextliteral ."]]" .
85                 "|" .
86                 "//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]/div" .
87                 "/ul[contains(concat(' ', normalize-space(@class), ' '), ' block_tree ')]" .
88                 "/li[p[contains(concat(' ', normalize-space(@class), ' '), ' branch ')]" .
89                 "/a[normalize-space(.)=" . $nodetextliteral ."]]";
91         $node = $this->find('xpath', $xpath, $exception);
93         return $node;
94     }
96     public function should_exist_in_current_page_administration($element, $selectortype) {
97         $parentnodes = array_map('trim', explode('>', $element));
98         // Find the name of the first category of the administration block tree.
99         $xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]/p[1]/span';
100         $node = $this->find('xpath', $xpath);
101         array_unshift($parentnodes, $node->getText());
102         $lastnode = array_pop($parentnodes);
104         if (!$this->find_node_in_navigation($lastnode, $parentnodes, strtolower($selectortype))) {
105             throw new ExpectationException(ucfirst($selectortype) . ' "' . $element .
106                     '" not found in current page administration"', $this->getSession());
107         }
108     }
110     public function should_not_exist_in_current_page_administration($element, $selectortype) {
111         $parentnodes = array_map('trim', explode('>', $element));
112         // Find the name of the first category of the administration block tree.
113         $xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]/p[1]/span';
114         $node = $this->find('xpath', $xpath);
115         array_unshift($parentnodes, $node->getText());
116         $lastnode = array_pop($parentnodes);
118         if ($this->find_node_in_navigation($lastnode, $parentnodes, strtolower($selectortype))) {
119             throw new ExpectationException(ucfirst($selectortype) . ' "' . $element .
120                     '" found in current page administration"', $this->getSession());
121         }
122     }
124     public function i_navigate_to_in_current_page_administration($nodetext) {
125         $parentnodes = array_map('trim', explode('>', $nodetext));
126         // Find the name of the first category of the administration block tree.
127         $xpath = '//div[contains(@class,\'block_settings\')]//div[@id=\'settingsnav\']/ul/li[1]/p[1]/span';
128         $node = $this->find('xpath', $xpath);
129         array_unshift($parentnodes, $node->getText());
130         $lastnode = array_pop($parentnodes);
131         $this->select_node_in_navigation($lastnode, $parentnodes);
132     }
134     public function i_navigate_to_in_site_administration($nodetext) {
135         $parentnodes = array_map('trim', explode('>', $nodetext));
136         array_unshift($parentnodes, get_string('administrationsite'));
137         $lastnode = array_pop($parentnodes);
138         $this->select_node_in_navigation($lastnode, $parentnodes);
139     }