* [misc] Fix unit tests for customModel::setMenuByConfig() method
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -225,7 +225,7 @@ class customModel extends model
|
||||
$group = 0;
|
||||
foreach($menu as $item)
|
||||
{
|
||||
if($module == 'main' && isset($dividerOrders[$item->name]) && $dividerOrders[$item->name] > $group)
|
||||
if($module == 'main' && isset($item->name) && isset($dividerOrders[$item->name]) && $dividerOrders[$item->name] > $group)
|
||||
{
|
||||
$menu[$item->order]->divider = $isFirst ? false : true;
|
||||
$group = $dividerOrders[$item->name];
|
||||
@@ -322,6 +322,7 @@ class customModel extends model
|
||||
$subMenu = array();
|
||||
$label = $link;
|
||||
$hasPriv = true;
|
||||
$method = '';
|
||||
if(strpos($link, '|') !== false)
|
||||
{
|
||||
$link = explode('|', $link);
|
||||
|
||||
@@ -741,55 +741,39 @@ class customTest
|
||||
/**
|
||||
* Test setMenuByConfig method.
|
||||
*
|
||||
* @param string $module main|product|my and so on
|
||||
* @param object|array $allMenu
|
||||
* @param string|array $customMenu
|
||||
* @param string $module
|
||||
* @static
|
||||
* @access public
|
||||
* @return string|array
|
||||
* @return string
|
||||
*/
|
||||
public static function setMenuByConfigTest(string $module = 'main'): string|array
|
||||
public static function setMenuByConfigTest(object|array $allMenu, string|array $customMenu, string $module = 'main'): string
|
||||
{
|
||||
global $config, $lang;
|
||||
global $lang, $app;
|
||||
|
||||
try {
|
||||
// 初始化菜单对象
|
||||
$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();
|
||||
$allMenu->index = array('link' => '/', 'text' => '首页');
|
||||
$allMenu->dashboard = array('link' => '/dashboard', 'text' => '仪表盘');
|
||||
// 确保全局语言对象存在
|
||||
if(!isset($lang)) {
|
||||
$lang = new stdclass();
|
||||
}
|
||||
|
||||
// 处理产品模块的分支菜单
|
||||
if($module == 'product' && isset($allMenu->branch)) {
|
||||
$allMenu->branch = str_replace('@branch@', isset($lang->custom->branch) ? $lang->custom->branch : '分支', $allMenu->branch);
|
||||
// 设置应用tab,如果不存在
|
||||
if(!isset($app->tab)) {
|
||||
$app = new stdclass();
|
||||
$app->tab = $module;
|
||||
}
|
||||
|
||||
// 处理地盘模块的评分功能
|
||||
if($module == 'my' && empty($config->global->scoreStatus)) {
|
||||
if(isset($allMenu->score)) unset($allMenu->score);
|
||||
// 初始化语言菜单顺序,避免未定义变量错误
|
||||
if(!isset($lang->{$app->tab})) {
|
||||
$lang->{$app->tab} = new stdclass();
|
||||
$lang->{$app->tab}->menuOrder = array();
|
||||
}
|
||||
|
||||
// 获取自定义菜单配置
|
||||
$flowModule = isset($config->global->flow) ? $config->global->flow . '_main' : 'full_main';
|
||||
$customMenu = isset($config->customMenu->$flowModule) ? $config->customMenu->$flowModule : 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);
|
||||
|
||||
// 调用实际的setMenuByConfig方法
|
||||
$result = customModel::setMenuByConfig($allMenu, $customMenuMap, $module);
|
||||
$result = customModel::setMenuByConfig($allMenu, $customMenu, $module);
|
||||
|
||||
if(dao::isError()) return 'error';
|
||||
|
||||
// 返回结果类型用于测试验证
|
||||
if(is_array($result)) {
|
||||
|
||||
@@ -7,31 +7,29 @@ title=测试 customModel::setMenuByConfig();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 测试步骤1:设置主菜单带有效数据 @array
|
||||
- 测试步骤2:设置产品菜单带分支数据 @array
|
||||
- 测试步骤3:设置地盘菜单排除评分功能 @array
|
||||
- 测试步骤4:设置无效模块菜单 @array
|
||||
- 测试步骤5:设置项目菜单 @array
|
||||
- 测试步骤6:设置执行菜单 @array
|
||||
- 测试步骤7:设置测试菜单 @array
|
||||
- 测试步骤1:使用标准对象菜单和空自定义菜单测试主模块 @array
|
||||
- 测试步骤2:使用数组菜单和JSON字符串自定义菜单测试 @array
|
||||
- 测试步骤3:测试空菜单对象的情况 @array
|
||||
- 测试步骤4:测试带有分割线配置的菜单 @array
|
||||
- 测试步骤5:测试无效模块菜单处理 @array
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/custom.unittest.class.php';
|
||||
|
||||
ob_start();
|
||||
zenData('lang')->loadYaml('lang')->gen(15);
|
||||
zenData('user')->gen(5);
|
||||
ob_end_clean();
|
||||
su('admin');
|
||||
|
||||
$customTester = new customTest();
|
||||
|
||||
r($customTester->setMenuByConfigTest('main')) && p() && e('array'); // 测试步骤1:设置主菜单带有效数据
|
||||
r($customTester->setMenuByConfigTest('product')) && p() && e('array'); // 测试步骤2:设置产品菜单带分支数据
|
||||
r($customTester->setMenuByConfigTest('my')) && p() && e('array'); // 测试步骤3:设置地盘菜单排除评分功能
|
||||
r($customTester->setMenuByConfigTest('invalid')) && p() && e('array'); // 测试步骤4:设置无效模块菜单
|
||||
r($customTester->setMenuByConfigTest('project')) && p() && e('array'); // 测试步骤5:设置项目菜单
|
||||
r($customTester->setMenuByConfigTest('execution')) && p() && e('array'); // 测试步骤6:设置执行菜单
|
||||
r($customTester->setMenuByConfigTest('qa')) && p() && e('array'); // 测试步骤7:设置测试菜单
|
||||
r($customTester->setMenuByConfigTest((object)array('home' => 'Home|index|index', 'project' => 'Project|project|index'), array(), 'main')) && p() && e('array'); // 测试步骤1:使用标准对象菜单和空自定义菜单测试主模块
|
||||
r($customTester->setMenuByConfigTest(array('task' => 'Task|task|browse', 'bug' => 'Bug|bug|browse'), '[{"name":"task","order":1},{"name":"bug","order":2}]', 'product')) && p() && e('array'); // 测试步骤2:使用数组菜单和JSON字符串自定义菜单测试
|
||||
r($customTester->setMenuByConfigTest(new stdclass(), array(), '')) && p() && e('array'); // 测试步骤3:测试空菜单对象的情况
|
||||
r($customTester->setMenuByConfigTest((object)array('index' => 'Home|index|index', 'divider' => '-', 'project' => 'Project|project|index'), array(), 'main')) && p() && e('array'); // 测试步骤4:测试带有分割线配置的菜单
|
||||
r($customTester->setMenuByConfigTest((object)array('custom' => 'Custom|custom|index'), array(), 'invalid')) && p() && e('array'); // 测试步骤5:测试无效模块菜单处理
|
||||
|
||||
zenData('lang')->gen(0);
|
||||
Reference in New Issue
Block a user