Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ui/tests/selenium/sla/testPageServicesSlaReport.php')
-rw-r--r--ui/tests/selenium/sla/testPageServicesSlaReport.php1458
1 files changed, 1458 insertions, 0 deletions
diff --git a/ui/tests/selenium/sla/testPageServicesSlaReport.php b/ui/tests/selenium/sla/testPageServicesSlaReport.php
new file mode 100644
index 00000000000..afebc5d8b8d
--- /dev/null
+++ b/ui/tests/selenium/sla/testPageServicesSlaReport.php
@@ -0,0 +1,1458 @@
+<?php
+/*
+** Zabbix
+** Copyright (C) 2001-2022 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));
+ }
+ }
+}