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/sla/testPageServicesSlaReport.php

1459 lines
31 KiB

1 year ago
<?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__).'/../common/testSlaReport.php';
/**
* @backup profiles
*
* @dataSource Services, Sla
*
* @onBefore getDateTimeData
*/
class testPageServicesSlaReport extends testSlaReport {
public function testPageServicesSlaReport_GeneralLayout() {
$this->page->login()->open('zabbix.php?action=slareport.list');
$this->page->assertHeader('SLA report');
$this->page->assertTitle('SLA report');
// Check status of buttons on the SLA report page.
foreach ($this->query('button', ['Apply', 'Reset'])->all() as $button) {
$this->assertTrue($button->isClickable());
}
// Check displaying and hiding the filter.
$filter_form = $this->query('name:zbx_filter')->asForm()->one();
$filter_tab = $this->query('xpath://a[contains(text(), "Filter")]')->one();
$filter = $filter_form->query('id:tab_0')->one();
$this->assertTrue($filter->isDisplayed());
$filter_tab->click();
$this->assertFalse($filter->isDisplayed());
$filter_tab->click();
$this->assertTrue($filter->isDisplayed());
// Check the list of available SLAs (disabled SLAs should not be present).
$sla_data = [
'field' => 'SLA',
'headers' => ['Name'],
'column_data' => [
'Name' => [
'SLA Annual',
'SLA Daily',
'SLA Monthly',
'SLA Quarterly',
'SLA Weekly',
'SLA with schedule and downtime',
'SLA для удаления - 頑張って', 'Update SLA'
]
],
'table_selector' => 'xpath://form[@id="sla"]/table',
'buttons' => ['Cancel']
];
$service_data = [
'field' => 'Service',
'headers' => ['Name', 'Tags', 'Problem tags'],
'table_selector' => 'xpath://form[@name="services_form"]/table',
'buttons' => ['Filter', 'Reset', 'Cancel'],
'check_row' => [
'Name' => 'Simple actions service',
'Tags' => 'problem: falsetest: test789',
'Problem tags' => 'problem: true'
]
];
foreach ([$sla_data, $service_data] as $dialog_data) {
$this->checkDialogContents($dialog_data);
}
foreach (['From', 'To'] as $field_label) {
$field = $filter_form->getField($field_label)->query('xpath:./input')->one();
$this->assertEquals(10, $field->getAttribute('maxlength'));
$this->assertEquals('YYYY-MM-DD', $field->getAttribute('placeholder'));
}
$this->assertEquals('Select SLA to display SLA report.', $this->query('class:list-table')->one()->getText());
}
/**
* @dataProvider getSlaDataWithService
*/
public function testPageServicesSlaReport_LayoutWithService($data) {
$this->openSlaReport($data['fields']);
$this->checkLayoutWithService($data);
}
/**
* @dataProvider getSlaDataWithoutService
*/
public function testPageServicesSlaReport_LayoutWithoutService($data) {
$this->openSlaReport($data['fields']);
$this->checkLayoutWithoutService($data);
}
public function testPageServicesSlaReport_Sort() {
$data = [
'fields' => ['SLA' => 'SLA Monthly'],
'expected' => ['Service with multiple service tags', 'Simple actions service']
];
$this->openSlaReport($data['fields']);
$table = $this->query('class:list-table')->asTable()->one();
$column_header = $table->query('xpath:.//th/a[text()="Service"]')->one();
// Check initial sorting of services.
$this->assertTableDataColumn($data['expected'], 'Service');
// Check updated service sorting.
foreach (['desc', 'asc'] as $sort) {
$column_header->click();
$this->assertTableDataColumn(($sort === 'asc') ? $data['expected'] : array_reverse($data['expected']), 'Service');
}
}
public function getSlaDataWithCustomDates() {
return [
// Daily with custom dates.
[
[
'fields' => [
'SLA' => 'SLA Daily',
'Service' => 'Service with problem',
'From' => '2020-02-28',
'To' => '2020-03-02'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2020-03-02',
'2020-03-01',
'2020-02-29',
'2020-02-28'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'Service' => 'Service with problem',
'From' => '2021-06-29'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-07-18',
'2021-07-17',
'2021-07-16',
'2021-07-15',
'2021-07-14',
'2021-07-13',
'2021-07-12',
'2021-07-11',
'2021-07-10',
'2021-07-09',
'2021-07-08',
'2021-07-07',
'2021-07-06',
'2021-07-05',
'2021-07-04',
'2021-07-03',
'2021-07-02',
'2021-07-01',
'2021-06-30',
'2021-06-29'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'Service' => 'Service with problem',
'To' => '2021-06-29'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-06-29',
'2021-06-28',
'2021-06-27',
'2021-06-26',
'2021-06-25',
'2021-06-24',
'2021-06-23',
'2021-06-22',
'2021-06-21',
'2021-06-20',
'2021-06-19',
'2021-06-18',
'2021-06-17',
'2021-06-16',
'2021-06-15',
'2021-06-14',
'2021-06-13',
'2021-06-12',
'2021-06-11',
'2021-06-10'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'Service' => 'Service with problem',
'To' => '2021-05-06'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-05-06',
'2021-05-05',
'2021-05-04',
'2021-05-03',
'2021-05-02',
'2021-05-01'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'Service' => 'Service with problem',
'From' => 'yesterday'
],
'reporting_period' => 'Daily'
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'From' => '2021-06-29',
'To' => '2021-07-05'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-06-29',
'2021-06-30',
'2021-07-01',
'2021-07-02',
'2021-07-03',
'2021-07-04',
'2021-07-05'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'From' => '2021-12-20'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-12-20',
'2021-12-21',
'2021-12-22',
'2021-12-23',
'2021-12-24',
'2021-12-25',
'2021-12-26',
'2021-12-27',
'2021-12-28',
'2021-12-29',
'2021-12-30',
'2021-12-31',
'2022-01-01',
'2022-01-02',
'2022-01-03',
'2022-01-04',
'2022-01-05',
'2022-01-06',
'2022-01-07',
'2022-01-08'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'To' => '2022-01-08'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-12-20',
'2021-12-21',
'2021-12-22',
'2021-12-23',
'2021-12-24',
'2021-12-25',
'2021-12-26',
'2021-12-27',
'2021-12-28',
'2021-12-29',
'2021-12-30',
'2021-12-31',
'2022-01-01',
'2022-01-02',
'2022-01-03',
'2022-01-04',
'2022-01-05',
'2022-01-06',
'2022-01-07',
'2022-01-08'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'To' => '2021-05-06'
],
'reporting_period' => 'Daily',
'expected_periods' => [
'2021-05-01',
'2021-05-02',
'2021-05-03',
'2021-05-04',
'2021-05-05',
'2021-05-06'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Daily',
'From' => 'yesterday'
],
'reporting_period' => 'Daily'
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'Service' => 'Simple actions service',
'From' => '2021-09-25',
'To' => '2021-10-04'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2021-10-03 10-09',
'2021-09-26 10-02',
'2021-09-19 09-25'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'Service' => 'Simple actions service',
'From' => '2021-09-25'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2022-01-30 02-05',
'2022-01-23 01-29',
'2022-01-16 01-22',
'2022-01-09 01-15',
'2022-01-02 01-08',
'2021-12-26 01-01',
'2021-12-19 12-25',
'2021-12-12 12-18',
'2021-12-05 12-11',
'2021-11-28 12-04',
'2021-11-21 11-27',
'2021-11-14 11-20',
'2021-11-07 11-13',
'2021-10-31 11-06',
'2021-10-24 10-30',
'2021-10-17 10-23',
'2021-10-10 10-16',
'2021-10-03 10-09',
'2021-09-26 10-02',
'2021-09-19 09-25'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'Service' => 'Simple actions service',
'To' => '2022-02-02'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2022-01-30 02-05',
'2022-01-23 01-29',
'2022-01-16 01-22',
'2022-01-09 01-15',
'2022-01-02 01-08',
'2021-12-26 01-01',
'2021-12-19 12-25',
'2021-12-12 12-18',
'2021-12-05 12-11',
'2021-11-28 12-04',
'2021-11-21 11-27',
'2021-11-14 11-20',
'2021-11-07 11-13',
'2021-10-31 11-06',
'2021-10-24 10-30',
'2021-10-17 10-23',
'2021-10-10 10-16',
'2021-10-03 10-09',
'2021-09-26 10-02',
'2021-09-19 09-25'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'Service' => 'Simple actions service',
'To' => '2021-06-01'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2021-05-30 06-05',
'2021-05-23 05-29',
'2021-05-16 05-22',
'2021-05-09 05-15',
'2021-05-02 05-08',
'2021-04-25 05-01'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'Service' => 'Simple actions service',
'From' => 'today - 2 weeks'
],
'reporting_period' => 'Weekly'
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'From' => '2021-12-29',
'To' => '2022-01-09'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2021-12-26 01-01',
'2022-01-02 01-08',
'2022-01-09 01-15'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'From' => '2021-12-29'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2021-12-26 01-01',
'2022-01-02 01-08',
'2022-01-09 01-15',
'2022-01-16 01-22',
'2022-01-23 01-29',
'2022-01-30 02-05',
'2022-02-06 02-12',
'2022-02-13 02-19',
'2022-02-20 02-26',
'2022-02-27 03-05',
'2022-03-06 03-12',
'2022-03-13 03-19',
'2022-03-20 03-26',
'2022-03-27 04-02',
'2022-04-03 04-09',
'2022-04-10 04-16',
'2022-04-17 04-23',
'2022-04-24 04-30',
'2022-05-01 05-07',
'2022-05-08 05-14'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'To' => '2022-05-13'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2021-12-26 01-01',
'2022-01-02 01-08',
'2022-01-09 01-15',
'2022-01-16 01-22',
'2022-01-23 01-29',
'2022-01-30 02-05',
'2022-02-06 02-12',
'2022-02-13 02-19',
'2022-02-20 02-26',
'2022-02-27 03-05',
'2022-03-06 03-12',
'2022-03-13 03-19',
'2022-03-20 03-26',
'2022-03-27 04-02',
'2022-04-03 04-09',
'2022-04-10 04-16',
'2022-04-17 04-23',
'2022-04-24 04-30',
'2022-05-01 05-07',
'2022-05-08 05-14'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'To' => '2021-06-01'
],
'reporting_period' => 'Weekly',
'expected_periods' => [
'2021-04-25 05-01',
'2021-05-02 05-08',
'2021-05-09 05-15',
'2021-05-16 05-22',
'2021-05-23 05-29',
'2021-05-30 06-05'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Weekly',
'From' => 'today - 3 weeks'
],
'reporting_period' => 'Weekly'
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'Service' => 'Simple actions service',
'From' => '2020-01-01',
'To' => '2020-02-29'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2020-02',
'2020-01'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'Service' => 'Simple actions service',
'From' => '2020-01-01'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2021-08',
'2021-07',
'2021-06',
'2021-05',
'2021-04',
'2021-03',
'2021-02',
'2021-01',
'2020-12',
'2020-11',
'2020-10',
'2020-09',
'2020-08',
'2020-07',
'2020-06',
'2020-05',
'2020-04',
'2020-03',
'2020-02',
'2020-01'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'Service' => 'Simple actions service',
'To' => '2023-02-15'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2023-02',
'2023-01',
'2022-12',
'2022-11',
'2022-10',
'2022-09',
'2022-08',
'2022-07',
'2022-06',
'2022-05',
'2022-04',
'2022-03',
'2022-02',
'2022-01',
'2021-12',
'2021-11',
'2021-10',
'2021-09',
'2021-08',
'2021-07'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'Service' => 'Simple actions service',
'To' => '2021-08-01'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2021-08',
'2021-07',
'2021-06',
'2021-05'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'Service' => 'Simple actions service',
'From' => 'first day of this month - 2 months'
],
'reporting_period' => 'Monthly'
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'From' => '2020-01-01',
'To' => '2020-02-29'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2020-01',
'2020-02'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'From' => '2020-01-01'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2020-01',
'2020-02',
'2020-03',
'2020-04',
'2020-05',
'2020-06',
'2020-07',
'2020-08',
'2020-09',
'2020-10',
'2020-11',
'2020-12',
'2021-01',
'2021-02',
'2021-03',
'2021-04',
'2021-05',
'2021-06',
'2021-07',
'2021-08'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'To' => '2023-02-15'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2021-07',
'2021-08',
'2021-09',
'2021-10',
'2021-11',
'2021-12',
'2022-01',
'2022-02',
'2022-03',
'2022-04',
'2022-05',
'2022-06',
'2022-07',
'2022-08',
'2022-09',
'2022-10',
'2022-11',
'2022-12',
'2023-01',
'2023-02'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'To' => '2021-08-01'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2021-05',
'2021-06',
'2021-07',
'2021-08'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'From' => 'first day of this month - 2 months'
],
'reporting_period' => 'Monthly'
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'Service' => 'Simple actions service',
'From' => '2021-05-01',
'To' => '2021-10-01'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2021-10 12',
'2021-07 09',
'2021-04 06'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'Service' => 'Simple actions service',
'From' => '2017-12-03'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2022-07 09',
'2022-04 06',
'2022-01 03',
'2021-10 12',
'2021-07 09',
'2021-04 06',
'2021-01 03',
'2020-10 12',
'2020-07 09',
'2020-04 06',
'2020-01 03',
'2019-10 12',
'2019-07 09',
'2019-04 06',
'2019-01 03',
'2018-10 12',
'2018-07 09',
'2018-04 06',
'2018-01 03',
'2017-10 12'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'Service' => 'Simple actions service',
'To' => '2026-05-01'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2026-04 06',
'2026-01 03',
'2025-10 12',
'2025-07 09',
'2025-04 06',
'2025-01 03',
'2024-10 12',
'2024-07 09',
'2024-04 06',
'2024-01 03',
'2023-10 12',
'2023-07 09',
'2023-04 06',
'2023-01 03',
'2022-10 12',
'2022-07 09',
'2022-04 06',
'2022-01 03',
'2021-10 12',
'2021-07 09'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'Service' => 'Simple actions service',
'To' => '2021-08-01'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2021-07 09',
'2021-04 06'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'Service' => 'Simple actions service',
'From' => 'first day of this month - 6 months'
],
'reporting_period' => 'Quarterly'
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'From' => '2021-05-01',
'To' => '2021-10-01'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2021-04 06',
'2021-07 09',
'2021-10 12'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'From' => '2017-12-03'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2017-10 12',
'2018-01 03',
'2018-04 06',
'2018-07 09',
'2018-10 12',
'2019-01 03',
'2019-04 06',
'2019-07 09',
'2019-10 12',
'2020-01 03',
'2020-04 06',
'2020-07 09',
'2020-10 12',
'2021-01 03',
'2021-04 06',
'2021-07 09',
'2021-10 12',
'2022-01 03',
'2022-04 06',
'2022-07 09'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'To' => '2026-05-01'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2021-07 09',
'2021-10 12',
'2022-01 03',
'2022-04 06',
'2022-07 09',
'2022-10 12',
'2023-01 03',
'2023-04 06',
'2023-07 09',
'2023-10 12',
'2024-01 03',
'2024-04 06',
'2024-07 09',
'2024-10 12',
'2025-01 03',
'2025-04 06',
'2025-07 09',
'2025-10 12',
'2026-01 03',
'2026-04 06'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'To' => '2021-08-01'
],
'reporting_period' => 'Quarterly',
'expected_periods' => [
'2021-04 06',
'2021-07 09'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Quarterly',
'From' => 'first day of this month - 6 months'
],
'reporting_period' => 'Quarterly'
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'Service' => 'Service with problem',
'From' => '2020-05-01',
'To' => '2025-12-31'
],
'reporting_period' => 'Annually',
'expected_periods' => [
'2025',
'2024',
'2023',
'2022',
'2021',
'2020'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'Service' => 'Service with problem',
'From' => '2002-12-03'
],
'reporting_period' => 'Annually',
'expected_periods' => [
'2021',
'2020',
'2019',
'2018',
'2017',
'2016',
'2015',
'2014',
'2013',
'2012',
'2011',
'2010',
'2009',
'2008',
'2007',
'2006',
'2005',
'2004',
'2003',
'2002'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'Service' => 'Service with problem',
'To' => '2037-01-01'
],
'reporting_period' => 'Annually',
'expected_periods' => [
'2037',
'2036',
'2035',
'2034',
'2033',
'2032',
'2031',
'2030',
'2029',
'2028',
'2027',
'2026',
'2025',
'2024',
'2023',
'2022',
'2021'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'Service' => 'Service with problem',
'From' => 'today - 13 months'
],
'reporting_period' => 'Annually'
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'From' => '2019-05-01',
'To' => '2024-10-01'
],
'reporting_period' => 'Annually',
'expected_periods' => [
'2019',
'2020',
'2021',
'2022',
'2023',
'2024'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'From' => '2002-12-03'
],
'reporting_period' => 'Annually',
'expected_periods' => [
'2002',
'2003',
'2004',
'2005',
'2006',
'2007',
'2008',
'2009',
'2010',
'2011',
'2012',
'2013',
'2014',
'2015',
'2016',
'2017',
'2018',
'2019',
'2020',
'2021'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'To' => '2037-02-01'
],
'reporting_period' => 'Annually',
'expected_periods' => [
'2021',
'2022',
'2023',
'2024',
'2025',
'2026',
'2027',
'2028',
'2029',
'2030',
'2031',
'2032',
'2033',
'2034',
'2035',
'2036',
'2037'
]
]
],
[
[
'fields' => [
'SLA' => 'SLA Annual',
'From' => 'today - 13 months'
],
'reporting_period' => 'Annually'
]
],
// Using non-complete date in From and To fields.
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'From' => '2021',
'To' => '2021'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2021-01',
'2021-02',
'2021-03',
'2021-04',
'2021-05',
'2021-06',
'2021-07',
'2021-08',
'2021-09',
'2021-10',
'2021-11',
'2021-12'
]
]
],
// Returning more than 20 periods with service.
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'Service' => 'Simple actions service',
'From' => '2020-01-01',
'To' => '2022-12-10'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2022-12',
'2022-11',
'2022-10',
'2022-09',
'2022-08',
'2022-07',
'2022-06',
'2022-05',
'2022-04',
'2022-03',
'2022-02',
'2022-01',
'2021-12',
'2021-11',
'2021-10',
'2021-09',
'2021-08',
'2021-07',
'2021-06',
'2021-05',
'2021-04',
'2021-03',
'2021-02',
'2021-01',
'2020-12',
'2020-11',
'2020-10',
'2020-09',
'2020-08',
'2020-07',
'2020-06',
'2020-05',
'2020-04',
'2020-03',
'2020-02',
'2020-01'
]
]
],
// Returning more than 20 periods without service.
[
[
'fields' => [
'SLA' => 'SLA Monthly',
'From' => '2020-01-01',
'To' => '2022-12-10'
],
'reporting_period' => 'Monthly',
'expected_periods' => [
'2020-01',
'2020-02',
'2020-03',
'2020-04',
'2020-05',
'2020-06',
'2020-07',
'2020-08',
'2020-09',
'2020-10',
'2020-11',
'2020-12',
'2021-01',
'2021-02',
'2021-03',
'2021-04',
'2021-05',
'2021-06',
'2021-07',
'2021-08',
'2021-09',
'2021-10',
'2021-11',
'2021-12',
'2022-01',
'2022-02',
'2022-03',
'2022-04',
'2022-05',
'2022-06',
'2022-07',
'2022-08',
'2022-09',
'2022-10',
'2022-11',
'2022-12'
]
]
],
// "To" value chronologically before "From" value.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '2022-06-25',
'To' => '2022-06-23'
],
'error' => '"From" date must be less than "To" date.'
]
],
// Non existing date in "From" and "To" fields.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '2022-06-32',
'To' => '2022-07-32'
],
'error' => [
'Incorrect value for field "From": a date is expected.',
'Incorrect value for field "To": a date is expected.'
]
]
],
// Trailing and leading spaces in "From" and "To" fields.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '2022-06 ',
'To' => ' 2022-06-13'
],
'error' => [
'Incorrect value for field "From": a date is expected.',
'Incorrect value for field "To": a date is expected.'
]
]
],
// Wrong value format in "From" and "To" fields.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '13-12-2022',
'To' => '12/31/2022'
],
'error' => [
'Incorrect value for field "From": a date is expected.',
'Incorrect value for field "To": a date is expected.'
]
]
],
// Unix time in "From" and "To" fields.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '1641340800',
'To' => '1641340801'
],
'error' => [
'Incorrect value for field "From": a date is expected.',
'Incorrect value for field "To": a date is expected.'
]
]
],
// Fields "From" and "To" too far in the past.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '1969-12-30',
'To' => '1969-12-31'
],
'error' => [
'Incorrect value for field "From": a date is expected.',
'Incorrect value for field "To": a date is expected.'
]
]
],
// Fields "From" and "To" too far in the future.
[
[
'expected' => TEST_BAD,
'fields' => [
'SLA' => 'SLA Daily',
'From' => '2039-01-01',
'To' => '2039-01-02'
],
'error' => [
'Incorrect value for field "From": a date is expected.',
'Incorrect value for field "To": a date is expected.'
]
]
]
];
}
/**
* @dataProvider getSlaDataWithCustomDates
*/
public function testPageServicesSlaReport_CheckCustomPeriods($data) {
// Construct the expected result array if such is not present in the data provider.
if (!array_key_exists('expected_periods', $data) && !array_key_exists('error', $data)) {
$data['expected_periods'] = $this->getPeriodDataWithCustomDates($data);
$data['fields']['From'] = date('Y-m-d', strtotime($data['fields']['From']));
}
$this->openSlaReport($data['fields']);
$this->checkCustomPeriods($data);
}
/**
* Open the SLA report with configuration specified in the data provider.
*
* @param array $filter_data SLA report parameters.
*/
public function openSlaReport($filter_data) {
$this->page->login()->open('zabbix.php?action=slareport.list');
$filter_form = $this->query('name:zbx_filter')->asForm()->one();
// Usage of Select mode is required as in Type mode a service that contains the name of required service is chosen.
CMultiselectElement::setDefaultFillMode(CMultiselectElement::MODE_SELECT);
$filter_form->query('button:Reset')->one()->click();
$filter_form->fill($filter_data);
$filter_form->submit();
CMultiselectElement::setDefaultFillMode(CMultiselectElement::MODE_TYPE);
}
/**
* Retrieve array with reference reporting periods modified according to From field (all cases with To field
* are covered by data provider).
*
* @param array $data data provider
* @return array
*/
public function getPeriodDataWithCustomDates($data) {
foreach (self::$reporting_periods[$data['reporting_period']] as $period) {
// Write all periods that end after the value in From field into the reference array.
if ($period['end'] >= strtotime($data['fields']['From'])) {
$expected_periods[] = $period['value'];
}
else {
break;
}
}
if (!array_key_exists('Service', $data['fields'])) {
// If SLA report is shown without selecting a service, then periods are displayed in reverse order.
$expected_periods = array_reverse($expected_periods);
}
return $expected_periods;
}
/**
* Check reporting periods values in SLA report with custom dates.
*
* @param array $data data provider
*/
public function checkCustomPeriods($data) {
if (CTestArrayHelper::get($data, 'expected', TEST_GOOD) === TEST_BAD) {
$this->assertMessage(TEST_BAD, null, $data['error']);
return;
}
$table = $this->query('class:list-table')->asTable()->one();
if (array_key_exists('Service', $data['fields'])) {
$this->assertTableDataColumn($data['expected_periods'], self::$period_headers[$data['reporting_period']]);
}
else {
$headers = $table->getHeadersText();
unset($headers[0], $headers[1]);
$this->assertEquals($data['expected_periods'], array_values($headers));
}
}
}