diff options
Diffstat (limited to 'ui/tests/selenium/dashboard/testPageDashboardWidgets.php')
-rw-r--r-- | ui/tests/selenium/dashboard/testPageDashboardWidgets.php | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/ui/tests/selenium/dashboard/testPageDashboardWidgets.php b/ui/tests/selenium/dashboard/testPageDashboardWidgets.php new file mode 100644 index 00000000000..2862cc86117 --- /dev/null +++ b/ui/tests/selenium/dashboard/testPageDashboardWidgets.php @@ -0,0 +1,275 @@ +<?php +/* +** Zabbix +** Copyright (C) 2001-2022 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 dashboard, profiles + * @dataSource LoginUsers + */ +class testPageDashboardWidgets extends CWebTest { + + /** + * Default selected widget type. + * The widget type should not be changed in frontend and in DB. + */ + public function testPageDashboardWidgets_checkUnchangedWidgetType() { + // Opening widget configuration form for new widget first time. + $this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid=1'); + $dashboard = CDashboardElement::find()->one()->edit(); + // Check that widget type isn't changed in frontend and in DB. + $this->checkLastSelectedWidgetType(); + + // Opening edit widget form. + $form_system_info = $dashboard->getWidget('System information')->edit(); + $this->assertEquals('System information', $form_system_info->getField('Type')->getValue()); + $form_system_info->submit(); + // Check that widget type isn't changed in frontend and in DB. + $this->checkLastSelectedWidgetType(); + + // Making changes in widget form that are not "Widget type". + $form_problems = $dashboard->getWidget('Current problems')->edit(); + $this->assertEquals('Problems', $form_problems->getField('Type')->getValue()); + $data =[ + 'Name' => 'check widget type', + 'Refresh interval' => 'No refresh', + 'Show' => 'Recent problems', + 'Show tags' => 'None' + ]; + $form_problems->fill($data); + $form_problems->submit(); + $this->checkLastSelectedWidgetType(); + + // Add widget with current default type "Action log". + $dashboard->addWidget(); + $this->query('xpath://div[@role="dialog"]//button[text()="Add"]')->waitUntilPresent()->one()->click(); + // Check if widget was added. + $dashboard->getWidget('Action log'); + $this->checkLastSelectedWidgetType(); + + $dashboard->cancelEditing(); + } + + /** + * Check last selected widget type in frontend and in DB. + * By default is 'Action log' type and without record in DB. + * + * @param string $type widget type name + * @param string $db_type widget type name stored in DB + */ + private function checkLastSelectedWidgetType($type = 'Action log', $db_type = null) { + $dashboard = CDashboardElement::find()->one(); + COverlayDialogElement::ensureNotPresent(); + $overlay = $dashboard->addWidget(); + $form = $overlay->asForm(); + $this->assertEquals($type, $form->getField('Type')->getValue()); + + if ($db_type) { + $this->assertEquals($db_type, CDBHelper::getValue("SELECT value_str FROM profiles". + " WHERE userid=1 AND idx='web.dashboard.last_widget_type'")); + } + else { + $this->assertEquals(0, CDBHelper::getCount("SELECT * FROM profiles". + " WHERE userid=1 AND idx='web.dashboard.last_widget_type'")); + } + + $overlay->close(); + } + + /** + * Widget type should be inherited from the one that was selected last time. + */ + public function testPageDashboardWidgets_checkWidgetTypeRemembering() { + $this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid=1'); + $dashboard = CDashboardElement::find()->one()->edit(); + // Opening widget configuration form for new Clock widget. + $overlay = $dashboard->addWidget(); + $default_form = $overlay->asForm(); + $default_form->fill(['Type' => 'Clock']); + $default_form->waitUntilReloaded(); + $overlay->close(); + // Check that widget type is not remembered without submitting the form. + $this->checkLastSelectedWidgetType(); + + // Save edit widget form without changing widget type. + $sys_info_form = $dashboard->getWidget('System information')->edit(); + $this->assertEquals('System information', $sys_info_form->getField('Type')->getValue()); + $sys_info_form->submit(); + $this->page->waitUntilReady(); + // Check that widget type is still unchanged. + $this->checkLastSelectedWidgetType(); + + // Opening edit widget form and change widget type. + $change_form = $dashboard->getWidget('System information')->edit(); + $change_form->fill(['Type' => 'Data overview']); + $change_form->waitUntilReloaded(); + $change_form->submit(); + // Check that widget type inherited from previous widget. + $this->checkLastSelectedWidgetType('Data overview', 'dataover'); + + $dashboard->cancelEditing(); + } + + /** + * Check "Problem Hosts" widget. + */ + public function testPageDashboardWidgets_checkProblemHostsWidget() { + // Authorize user and open the page with the desired widget. + $this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid=1000'); + + // Find dashboard element. + $dashboard = CDashboardElement::find()->one(); + + // Get dashboard widget element by widget title ('Problem hosts'). + $widget = $dashboard->getWidget('Problem hosts'); + // Check refresh interval of widget. + $this->assertEquals('1 minute', $widget->getRefreshInterval()); + + // Get widget content as table. + $table = $widget->getContent()->asTable(); + // Check text of the table headers. + $this->assertSame(['Host group', 'Without problems', 'With problems', 'Total'], $table->getHeadersText()); + + // Expected table values. + $expected = [ + 'Host group for tag permissions' => 1, + 'Zabbix servers' => 17, + 'ZBX6648 All Triggers' => 1, + 'ZBX6648 Disabled Triggers' => 1, + 'ZBX6648 Enabled Triggers' => 1 + ]; + + /* + * Index rows by column "Host group": + * Get table data as array where values from column 'Host group' are used as array keys. + */ + $data = $table->index('Host group'); + + foreach ($expected as $group => $problems) { + // Get table row by host name. + $row = $data[$group]; + + // Check the value in table. + $this->assertEquals($problems, $row['Without problems']); + $this->assertEquals($problems, $row['Total']); + } + } + + /** + * Create dashboard with clock widget. + */ + public function testPageDashboardWidgets_checkDashboardCreate() { + $this->page->login()->open('zabbix.php?action=dashboard.list'); + + $this->query('button:Create dashboard')->one()->click(); + $this->page->waitUntilReady(); + $dialog = COverlayDialogElement::find()->one()->waitUntilReady(); + + $this->assertEquals('Dashboard properties', $dialog->getTitle()); + $configuration = $dialog->asForm(); + // Change dashboard owner. + $owner = $configuration->getField('Owner'); + $owner->clear(); + $owner->fill('test-user'); + // Change dashboard name. + $configuration->getField('Name')->clear()->type('Dashboard create test'); + $configuration->submit(); + + if ($this->page->isAlertPresent()) { + $this->page->acceptAlert(); + } + + $dashboard = CDashboardElement::find()->one(); + // Check the name of dashboard. + $this->query('id:page-title-general')->waitUntilTextPresent('Dashboard create test'); + $this->assertEquals('Dashboard create test', $dashboard->getTitle()); + + // Add widget. + $overlay = $dashboard->addWidget(); + $form = $overlay->asForm(); + // Set type to "Clock". + $form->getField('Type')->asDropdown()->select('Clock'); + // Wait until overlay is reloaded. + $overlay->waitUntilReady(); + // Set name of widget. + $form->getField('Name')->type('Clock test'); + $form->submit(); + + if ($this->page->isAlertPresent()) { + $this->page->acceptAlert(); + } + + // Check if widget was added. + $widget = $dashboard->getWidget('Clock test'); + $widget->getContent()->query('class:clock')->waitUntilVisible(); + + // Save dashboard. + $dashboard->save(); + $this->page->waitUntilReady(); + + // Get global message. + $message = CMessageElement::find()->one(); + // Check if message is positive. + $this->assertTrue($message->isGood()); + // Check message title. + $this->assertEquals('Dashboard created', $message->getTitle()); + } + + /** + * Edit widget. + */ + public function testPageDashboardWidgets_checkProblemWidgetEdit() { + $this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid=1'); + + $dashboard = CDashboardElement::find()->one()->edit(); + $widget = $dashboard->getWidget('Problems by severity'); + + // Check if widget is editable. + $this->assertEquals(true, $widget->isEditable()); + + // Open widget edit form and get the form element. + $form = $widget->edit(); + + // Get "Host groups" multiselect. + $groups = $form->getField('Host groups'); + + // Select a single group. + $groups->select('Zabbix servers'); + + // Change the name of widget. + $form->getField('Name')->clear()->type('New widget name'); + // Change show option. + $form->getField('Show')->select('Host groups'); + // Submit the form. + $form->submit(); + + if ($this->page->isAlertPresent()) { + $this->page->acceptAlert(); + } + + // Check if widget can be found by a new name. + $dashboard->getWidget('New widget name'); + $table = $widget->getContent()->asTable(); + // Check if only selected host group is shown. + $this->assertEquals(['Zabbix servers'], array_keys($table->index('Host group'))); + + $dashboard->cancelEditing(); + } +} |