From 5a2bc62490b413ee2cb458cb3fc6e05f6c5e73e2 Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 9 Sep 2025 18:35:15 +0800 Subject: [PATCH] + [misc] Add unit tests for screenModel::filterMetricData() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../screen/test/lib/screen.unittest.class.php | 18 +++++ module/screen/test/model/filtermetricdata.php | 65 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100755 module/screen/test/model/filtermetricdata.php diff --git a/module/screen/test/lib/screen.unittest.class.php b/module/screen/test/lib/screen.unittest.class.php index 5ccb6ce5fc..f862b7ce73 100755 --- a/module/screen/test/lib/screen.unittest.class.php +++ b/module/screen/test/lib/screen.unittest.class.php @@ -24,6 +24,24 @@ class screenTest return $this->objectModel->getList($dimensionID); } + /** + * Test filterMetricData method. + * + * @param array $data + * @param string $dateType + * @param bool $isObjectMetric + * @param array $filters + * @access public + * @return array + */ + public function filterMetricDataTest($data, $dateType, $isObjectMetric, $filters = array()) + { + $result = $this->objectModel->filterMetricData($data, $dateType, $isObjectMetric, $filters); + if(dao::isError()) return dao::getError(); + + return $result; + } + /** * 测试getByID。 * Test getByID. diff --git a/module/screen/test/model/filtermetricdata.php b/module/screen/test/model/filtermetricdata.php new file mode 100755 index 0000000000..d5c51b8249 --- /dev/null +++ b/module/screen/test/model/filtermetricdata.php @@ -0,0 +1,65 @@ +#!/usr/bin/env php + 'project1', '2024-01' => 10, '2024-02' => 20, '2024-03' => 30), + array('scope' => 'project2', '2024-01' => 15, '2024-02' => 25, '2024-03' => 35), + array('scope' => 'project3', '2024-01' => 12, '2024-02' => 22, '2024-03' => 32) +); + +$nonObjectMetricData = array( + array('date' => '2024-01-01', 'value' => 100), + array('date' => '2024-02-01', 'value' => 200), + array('date' => '2024-03-01', 'value' => 300), + array('date' => '2024-04-01', 'value' => 400) +); + +// 过滤器对象 +$scopeFilter = new stdClass(); +$scopeFilter->type = 'project'; +$scopeFilter->value = array('project1', 'project2'); + +$beginFilter = new stdClass(); +$beginFilter->month = '2024-01'; + +$endFilter = new stdClass(); +$endFilter->month = '2024-02'; + +// 4. 🔴 强制要求:必须包含至少5个测试步骤 +r(count($screenTest->filterMetricDataTest($objectMetricData, 'month', true, array()))) && p() && e('3'); // 步骤1:空过滤器,返回原始数据数量 + +r($screenTest->filterMetricDataTest($objectMetricData, 'month', true, array('begin' => $beginFilter, 'end' => $endFilter))) && p('0:scope') && e('project1'); // 步骤2:时间范围过滤,检查第一个元素的scope字段 + +r($screenTest->filterMetricDataTest($objectMetricData, 'month', true, array('begin' => $beginFilter, 'end' => $endFilter))) && p('0:2024-01') && e('10'); // 步骤3:时间范围过滤,检查第一个元素的2024-01字段 + +r($screenTest->filterMetricDataTest($nonObjectMetricData, 'month', false, array('begin' => $beginFilter, 'end' => $endFilter))) && p('0:date') && e('2024-01-01'); // 步骤4:非对象度量时间过滤,检查第一个元素的date字段 + +r(count($screenTest->filterMetricDataTest(array(), 'month', true, array('begin' => $beginFilter, 'end' => $endFilter)))) && p() && e('0'); // 步骤5:边界值测试 - 空数据 + +r(count($screenTest->filterMetricDataTest($objectMetricData, 'month', true, array('begin' => $beginFilter, 'end' => $endFilter)))) && p() && e('3'); // 步骤6:时间过滤后数量验证 \ No newline at end of file