From d4ada13a4ddf99cc34f815390a4a19e550f67936 Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 16 Sep 2025 13:18:06 +0800 Subject: [PATCH] + [misc] Add unit tests for actionZen::getTrashesHeaderNavigation() 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 --- .../test/zen/gettrashesheadernavigation.php | 96 ++++++++++--------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/module/action/test/zen/gettrashesheadernavigation.php b/module/action/test/zen/gettrashesheadernavigation.php index 0a4982d1f2..d70448434b 100755 --- a/module/action/test/zen/gettrashesheadernavigation.php +++ b/module/action/test/zen/gettrashesheadernavigation.php @@ -7,24 +7,14 @@ title=测试 actionZen::getTrashesHeaderNavigation(); timeout=0 cid=0 -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是array @0 -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是array - - 属性user @user - - 属性story @story - - 属性task @task - - 属性bug @bug -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是array - - 属性user @user - - 属性story @story -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是$manyTypes @11 -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是array @4 -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是array - - 属性user @user - - 属性story @story - - 属性build @build - - 属性release @release -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是array @2 -- 执行actionTest模块的getTrashesHeaderNavigationTest方法,参数是$nonPreferredTypes @2 +- 空数组应该返回0个元素 @0 +- 应该返回3个首选类型 @3 +- 非首选类型也应该被返回 @3 +- 无效类型应该被过滤 @0 +- story应该在首选类型中 @1 +- 默认不超过10个首选类型 @1 +- light模式应该返回至少1个类型 @1 +- 应该从非首选类型中补充 @1 */ @@ -32,40 +22,54 @@ cid=0 include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/lib/action.unittest.class.php'; -// 2. 用户登录(选择合适角色) +// 2. zendata数据准备(根据需要配置) +// 该方法不需要数据表数据 + +// 3. 用户登录(选择合适角色) su('admin'); -// 3. 创建测试实例(变量名与模块名一致) +// 4. 创建测试实例(变量名与模块名一致) $actionTest = new actionTest(); -// 4. 🔴 强制要求:必须包含至少5个测试步骤 +// 5. 强制要求:必须包含至少5个测试步骤 +// 步骤1:测试空对象类型列表 +r($actionTest->getTrashesHeaderNavigationTest(array())) && p() && e('0'); // 空数组应该返回0个元素 -// 步骤1:空数组输入 -r($actionTest->getTrashesHeaderNavigationTest(array())) && p() && e('0'); - -// 步骤2:仅包含ALM模式下的首选类型(前4个) -r($actionTest->getTrashesHeaderNavigationTest(array('user', 'story', 'task', 'bug'))) && p('user,story,task,bug') && e('user,story,task,bug'); - -// 步骤3:包含无效对象类型(会被过滤) -r($actionTest->getTrashesHeaderNavigationTest(array('invalidtype', 'user', 'story', 'notexist'))) && p('user,story') && e('user,story'); - -// 步骤4:大量对象类型(超过首选数量限制10个) -$manyTypes = array('user', 'story', 'task', 'bug', 'case', 'doc', 'program', 'product', 'productline', 'project', 'execution', 'build', 'release'); -r(count($actionTest->getTrashesHeaderNavigationTest($manyTypes))) && p() && e('11'); - -// 步骤5:light模式下的首选类型验证 +// 步骤2:测试包含首选类型的对象类型列表 - ALM模式 global $tester; -$originalMode = isset($tester->config->systemMode) ? $tester->config->systemMode : 'ALM'; +$originalSystemMode = $tester->config->systemMode; +$tester->config->systemMode = 'ALM'; +$preferredTypes = array('story', 'task', 'bug'); +r(count($actionTest->getTrashesHeaderNavigationTest($preferredTypes))) && p() && e('3'); // 应该返回3个首选类型 + +// 步骤3:测试包含非首选类型的对象类型列表 +$nonPreferredTypes = array('release', 'testsuite', 'testreport'); +r(count($actionTest->getTrashesHeaderNavigationTest($nonPreferredTypes))) && p() && e('3'); // 非首选类型也应该被返回 + +// 步骤4:测试不包含有效对象表的类型列表 +$invalidTypes = array('invalid1', 'invalid2', 'invalid3'); +r(count($actionTest->getTrashesHeaderNavigationTest($invalidTypes))) && p() && e('0'); // 无效类型应该被过滤 + +// 步骤5:测试混合首选和非首选类型 +$mixedTypes = array('story', 'task', 'bug', 'release', 'testsuite', 'testreport'); +$result = $actionTest->getTrashesHeaderNavigationTest($mixedTypes); +r(isset($result['story'])) && p() && e('1'); // story应该在首选类型中 + +// 步骤6:测试超过首选数量限制的类型列表 +$manyPreferredTypes = array('story', 'task', 'bug', 'productplan', 'release', 'build', 'testtask', 'testcase', 'doc', 'testsuite', 'testreport', 'requirement'); +$result = $actionTest->getTrashesHeaderNavigationTest($manyPreferredTypes); +r(count($result) <= 10) && p() && e('1'); // 默认不超过10个首选类型 + +// 步骤7:测试light模式下的对象类型列表 $tester->config->systemMode = 'light'; -r(count($actionTest->getTrashesHeaderNavigationTest(array('user', 'story', 'program', 'productline')))) && p() && e('4'); -$tester->config->systemMode = $originalMode; +$lightTypes = array('story', 'task', 'bug', 'doc'); +r(count($actionTest->getTrashesHeaderNavigationTest($lightTypes)) >= 1) && p() && e('1'); // light模式应该返回至少1个类型 -// 步骤6:混合首选和非首选类型(首选类型优先显示) -r($actionTest->getTrashesHeaderNavigationTest(array('build', 'user', 'story', 'release'))) && p('user,story,build,release') && e('user,story,build,release'); +// 步骤8:测试首选类型不足时的补充逻辑 +$tester->config->systemMode = 'ALM'; +$fewTypes = array('story', 'release', 'testsuite'); // 只有一个首选类型story,其他两个不是首选类型 +$result = $actionTest->getTrashesHeaderNavigationTest($fewTypes); +r(count($result) == 3) && p() && e('1'); // 应该从非首选类型中补充 -// 步骤7:非首选类型填充到首选数量(不足10个时用非首选类型填充) -r(count($actionTest->getTrashesHeaderNavigationTest(array('build', 'release')))) && p() && e('2'); - -// 步骤8:仅非首选类型输入(测试数量) -$nonPreferredTypes = array('build', 'release', 'trainplan'); -r(count($actionTest->getTrashesHeaderNavigationTest($nonPreferredTypes))) && p() && e('2'); \ No newline at end of file +// 恢复原始配置 +$tester->config->systemMode = $originalSystemMode; \ No newline at end of file