From 07c64885271b3eec9b67b9c2749bc1873379bd34 Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 9 Sep 2025 18:30:21 +0800 Subject: [PATCH] + [misc] Add unit tests for screenModel::getMetricTableOption() 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 ++++ .../test/model/getmetrictableoption.php | 84 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100755 module/screen/test/model/getmetrictableoption.php diff --git a/module/screen/test/lib/screen.unittest.class.php b/module/screen/test/lib/screen.unittest.class.php index dbdd4a0757..5ccb6ce5fc 100755 --- a/module/screen/test/lib/screen.unittest.class.php +++ b/module/screen/test/lib/screen.unittest.class.php @@ -1037,4 +1037,22 @@ class screenTest return $result; } + /** + * Test getMetricTableOption method. + * + * @param mixed $metric + * @param mixed $resultHeader + * @param mixed $resultData + * @param mixed $component + * @access public + * @return mixed + */ + public function getMetricTableOptionTest($metric, $resultHeader, $resultData, $component = null) + { + $result = $this->objectModel->getMetricTableOption($metric, $resultHeader, $resultData, $component); + if(dao::isError()) return dao::getError(); + + return $result; + } + } diff --git a/module/screen/test/model/getmetrictableoption.php b/module/screen/test/model/getmetrictableoption.php new file mode 100755 index 0000000000..5d8f738641 --- /dev/null +++ b/module/screen/test/model/getmetrictableoption.php @@ -0,0 +1,84 @@ +#!/usr/bin/env php +headers @1 +- 执行$result->data @1 +- 执行$result属性scope @product +- 执行$result属性existingProperty @test_value +- 执行$result属性scope @task + +*/ + +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/lib/screen.unittest.class.php'; + +su('admin'); + +$screenTest = new screenTest(); + +// 创建测试用的metric对象 +$metric = new stdClass(); +$metric->name = 'Test Metric'; +$metric->id = 1; +$metric->scope = 'product'; +$metric->dateType = 'month'; + +// 简化的Mock类,避免复杂的业务逻辑 +class SimpleMockMetric { + public function isObjectMetric($header) { + return true; + } + + public function getGroupTable($header, $data, $dateType, $flag) { + $groupHeader = 'Test Header'; + $groupData = array(array('Item1', 100), array('Item2', 200)); + return array($groupHeader, $groupData); + } +} + +// 直接修改screenModel的getMetricHeaders方法避免复杂处理 +class TestScreenModel extends screenModel { + public function getMetricHeaders($resultHeader, $dateType) { + return array(array('name' => 'header1'), array('name' => 'header2')); + } +} + +// 使用简化的测试模型 +$screenTest->objectModel = new TestScreenModel(); +$screenTest->objectModel->metric = new SimpleMockMetric(); + +// 测试数据 +$resultHeader = array(array('name' => 'test')); +$resultData = array(array('data1', 100)); + +// 步骤1:测试基本功能 - headers属性存在 +$result = $screenTest->getMetricTableOptionTest($metric, $resultHeader, $resultData); +r(isset($result->headers)) && p() && e('1'); + +// 步骤2:测试基本功能 - data属性存在 +$result = $screenTest->getMetricTableOptionTest($metric, $resultHeader, $resultData); +r(isset($result->data)) && p() && e('1'); + +// 步骤3:测试基本功能 - scope属性 +$result = $screenTest->getMetricTableOptionTest($metric, $resultHeader, $resultData); +r($result) && p('scope') && e('product'); + +// 步骤4:测试带component参数 +$component = new stdClass(); +$component->option = new stdClass(); +$component->option->tableOption = new stdClass(); +$component->option->tableOption->existingProperty = 'test_value'; + +$result = $screenTest->getMetricTableOptionTest($metric, $resultHeader, $resultData, $component); +r($result) && p('existingProperty') && e('test_value'); + +// 步骤5:测试scope字段传递 +$metric->scope = 'task'; +$result = $screenTest->getMetricTableOptionTest($metric, $resultHeader, $resultData); +r($result) && p('scope') && e('task'); \ No newline at end of file