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.

277 lines
8.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';
require_once dirname(__FILE__).'/behaviors/CMessageBehavior.php';
/**
* @backup users
*
* @backup config
*/
class testLanguage extends CWebTest {
private const INFO = 'You are not able to choose some of the languages, because'.
' locales for them are not installed on the web server.';
private const INFO_RUS = 'Вы не можете выбрать некоторые языки, т.к. локали для'.
' них не установлены на вашем веб-сервере.';
private const WARNING_TITLE = 'You are not logged in';
private const WARNING_TITLE_RUS = 'Вы не выполнили вход';
/**
* Attach MessageBehavior to the test.
*
* @return array
*/
public function getBehaviors() {
return [CMessageBehavior::class];
}
public static function getGuiData() {
return [
[
[
'field' => [
'Default language' => 'Russian (ru_RU)'
],
'message' => 'Configuration updated',
'page_title' => 'Настройка веб-интерфейса',
'html_lang' => 'ru',
'defaultdb_lang' => 'ru_RU',
'info' => self::INFO_RUS,
'login_info' => [
'name' => 'Имя пользователя',
'password' => 'Пароль'
]
]
],
[
[
'field' => [
'Язык по умолчанию' => 'Английский (en_US)'
],
'message' => 'Настройки обновлены',
'page_title' => 'Configuration of GUI',
'html_lang' => 'en',
'defaultdb_lang' => 'en_US',
'info' => self::INFO,
'login_info' => [
'name' => 'Username',
'password' => 'Password'
]
]
]
];
}
/**
* @dataProvider getGuiData
*/
public function testLanguage_Gui($data) {
$this->page->login();
$this->page->open('zabbix.php?action=gui.edit');
// Change default language.
$form = $this->query('xpath://form[@aria-labelledby="page-title-general"]')->one()->asForm();
$form->fill($data['field']);
$form->submit();
$this->page->waitUntilReady();
$this->checkLanguage($data['message'], $data['page_title'], $data['html_lang'], $data['defaultdb_lang']);
// Red info icon check.
$this->query('xpath://button['.CXPathHelper::fromClass('zi-i-negative').']')->one()->click();
$this->assertEquals($data['info'], $this->query('class:red')->one()->getText());
// After logout, warning message and login menu has system language.
$this->page->logout();
$this->page->refresh();
$warning = ($data['html_lang'] == 'ru') ? self::WARNING_TITLE_RUS : self::WARNING_TITLE;
$this->assertMessage(TEST_BAD, $warning);
$this->query('id:login')->one()->click();
$this->assertEquals($data['html_lang'], $this->query('xpath://html')->one()->getAttribute('lang'));
foreach ($data['login_info'] as $key => $value) {
$this->assertEquals($value, $this->query('xpath://label[@for="'.$key.'"]')->one()->getText());
}
}
public static function getUserData() {
return [
[
[
'field' => [
'Language' => 'Russian (ru_RU)'
],
'message' => 'User updated',
'page_title' => 'Панель',
'html_lang' => 'ru',
'menu_lang' => 'en',
'userdb_lang' => 'ru_RU',
'defaultdb_lang' => 'en_US',
'info' => self::INFO
]
],
[
[
'field' => [
'Язык' => 'Английский (en_US)'
],
'message' => 'Пользователь обновлен',
'page_title' => 'Dashboard',
'html_lang' => 'en',
'menu_lang' => 'en',
'userdb_lang' => 'en_US',
'defaultdb_lang' => 'en_US',
'info' => self::INFO_RUS
]
],
[
[
'field' => [
'Language' => 'System default'
],
'message' => 'User updated',
'page_title' => 'Dashboard',
'html_lang' => 'en',
'menu_lang' => 'en',
'userdb_lang' => 'default',
'defaultdb_lang' => 'en_US',
'info' => self::INFO
]
]
];
}
/**
* @dataProvider getUserData
*/
public function testLanguage_User($data) {
$this->page->userLogin('user-zabbix', 'zabbix');
$this->page->open('zabbix.php?action=userprofile.edit');
$form = $this->query('name:user_form')->one()->asForm();
// Red info icon check.
$this->query('xpath://button['.CXPathHelper::fromClass('zi-i-negative').']')->one()->click();
$this->assertEquals($data['info'], $this->query('class:red')->one()->getText());
// Change user language to different from System.
$form->fill($data['field']);
$form->submit();
$this->page->waitUntilReady();
$this->checkLanguage($data['message'], $data['page_title'], $data['html_lang'], $data['defaultdb_lang']);
$this->assertEquals($data['userdb_lang'], CDBHelper::getValue('SELECT lang FROM users WHERE username='.zbx_dbstr('user-zabbix')));
// After logout, login menu has system language.
$this->page->logout();
$this->page->refresh();
$this->assertMessage(TEST_BAD, self::WARNING_TITLE);
$this->query('button:Login')->one()->click();
$this->assertEquals($data['menu_lang'], $this->query('xpath://html')->one()->getAttribute('lang'));
$this->assertEquals('Username', $this->query('xpath://label[@for="name"]')->one()->getText());
$this->assertEquals('Password', $this->query('xpath://label[@for="password"]')->one()->getText());
}
public static function getCreateUserData() {
return [
[
[
'fields' => [
'Username' => 'testRU',
'Groups' => [
'Selenium user group'
],
'Password' => 'test5678',
'Password (once again)' => 'test5678',
'Language' => 'Russian (ru_RU)'
],
'page_title' => 'Панель',
'html_lang' => 'ru',
'userdb_lang' => 'ru_RU',
'defaultdb_lang' => 'en_US'
]
],
[
[
'fields' => [
'Username' => 'testDEF',
'Groups' => [
'Selenium user group'
],
'Password' => 'test5678',
'Password (once again)' => 'test5678',
'Language' => 'System default'
],
'page_title' => 'Dashboard',
'html_lang' => 'en',
'userdb_lang' => 'default',
'defaultdb_lang' => 'en_US'
]
],
[
[
'fields' => [
'Username' => 'testENG',
'Groups' => [
'Selenium user group'
],
'Password' => 'test5678',
'Password (once again)' => 'test5678',
'Language' => 'English (en_US)'
],
'page_title' => 'Dashboard',
'html_lang' => 'en',
'userdb_lang' => 'en_US',
'defaultdb_lang' => 'en_US'
]
]
];
}
/**
* @dataProvider getCreateUserData
*/
public function testLanguage_CreateUser($data) {
$this->page->login();
$this->page->open('zabbix.php?action=user.edit');
$form = $this->query('name:user_form')->asForm()->waitUntilVisible()->one();
$form->fill($data['fields']);
$form->selectTab('Permissions');
$form->fill(['Role' => 'Super admin role']);
$form->submit();
$this->assertMessage(TEST_GOOD, 'User added');
$this->page->logout();
$this->page->userLogin($data['fields']['Username'], $data['fields']['Password']);
$this->page->assertTitle($data['page_title']);
$this->assertEquals($data['html_lang'], $this->query('xpath://html')->one()->getAttribute('lang'));
$this->assertEquals($data['userdb_lang'], CDBHelper::getValue('SELECT lang FROM users WHERE username='.
zbx_dbstr($data['fields']['Username'])));
$this->assertEquals($data['defaultdb_lang'], CDBHelper::getValue('SELECT default_lang FROM config'));
$this->page->logout();
}
private function checkLanguage($message, $page_title, $html_lang, $defaultdb_lang) {
$this->assertMessage(TEST_GOOD, $message);
$this->page->assertTitle($page_title);
$this->assertEquals($html_lang, $this->query('xpath://html')->one()->getAttribute('lang'));
$this->assertEquals($defaultdb_lang, CDBHelper::getValue('SELECT default_lang FROM config'));
}
}