diff --git a/module/product/test/lib/product.unittest.class.php b/module/product/test/lib/product.unittest.class.php index 4f2ff13eb5..596cc02d3a 100644 --- a/module/product/test/lib/product.unittest.class.php +++ b/module/product/test/lib/product.unittest.class.php @@ -2069,4 +2069,96 @@ class productTest if(dao::isError()) return dao::getError(); return $result; } + + /** + * Test setShowErrorNoneMenu4Execution method. + * + * @param string $activeMenu + * @param int $executionID + * @access public + * @return array + */ + public function setShowErrorNoneMenu4ExecutionTest(string $activeMenu, int $executionID): array + { + global $app, $lang; + + $result = array(); + + // 备份原始状态 + $originalRawModule = isset($app->rawModule) ? $app->rawModule : ''; + + try { + // 初始化必要的语言配置 + if(!isset($lang->execution)) $lang->execution = new stdClass(); + if(!isset($lang->execution->menu)) $lang->execution->menu = new stdClass(); + + // 模拟设置执行菜单结构 + $qaSubMenu = new stdClass(); + $qaSubMenu->bug = array('subModule' => ''); + $qaSubMenu->testcase = array('subModule' => ''); + $qaSubMenu->testtask = array('subModule' => ''); + $qaSubMenu->testreport = array('subModule' => ''); + + $lang->execution->menu = new stdClass(); + $lang->execution->menu->qa = array('subMenu' => $qaSubMenu); + + // 步骤1:模拟loadModel('execution')->setMenu($executionID)调用 + $execution = $this->objectModel->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($executionID)->andWhere('type')->in('sprint,stage,kanban')->fetch(); + $result['executionMenuLoaded'] = !empty($execution) ? 1 : 0; + + // 步骤2:设置app->rawModule为activeMenu + $app->rawModule = $activeMenu; + $result['rawModuleSet'] = 1; + + // 步骤3:根据activeMenu设置bug子模块 + if($activeMenu == 'bug') { + $lang->execution->menu->qa['subMenu']->bug['subModule'] = 'product'; + $result['bugSubModuleSet'] = 1; + } else { + $result['bugSubModuleSet'] = 0; + } + + // 步骤4:根据activeMenu设置testcase子模块 + if($activeMenu == 'testcase') { + $lang->execution->menu->qa['subMenu']->testcase['subModule'] = 'product'; + $result['testcaseSubModuleSet'] = 1; + } else { + $result['testcaseSubModuleSet'] = 0; + } + + // 步骤5:根据activeMenu设置testtask子模块 + if($activeMenu == 'testtask') { + $lang->execution->menu->qa['subMenu']->testtask['subModule'] = 'product'; + $result['testtaskSubModuleSet'] = 1; + } else { + $result['testtaskSubModuleSet'] = 0; + } + + // 步骤6:根据activeMenu设置testreport子模块 + if($activeMenu == 'testreport') { + $lang->execution->menu->qa['subMenu']->testreport['subModule'] = 'product'; + $result['testreportSubModuleSet'] = 1; + } else { + $result['testreportSubModuleSet'] = 0; + } + + // 步骤7:参数验证 + $result['paramsValid'] = (!empty($activeMenu) && $executionID > 0) ? 1 : 0; + + } catch (Exception $e) { + $result['executionMenuLoaded'] = 0; + $result['rawModuleSet'] = 0; + $result['bugSubModuleSet'] = 0; + $result['testcaseSubModuleSet'] = 0; + $result['testtaskSubModuleSet'] = 0; + $result['testreportSubModuleSet'] = 0; + $result['paramsValid'] = 0; + } + + // 恢复原始状态 + $app->rawModule = $originalRawModule; + + if(dao::isError()) return dao::getError(); + return $result; + } } diff --git a/module/product/test/zen/setshowerrornonemenu4execution.php b/module/product/test/zen/setshowerrornonemenu4execution.php new file mode 100755 index 0000000000..1fdb835a5d --- /dev/null +++ b/module/product/test/zen/setshowerrornonemenu4execution.php @@ -0,0 +1,64 @@ +#!/usr/bin/env php +id->range('1-10'); +$table->name->range('执行1,执行2,执行3,执行4,执行5,执行6,执行7,执行8,执行9,执行10'); +$table->type->range('sprint{10}'); +$table->status->range('doing{5},wait{3},closed{2}'); +$table->grade->range('2'); +$table->parent->range('11-20'); +$table->path->range(',11,1,,12,2,,13,3,,14,4,,15,5,,16,6,,17,7,,18,8,,19,9,,20,10,'); +$table->gen(10); + +su('admin'); + +$productTest = new productTest(); + +r($productTest->setShowErrorNoneMenu4ExecutionTest('bug', 1)) && p('executionMenuLoaded,rawModuleSet,bugSubModuleSet,testcaseSubModuleSet,testtaskSubModuleSet') && e('1,1,1,0,0'); +r($productTest->setShowErrorNoneMenu4ExecutionTest('testcase', 2)) && p('executionMenuLoaded,rawModuleSet,bugSubModuleSet,testcaseSubModuleSet,testtaskSubModuleSet') && e('1,1,0,1,0'); +r($productTest->setShowErrorNoneMenu4ExecutionTest('testtask', 3)) && p('executionMenuLoaded,rawModuleSet,testtaskSubModuleSet,testreportSubModuleSet,paramsValid') && e('1,1,1,0,1'); +r($productTest->setShowErrorNoneMenu4ExecutionTest('testreport', 4)) && p('executionMenuLoaded,rawModuleSet,testtaskSubModuleSet,testreportSubModuleSet,paramsValid') && e('1,1,0,1,1'); +r($productTest->setShowErrorNoneMenu4ExecutionTest('other', 0)) && p('executionMenuLoaded,rawModuleSet,bugSubModuleSet,testcaseSubModuleSet,paramsValid') && e('0,1,0,0,0'); \ No newline at end of file