This commit is contained in:
Andrew Nicols 2024-09-25 22:44:50 +08:00
commit ce119a4344
No known key found for this signature in database
GPG key ID: 6D1E3157C8CFBF14
7 changed files with 231 additions and 34 deletions

View file

@ -1628,4 +1628,60 @@ class behat_navigation extends behat_base {
set_user_preference('behat_keep_drawer_closed', 1);
$this->i_close_block_drawer_if_open();
}
/**
* Checks if a navigation menu item is active.
*
* @Then menu item :navigationmenuitem should be active
* @param string $navigationmenuitem The navigation menu item name.
*/
public function menu_item_should_be_active(string $navigationmenuitem): void {
$elementselector = "//*//a/following-sibling::*//a[contains(text(), '$navigationmenuitem') and @aria-current='true']";
$params = [$elementselector, "xpath_element"];
$this->execute("behat_general::should_exist", $params);
}
/**
* Checks if a navigation menu item is not active
*
* @Then menu item :navigationmenuitem should not be active
* @param string $navigationmenuitem The navigation menu item name.
*/
public function menu_item_should_not_be_active(string $navigationmenuitem): void {
$elementselector = "//*//a/following-sibling::*//a[contains(text(), '$navigationmenuitem') and @aria-current='true']";
$params = [$elementselector, "xpath_element"];
$this->execute("behat_general::should_not_exist", $params);
}
/**
* Sets a link to no longer navigate when selected.
*
* @When /^I update the href of the "(?P<locator_string>[^"]*)" "(?P<selector_string>[^"]*)" link to "(?P<href_string>[^"]*)"$/
* @param string $locator The locator to use
* @param string $selector selector type
* @param string $href The value
*/
public function i_update_the_link_to_go_nowhere(
string $locator,
string $selector,
string $href,
): void {
$this->require_javascript();
$xpath = $this->find(
selector: $selector,
locator: $locator,
)->getXpath();
$script = <<<JS
var result = document.evaluate("{$xpath}", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
var link = result.singleNodeValue;
if (link) {
link.setAttribute('href', '{$href}');
} else {
throw new Error('No element found with the XPath: ' + "$selector");
}
JS;
$this->getSession()->executeScript($script);
}
}

View file

@ -0,0 +1,78 @@
@core
Feature: Menu navigation has accurate checkmarks in single activity course format
In order to correctly navigate the menu items
As an admin
I need to see accurate checkmarks besides the menu items I am currently on while in a single activity format course
Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | T1 | Teacher1 | teacher1@example.com |
| student1 | Student | 1 | student1@example.com |
And the following "courses" exist:
| fullname | shortname | format | activitytype |
| Course 1 | C1 | singleactivity | quiz |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
And the following "activities" exist:
| activity | name | intro | course | idnumber |
| quiz | Quiz 1 | Quiz 1 for testing the Add menu | C1 | quiz1 |
Scenario: Admin can see checkmark beside menu item they are currently on in a single activity format course
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Backup" in current page administration
Then menu item "Backup" should be active
When I navigate to "Permissions" in current page administration
Then menu item "Permissions" should be active
And menu item "Backup" should not be active
When I navigate to "Participants" in current page administration
Then menu item "Participants" should be active
And menu item "Backup" should not be active
And menu item "Permissions" should not be active
When I navigate to "Grades" in current page administration
Then menu item "Grades" should be active
And menu item "Backup" should not be active
And menu item "Permissions" should not be active
And menu item "Participants" should not be active
Scenario: Admin can see checkmark beside menu item they are currently on after pressing browser back button in a single
activity format course
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Backup" in current page administration
Then menu item "Backup" should be active
When I navigate to "Permissions" in current page administration
Then menu item "Permissions" should be active
And menu item "Backup" should not be active
When I press the "back" button in the browser
Then menu item "Backup" should be active
And menu item "Permissions" should not be active
Scenario: Admin can see checkmark beside menu item they are currently on after pressing browser back button when
jumping between course and activity menu in a single activity format course
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Backup" in current page administration
Then menu item "Backup" should be active
When I navigate to "Participants" in current page administration
Then menu item "Participants" should be active
And menu item "Backup" should not be active
When I press the "back" button in the browser
Then menu item "Backup" should be active
And menu item "Participants" should not be active
@javascript
Scenario: Admin should not see checkmark if link is not navigated to in current browser for single activity format quiz
Given I log in as "admin"
And I am on "Course 1" course homepage
And I update the href of the "//*//a/following-sibling::*//a[contains(text(), 'Participants')]" "xpath" link to "#"
When I navigate to "Participants" in current page administration
Then menu item "Participants" should not be active
And I update the href of the "//*//a/following-sibling::*//a[contains(text(), 'Backup')]" "xpath" link to "#"
When I click on "//*//a[contains(text(),'Activity')]" "xpath"
And I click on "//*//a/following-sibling::*//a[contains(text(), 'Backup')]" "xpath"
Then menu item "Backup" should not be active

