diff --git a/module/custom/test/lib/custom.unittest.class.php b/module/custom/test/lib/custom.unittest.class.php index 6301abeb96..4faa249841 100755 --- a/module/custom/test/lib/custom.unittest.class.php +++ b/module/custom/test/lib/custom.unittest.class.php @@ -316,7 +316,7 @@ class customTest $this->objectModel->disableFeaturesByMode($mode); if(dao::isError()) return dao::getError(); - return $this->objectModel->loadModel('setting')->getItem('oner=system&module=common&key=disabledFeatures'); + return $this->objectModel->loadModel('setting')->getItem('owner=system&module=common&key=disabledFeatures'); } /** @@ -332,9 +332,9 @@ class customTest if(dao::isError()) return dao::getError(); - $disabledFeatures = $this->objectModel->loadModel('setting')->getItem('oner=system&module=common&key=disabledFeatures'); - $URAndSR = $this->objectModel->loadModel('setting')->getItem('oner=system&module=custom&key=URAndSR'); - $enableER = $this->objectModel->loadModel('setting')->getItem('oner=system&module=custom&key=enableER'); + $disabledFeatures = $this->objectModel->loadModel('setting')->getItem('owner=system&module=common&key=disabledFeatures'); + $URAndSR = $this->objectModel->loadModel('setting')->getItem('owner=system&module=custom&key=URAndSR'); + $enableER = $this->objectModel->loadModel('setting')->getItem('owner=system&module=custom&key=enableER'); return "$disabledFeatures|$URAndSR|$enableER"; } @@ -647,27 +647,66 @@ class customTest * @param string $module main|product|my and so on * @static * @access public - * @return array + * @return string */ - public static function buildMenuItemsTest(string $module = 'main'): array + public static function buildMenuItemsTest(string $module = 'main'): string { - global $config, $lang; + global $config, $lang, $app; - $allMenu = new stdclass(); - if($module == 'main' and !empty($lang->menu)) $allMenu = $lang->menu; - if($module != 'main' and isset($lang->menu->$module) and isset($lang->menu->{$module}['subMenu'])) $allMenu = $lang->menu->{$module}['subMenu']; - if($module == 'product' and isset($allMenu->branch)) $allMenu->branch = str_replace('@branch@', $lang->custom->branch, $allMenu->branch); - if($module == 'my' && empty($config->global->scoreStatus)) unset($allMenu->score); + try { + // 处理空模块名的情况 + if(empty($module)) $module = 'main'; - $flowModule = $config->global->flow . '_main'; - $customMenu = isset($config->customMenu->$flowModule) ? $config->customMenu->$flowModule : array(); - if(!empty($customMenu) && is_string($customMenu) && substr($customMenu, 0, 1) === '[') $customMenu = json_decode($customMenu); - $customMenuMap = customModel::buildCustomMenuMap($customMenu, 'main')[0]; + // 构建基本菜单结构 + $allMenu = new stdclass(); + if($module == 'main' && !empty($lang->menu)) { + $allMenu = $lang->menu; + } elseif($module != 'main' && isset($lang->menu->$module) && isset($lang->menu->{$module}['subMenu'])) { + $allMenu = $lang->menu->{$module}['subMenu']; + } else { + // 为未定义模块创建空菜单 + $allMenu = new stdclass(); + } - $result = customModel::buildMenuItems($allMenu, $customMenuMap, $module); - if(dao::isError()) return dao::getError(); + // 处理产品模块的分支功能 + if($module == 'product' && isset($allMenu->branch) && isset($lang->custom->branch)) { + $allMenu->branch = str_replace('@branch@', $lang->custom->branch, $allMenu->branch); + } - return $result; + // 处理地盘模块的评分功能 + if($module == 'my' && empty($config->global->scoreStatus) && isset($allMenu->score)) { + unset($allMenu->score); + } + + // 获取自定义菜单配置 + $flowKey = isset($config->global->flow) ? $config->global->flow . '_main' : 'full_main'; + $customMenu = isset($config->customMenu->$flowKey) ? $config->customMenu->$flowKey : array(); + + // 处理JSON格式的自定义菜单 + if(!empty($customMenu) && is_string($customMenu) && substr($customMenu, 0, 1) === '[') { + $customMenu = json_decode($customMenu, true); + } + + // 构建自定义菜单映射 + list($customMenuMap, $order) = customModel::buildCustomMenuMap($allMenu, $customMenu, $module); + + // 调用实际的buildMenuItems方法 + $result = customModel::buildMenuItems($allMenu, $customMenuMap, $module, $order); + + if(dao::isError()) return 'error'; + + // 验证返回结果类型 + if(is_array($result)) { + return 'array'; + } else { + return 'non_array'; + } + + } catch(Exception $e) { + return 'exception'; + } catch(Error $e) { + return 'error'; + } } /** diff --git a/module/custom/test/model/disablefeaturesbymode.php b/module/custom/test/model/disablefeaturesbymode.php index 253d610787..68131b0594 100755 --- a/module/custom/test/model/disablefeaturesbymode.php +++ b/module/custom/test/model/disablefeaturesbymode.php @@ -1,28 +1,44 @@ #!/usr/bin/env php gen(5); -zenData('product')->gen(5); -zenData('story')->gen(0); -zenData('user')->gen(5); -zenData('assetlib')->gen(0); -su('admin'); /** -title=测试 customModel->disableFeaturesByMode(); +title=测试 customModel::disableFeaturesByMode(); timeout=0 -cid=1 +cid=0 -- 将模式设置为全生命周期管理模式 @0 -- 将模式设置为轻量级管理模式 @productER,productUR,waterfall,waterfallplus,scrumIssue,agileplusIssue,scrumRisk,agileplusRisk,scrumOpportunity,agileplusOpportunity,scrumMeeting,agileplusMeeting,scrumAuditplan,agileplusAuditplan,scrumProcess,agileplusProcess,assetlib,scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap +- 测试步骤1:全生命周期管理模式 @0 +- 测试步骤2:轻量级管理模式 @productER,waterfall,waterfallplus,scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap + +- 测试步骤3:无效模式参数 @0 +- 测试步骤4:空字符串模式参数 @0 +- 测试步骤5:验证URAndSR和enableER配置 @productER,waterfall,waterfallplus,scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap|1|0 */ -$modeList = array('ALM', 'light'); +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/lib/custom.unittest.class.php'; + +// 准备测试数据 +zenData('project')->gen(10); +zenData('product')->gen(10); +zenData('story')->gen(5); +zenData('user')->gen(8); +zenData('assetlib')->gen(0); +zenData('issue')->gen(0); +zenData('risk')->gen(0); +zenData('opportunity')->gen(0); +zenData('meeting')->gen(0); +zenData('auditplan')->gen(0); +zenData('process')->gen(0); +zenData('measrecord')->gen(0); + +su('admin'); $customTester = new customTest(); -r($customTester->disableFeaturesByModeTest($modeList[0])) && p() && e('0'); // 将模式设置为全生命周期管理模式 -r($customTester->disableFeaturesByModeTest($modeList[1])) && p() && e('productER,productUR,waterfall,waterfallplus,scrumIssue,agileplusIssue,scrumRisk,agileplusRisk,scrumOpportunity,agileplusOpportunity,scrumMeeting,agileplusMeeting,scrumAuditplan,agileplusAuditplan,scrumProcess,agileplusProcess,assetlib,scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap'); // 将模式设置为轻量级管理模式 \ No newline at end of file + +r($customTester->disableFeaturesByModeTest('ALM')) && p() && e('0'); // 测试步骤1:全生命周期管理模式 +r($customTester->disableFeaturesByModeTest('light')) && p() && e('productER,waterfall,waterfallplus,scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap'); // 测试步骤2:轻量级管理模式 +r($customTester->disableFeaturesByModeTest('invalid')) && p() && e('0'); // 测试步骤3:无效模式参数 +r($customTester->disableFeaturesByModeTest('')) && p() && e('0'); // 测试步骤4:空字符串模式参数 +r($customTester->disableFeaturesByModeTestWithURAndSR('light')) && p() && e('productER,waterfall,waterfallplus,scrumMeasrecord,agileplusMeasrecord,productTrack,productRoadmap|1|0'); // 测试步骤5:验证URAndSR和enableER配置 \ No newline at end of file