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

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__).'/../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));
}
}
}