View file

@ -0,0 +1,92 @@
@core
Feature: Menu navigation has accurate checkmarks in topic course format
In order to correctly navigate the menu items
As an admin
I need to see accurate checkmarks besides the menu items I am currently on while in topics format
Background:
Given the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | T1 | Teacher1 | teacher1@example.com |
| student1 | Student | 1 | student1@example.com |
And the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
| student1 | C1 | student |
And the following "activities" exist:
| activity | name | intro | course | idnumber |
| quiz | Quiz 1 | Quiz 1 for testing the Add menu | C1 | quiz1 |
@javascript
Scenario: Admin can see checkmark beside menu item they are currently on in the quiz page of a topics format course
Given I log in as "admin"
And I am on "Course 1" course homepage
And I follow "Quiz 1"
When I navigate to "Filters" in current page administration
Then menu item "Filters" should be active
When I navigate to "Permissions" in current page administration
Then menu item "Permissions" should be active
And menu item "Filters" should not be active
When I navigate to "Backup" in current page administration
Then menu item "Backup" should be active
And menu item "Filters" should not be active
And menu item "Permissions" should not be active
@javascript
Scenario: Admin can see checkmark beside menu item they are currently on in the course page of a topics format course
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Filters" in current page administration
Then menu item "Filters" should be active
When I navigate to "Course reuse" in current page administration
Then menu item "Course reuse" should be active
And menu item "Filters" should not be active
@javascript
Scenario: Admin can see checkmark beside menu item they are currently on after pressing browser back button in the
quiz page of a topics format course
Given I log in as "admin"
And I am on "Course 1" course homepage
And I follow "Quiz 1"
When I navigate to "Filters" in current page administration
Then menu item "Filters" should be active
When I navigate to "Permissions" in current page administration
Then menu item "Permissions" should be active
And menu item "Filters" should not be active
When I press the "back" button in the browser
Then menu item "Filters" should be active
And menu item "Permissions" should not be active
@javascript
Scenario: Admin can see checkmark beside menu item they are currently on after pressing browser back button in the
course page of a topics format course
Given I log in as "admin"
And I am on "Course 1" course homepage
When I navigate to "Filters" in current page administration
Then menu item "Filters" should be active
When I navigate to "Course reuse" in current page administration
Then menu item "Course reuse" should be active
And menu item "Filters" should not be active
When I press the "back" button in the browser
Then menu item "Filters" should be active
And menu item "Course reuse" should not be active
@javascript
Scenario: Admin should not see checkmark if link is not navigated to in current browser in course view for topics format
Given I log in as "admin"
And I am on "Course 1" course homepage
And I update the href of the "//*//a/following-sibling::*//a[contains(text(), 'Filters')]" "xpath" link to "#"
And I navigate to "Question bank" in current page administration
Then menu item "Filters" should not be active
@javascript
Scenario: Admin should not see checkmark if link is not navigated to in current browser in quiz view for topics format
Given I log in as "admin"
And I am on "Course 1" course homepage
And I follow "Quiz 1"
And I update the href of the "//*//a/following-sibling::*//a[contains(text(), 'Backup')]" "xpath" link to "#"
And I navigate to "Backup" in current page administration
Then menu item "Backup" should not be active