Source
<?php
/*
** Copyright (C) 2001-2025 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** 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 Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
require_once dirname(__FILE__) . '/../../include/CWebTest.php';
/**
* @backup dashboard, profiles
*
* @dataSource Actions, AllItemValueTypes, CopyWidgetsDashboards, ItemValueWidget, LoginUsers, Proxies, UserPermissions
*/
class testDashboardsWidgetsPage extends CWebTest {
/**
* Default selected widget type.
* The widget type should not be changed in frontend and in DB.
*/
public function testDashboardsWidgetsPage_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();
}