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.
zabbix/ui/tests/selenium/services/testPageServicesServicesMas...

572 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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__).'/../traits/TableTrait.php';
require_once dirname(__FILE__).'/../behaviors/CMessageBehavior.php';
/**
* @backup services
*
* @dataSource Services
*/
class testPageServicesServicesMassUpdate extends CWebTest {
use TableTrait;
private static $service_sql = 'SELECT * FROM services ORDER BY serviceid';
/**
* Attach MessageBehavior to the test.
*
* @return array
*/
public function getBehaviors() {
return [CMessageBehavior::class];
}
public function getTagsData() {
return [
// Empty tag name.
[
[
'expected' => TEST_BAD,
'names' => [
'Service with problem',
'Service with problem tags'
],
'Tags' => [
'action' => 'Add',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'value' => 'value1'
]
]
],
'details' => 'Invalid parameter "/1/tags/1/tag": cannot be empty.'
]
],
// TODO: Uncomment this case when ZBX-19263 is fixed.
// Equal tags.
/*
[
[
'expected' => TEST_BAD,
'names' => [
'Service with multiple service tags',
'Service for duplitate check'
],
'Tags' => [
'action' => 'Add',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'tag',
'value' => 'value'
],
[
'tag' => 'tag',
'value' => 'value'
]
]
],
'details' => 'Invalid parameter "/1/tags/2": value (tag, value)=(tag, value) already exists.'
]
],
*/
[
[
'names' => [
'Service with problem',
'Service with multiple service tags'
],
'Tags' => [
'action' => 'Add',
'tags' => []
],
'expected_tags' => [
'Service with problem' => [
[
'tag' => 'old_tag_1',
'value' => 'old_value_1'
]
],
'Service with multiple service tags' => [
[
'tag' => 'problem',
'value' => 'true'
],
[
'tag' => 'test',
'value' => 'test456'
]
]
]
]
],
[
[
'names' => [
'Service with problem',
'Service with multiple service tags'
],
'Tags' => [
'action' => 'Add',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'added_tag_1',
'value' => 'added_value_1'
]
]
],
'expected_tags' => [
'Service with problem' => [
[
'tag' => 'added_tag_1',
'value' => 'added_value_1'
],
[
'tag' => 'old_tag_1',
'value' => 'old_value_1'
]
],
'Service with multiple service tags' => [
[
'tag' => 'added_tag_1',
'value' => 'added_value_1'
],
[
'tag' => 'problem',
'value' => 'true'
],
[
'tag' => 'test',
'value' => 'test456'
]
]
]
]
],
[
[
'names' => [
'Service for mass update',
'Update service'
],
'Tags' => [
'action' => 'Replace',
'tags' => []
],
'expected_tags' => [
'Service for mass update' => [
[
'tag' => '',
'value' => ''
]
],
'Update service' => [
[
'tag' => '',
'value' => ''
]
]
]
]
],
[
[
'names' => [
'Service for mass update',
'Update service'
],
'Tags' => [
'action' => 'Replace',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'replaced_tag',
'value' => 'replaced_value'
]
]
],
'expected_tags' => [
'Service for mass update' => [
[
'tag' => 'replaced_tag',
'value' => 'replaced_value'
]
],
'Update service' => [
[
'tag' => 'replaced_tag',
'value' => 'replaced_value'
]
]
]
]
],
[
[
'names' => [
'Service for delete 2',
'Service for delete'
],
'Tags' => [
'action' => 'Remove',
'tags' => [
[
'tag' => '',
'value' => ''
]
]
],
'expected_tags' => [
'Service for delete 2' => [
[
'tag' => '3rd_tag',
'value' => '3rd_value'
],
[
'tag' => '4th_tag',
'value' => '4th_value'
],
[
'tag' => 'remove_tag_1',
'value' => 'remove_value_1'
],
[
'tag' => 'remove_tag_2',
'value' => 'remove_value_2'
]
],
'Service for delete' => [
[
'tag' => 'remove_tag_2',
'value' => 'remove_value_2'
]
]
]
]
],
[
[
'names' => [
'Service for delete 2',
'Service for delete',
'Parent for child creation'
],
'Tags' => [
'action' => 'Remove',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'remove_tag_2',
'value' => 'remove_value_2'
]
]
],
'expected_tags' => [
'Service for delete 2' => [
[
'tag' => '3rd_tag',
'value' => '3rd_value'
],
[
'tag' => '4th_tag',
'value' => '4th_value'
],
[
'tag' => 'remove_tag_1',
'value' => 'remove_value_1'
]
],
'Service for delete' => [
[
'tag' => '',
'value' => ''
]
],
'Parent for child creation' => [
[
'tag' => 'remove_tag_3',
'value' => 'remove_value_3'
]
]
]
]
],
// Different symbols in tag names and values.
[
[
'names' => [
'Service with problem tags',
'Service for duplitate check'
],
'Tags' => [
'action' => 'Add',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => '!@#$%^&*()_+<>,.\/',
'value' => '!@#$%^&*()_+<>,.\/'
],
[
'tag' => 'tag1',
'value' => 'value1'
],
[
'tag' => 'tag2'
],
[
'tag' => '{$MACRO:A}',
'value' => '{$MACRO:A}'
],
[
'tag' => '{$MACRO}',
'value' => '{$MACRO}'
],
[
'tag' => 'Таг',
'value' => 'Значение'
]
]
]
]
],
// Two tags with equal tag names.
[
[
'names' => [
'Service with problem tags',
'Service for duplitate check'
],
'Tags' => [
'action' => 'Replace',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'tag3',
'value' => '3'
],
[
'tag' => 'tag3',
'value' => '4'
]
]
]
]
],
// Two tags with equal tag values.
[
[
'names' => [
'Service with problem tags',
'Service for duplitate check'
],
'Tags' => [
'action' => 'Replace',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'tag4',
'value' => '5'
],
[
'tag' => 'tag5',
'value' => '5'
]
]
]
]
],
// Tag with trailing spaces.
[
[
'names' => [
'Service with problem tags',
'Service for duplitate check'
],
'Tags' => [
'action' => 'Replace',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => ' trimmed tag ',
'value' => ' trimmed value '
]
]
],
'trim' => true
]
],
// Tag with long name and value.
[
[
'names' => [
'Service with problem tags',
'Service for duplitate check'
],
'Tags' => [
'action' => 'Replace',
'tags' => [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'Long tag name. Long tag name. Long tag name. Long tag name. Long tag name.'.
' Long tag name. Long tag name. Long tag name.',
'value' => 'Long tag value. Long tag value. Long tag value. Long tag value. Long tag value.'.
' Long tag value. Long tag value. Long tag value. Long tag value.'
]
]
]
]
]
];
}
/**
* Mass update Tags in Services.
*
* @dataProvider getTagsData
*/
public function testPageServicesServicesMassUpdate_Tags($data) {
if (CTestArrayHelper::get($data, 'expected', TEST_GOOD) === TEST_BAD) {
$old_hash = CDBHelper::getHash(self::$service_sql);
}
$this->page->login()->open('zabbix.php?action=service.list.edit');
$this->selectTableRows($data['names']);
$this->query('button:Mass update')->one()->click();
$dialog = COverlayDialogElement::find()->waitUntilReady()->asForm()->one();
$dialog->getLabel('Tags')->click();
$dialog->query('id:mass_update_tags')->asSegmentedRadio()->one()->fill($data['Tags']['action']);
if ($data['Tags']['tags'] !== []) {
$this->query('class:tags-table')->asMultifieldTable()->one()->fill($data['Tags']['tags']);
}
$dialog->submit();
if (CTestArrayHelper::get($data, 'expected', TEST_GOOD) === TEST_BAD) {
$this->assertMessage(TEST_BAD, 'Cannot update services', $data['details']);
$this->assertEquals($old_hash, CDBHelper::getHash(self::$service_sql));
}
else {
COverlayDialogElement::ensureNotPresent();
$this->assertMessage(TEST_GOOD, 'Services updated');
// Check changed fields in saved service form.
foreach ($data['names'] as $name) {
$table = $this->query('id:service-list')->asTable()->one();
$table->findRow('Name', $name)->query('xpath:.//button[@title="Edit"]')->waitUntilClickable()
->one()->click();
$service_dialog = COverlayDialogElement::find()->waitUntilReady()->one();
$service_dialog->asForm()->selectTab('Tags');
$expected = $data['Tags']['tags'];
if (!array_key_exists('expected_tags', $data)) {
// Remove action and index fields for asserting expected result.
foreach ($expected as &$tag) {
unset($tag['action'], $tag['index']);
if (CTestArrayHelper::get($data, 'trim', false) === false) {
continue;
}
// Removing trailing and leading spaces from tag and value for asserting expected result.
foreach ($expected as $i => &$options) {
foreach (['tag', 'value'] as $parameter) {
if (array_key_exists($parameter, $options)) {
$options[$parameter] = trim($options[$parameter]);
}
}
}
unset($options);
}
unset($tag);
}
$expected_tags = array_key_exists('expected_tags', $data) ? $data['expected_tags'][$name] : $expected;
$this->query('class:tags-table')->asMultifieldTable()->one()->checkValue($expected_tags);
$service_dialog->close();
}
}
}
/**
* Cancel Mass updating of Services.
*/
public function testPageServicesServicesMassUpdate_Cancel() {
$old_hash = CDBHelper::getHash(self::$service_sql);
$this->page->login()->open('zabbix.php?action=service.list.edit');
$services = [
'Service with problem',
'Service with multiple service tags',
'Service with problem tags',
'Service for duplitate check'
];
$new_tags = [
[
'action' => USER_ACTION_UPDATE,
'index' => 0,
'tag' => 'new_tag_1',
'value' => 'new_value_1'
],
[
'tag' => 'new_tag_2',
'value' => 'new_value_2'
]
];
$this->selectTableRows($services);
$this->query('button:Mass update')->one()->click();
$dialog = COverlayDialogElement::find()->one()->waitUntilReady();
$dialog->asForm()->getLabel('Tags')->click();
$this->query('class:tags-table')->asMultifieldTable()->one()->fill($new_tags);
$dialog->query('button:Cancel')->waitUntilClickable()->one()->click();
COverlayDialogElement::ensureNotPresent();
// Check that UI returned to previous page and hash remained unchanged.
$this->page->waitUntilReady();
$this->page->assertHeader('Services');
$this->assertEquals($old_hash, CDBHelper::getHash(self::$service_sql));
}
}