You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

446 lines
9.4 KiB

<?php
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
require_once dirname(__FILE__).'/../include/CWebTest.php';
/**
* @backup sessions
*
* Test side menu.
*/
class testSidebarMenu extends CWebTest {
public static function getMainData() {
return [
[
[
'section' => 'Dashboards',
'page' => 'Dashboards'
]
],
[
[
'section' => 'Monitoring',
'page' => 'Problems'
]
],
[
[
'section' => 'Monitoring',
'page' => 'Hosts'
]
],
[
[
'section' => 'Monitoring',
'page' => 'Latest data'
]
],
[
[
'section' => 'Monitoring',
'page' => 'Maps'
]
],
[
[
'section' => 'Monitoring',
'page' => 'Discovery',
'header' => 'Status of discovery'
]
],
[
[
'section' => 'Services',
'page' => 'Services'
]
],
[
[
'section' => 'Services',
'page' => 'SLA'
]
],
[
[
'section' => 'Services',
'page' => 'SLA report'
]
],
[
[
'section' => 'Inventory',
'page' => 'Overview',
'header' => 'Host inventory overview'
]
],
[
[
'section' => 'Inventory',
'page' => 'Hosts',
'header' => 'Host inventory'
]
],
[
[
'section' => 'Reports',
'page' => 'System information'
]
],
[
[
'section' => 'Reports',
'page' => 'Scheduled reports'
]
],
[
[
'section' => 'Reports',
'page' => 'Availability report'
]
],
[
[
'section' => 'Reports',
'page' => 'Top 100 triggers',
'header' => 'Top 100 triggers'
]
],
[
[
'section' => 'Reports',
'page' => 'Audit log'
]
],
[
[
'section' => 'Reports',
'page' => 'Action log'
]
],
[
[
'section' => 'Reports',
'page' => 'Notifications'
]
],
[
[
'section' => 'Data collection',
'page' => 'Template groups'
]
],
[
[
'section' => 'Data collection',
'page' => 'Host groups'
]
],
[
[
'section' => 'Data collection',
'page' => 'Templates'
]
],
[
[
'section' => 'Data collection',
'page' => 'Hosts'
]
],
[
[
'section' => 'Data collection',
'page' => 'Maintenance',
'header' => 'Maintenance periods'
]
],
[
[
'section' => 'Data collection',
'page' => 'Event correlation'
]
],
[
[
'section' => 'Data collection',
'page' => 'Discovery',
'header' => 'Discovery rules'
]
],
[
[
'section' => 'Alerts',
'page' => 'Actions',
'third_level' =>
[
'Trigger actions',
'Service actions',
'Discovery actions',
'Autoregistration actions',
'Internal actions'
]
]
],
[
[
'section' => 'Alerts',
'page' => 'Media types'
]
],
[
[
'section' => 'Alerts',
'page' => 'Scripts'
]
],
[
[
'section' => 'Users',
'page' => 'User groups'
]
],
[
[
'section' => 'Users',
'page' => 'User roles'
]
],
[
[
'section' => 'Users',
'page' => 'Users'
]
],
[
[
'section' => 'Users',
'page' => 'API tokens'
]
],
[
[
'section' => 'Users',
'page' => 'Authentication'
]
],
[
[
'section' => 'Administration',
'page' => 'General',
'third_level' =>
[
'GUI',
'Autoregistration',
'Images',
'Icon mapping',
'Regular expressions',
'Trigger displaying options',
'Geographical maps',
'Modules',
'Other'
]
]
],
[
[
'section' => 'Administration',
'page' => 'Audit log'
]
],
[
[
'section' => 'Administration',
'page' => 'Housekeeping'
]
],
[
[
'section' => 'Administration',
'page' => 'Proxies'
]
],
[
[
'section' => 'Administration',
'page' => 'Macros'
]
],
[
[
'section' => 'Administration',
'page' => 'Queue',
'third_level' =>
[
'Queue overview',
'Queue overview by proxy',
'Queue details'
]
]
],
[
[
'section' => 'User settings',
'page' => 'Profile',
'header' => 'User profile: Zabbix Administrator'
]
],
[
[
'section' => 'User settings',
'page' => 'API tokens'
]
]
];
}
/**
* Check menu pages that allows to navigate.
*
* @dataProvider getMainData
*/
public function testSidebarMenu_Main($data) {
$this->page->login()->open('')->waitUntilReady();
$this->query('xpath://li[@class="is-selected"]/a[text()="Dashboards"]')->waitUntilReady();
$menu__type = ($data['section'] === 'User settings') ? 'user' : 'main';
// First level menu.
$main_section = $this->query('xpath://ul[@class="menu-'.$menu__type.'"]')->query('link', $data['section']);
// Click on the first level menu and wait for it to fully open.
if ($data['section'] !== 'Dashboards') {
$main_section->waitUntilReady()->one()->click();
$element = $this->query('xpath://a[text()="'.$data['section'].'"]/../ul[@class="submenu"]')->one();
CElementQuery::wait()->until(function () use ($element) {
return CElementQuery::getDriver()->executeScript('return arguments[0].clientHeight ==='.
' parseInt(arguments[0].style.maxHeight, 10)', [$element]);
});
$submenu = $element->query('link', $data['page'])->one();
// Open second level menu.
$submenu->waitUntilClickable()->click();
}
// Checking 3rd level menu.
if (array_key_exists('third_level', $data)) {
foreach ($data['third_level'] as $third_level) {
$submenu->parents('tag:li')->query('xpath://ul/li/a[text()="'.$third_level.'"]')
->waitUntilClickable()->one()->click();
$this->assertTrue($this->query('xpath://li[contains(@class, "is-selected")]/a[text()="'.
$data['page'].'"]')->exists());
$this->page->assertHeader(($third_level === 'Other') ? 'Other configuration parameters' : $third_level);
$submenu->click();
}
}
else {
$this->page->assertHeader((array_key_exists('header', $data)) ? $data['header'] : $data['page']);
}
}
/**
* Check side menu hide and collapse availability.
*/
public function testSidebarMenu_CollapseHide() {
$this->page->login()->open('')->waitUntilReady();
foreach (['compact', 'hidden'] as $view) {
if ($view === 'compact') {
$hide = 'Collapse sidebar';
$unhide = 'Expand sidebar';
$id = 'view';
}
else {
$hide = 'Hide sidebar';
$unhide = 'Show sidebar';
$id = 'sidebar-button-toggle';
}
// Clicking hide/collapse button.
$this->query('xpath://button[@title='.CXPathHelper::escapeQuotes($hide).']')->one()->click();
$this->assertTrue($this->query('xpath://aside[@class="sidebar is-'.$view.'"]')->waitUntilReady()->exists());
// Waiting sidemenu to hide/collapse.
if ($view === 'compact') {
$this->query('class:zabbix-logo-sidebar')->one(false)->waitUntilNotVisible();
}
elseif ($view === 'hidden') {
$this->query('xpath://aside[@class="sidebar is-hidden"]')->one(false)->waitUntilNotVisible();
}
$this->query('id', $id)->one()->click();
$this->assertTrue($this->query('xpath://aside[@class="sidebar is-'.$view.' is-opened"]')->waitUntilReady()->exists());
// Checking that collapsed, hidden sidemenu appears on clicking.
$this->query('xpath://aside[@class="sidebar is-'.$view.' is-opened"]')->one()->waitUntilVisible();
// Returning standard sidemenu view clicking on unhide, expand button.
$this->query('xpath://button[@title='.CXPathHelper::escapeQuotes($unhide).']')->one()->waitUntilClickable()->click();
$this->assertTrue($this->query('class:sidebar')->one()->isVisible());
}
}
public static function getUserSectionData() {
return [
[
[
'section' => 'Support',
'link' => 'https://www.zabbix.com/support'
]
],
[
[
'section' => 'Integrations',
'link' => 'https://www.zabbix.com/integrations'
]
],
[
[
'section' => 'Help',
'link' => 'https://www.zabbix.com/documentation/'.ZABBIX_EXPORT_VERSION.'/'
]
],
[
[
'section' => 'Sign out',
'title' => 'Zabbix'
]
]
];
}
/**
* Pages that transfer you to another webpage and logout button.
*
* @dataProvider getUserSectionData
*/
public function testSidebarMenu_UserSection($data) {
$this->page->login()->open('')->waitUntilReady();
if (array_key_exists('link', $data)) {
$this->assertTrue($this->query('xpath://ul[@class="menu-user"]//a[text()="'.$data['section'].
'" and @href="'.$data['link'].'"]')->one()->isVisible());
}
else {
$this->query('xpath://ul[@class="menu-user"]//a[text()="'.$data['section'].'"]')->one()->click();
$this->page->assertTitle('Zabbix');
}
}
}