diff --git a/module/task/test/lib/taskzen.unittest.class.php b/module/task/test/lib/taskzen.unittest.class.php index 70a161a97b..9ba2ef9d44 100755 --- a/module/task/test/lib/taskzen.unittest.class.php +++ b/module/task/test/lib/taskzen.unittest.class.php @@ -478,4 +478,67 @@ class taskZenTest return $result; } + + /** + * 测试构造任务记录日志的表单数据。 + * Test build record workhour form. + * + * @param int $taskID + * @param string $from + * @param string $orderBy + * @access public + * @return object + */ + public function buildRecordFormTest(int $taskID, string $from = '', string $orderBy = ''): object + { + $error = ''; + + try + { + /* Set up HTTP_REFERER for testing. */ + $_SERVER['HTTP_REFERER'] = 'http://localhost/zentao/task-recordworkhour-' . $taskID . '.html'; + + /* Create mock taskZen instance. */ + $taskZenInstance = $this->taskZenTest->newInstance(); + $taskZenInstance->view = new stdClass(); + + /* Get reflection method. */ + $reflection = new ReflectionClass($taskZenInstance); + $method = $reflection->getMethod('buildRecordForm'); + $method->setAccessible(true); + + /* Use output buffering to capture display output. */ + ob_start(); + $method->invoke($taskZenInstance, $taskID, $from, $orderBy); + ob_end_clean(); + + $result = new stdClass(); + $result->title = isset($taskZenInstance->view->title) ? $taskZenInstance->view->title : ''; + $result->taskID = isset($taskZenInstance->view->task) ? $taskZenInstance->view->task->id : 0; + $result->taskMode = isset($taskZenInstance->view->task) ? $taskZenInstance->view->task->mode : ''; + $result->taskAssignedTo = isset($taskZenInstance->view->task) ? $taskZenInstance->view->task->assignedTo : ''; + $result->hasTeam = isset($taskZenInstance->view->task) && !empty($taskZenInstance->view->task->team); + $result->from = isset($taskZenInstance->view->from) ? $taskZenInstance->view->from : ''; + $result->orderBy = isset($taskZenInstance->view->orderBy) ? $taskZenInstance->view->orderBy : ''; + $result->effortsCount = isset($taskZenInstance->view->efforts) ? count($taskZenInstance->view->efforts) : 0; + $result->usersCount = isset($taskZenInstance->view->users) ? count($taskZenInstance->view->users) : 0; + $result->taskEffortFold = isset($taskZenInstance->view->taskEffortFold) ? $taskZenInstance->view->taskEffortFold : 0; + + $result->error = ''; + } + catch(Exception $e) + { + $error = $e->getMessage(); + $result = new stdClass(); + $result->error = $error; + } + + if(dao::isError()) + { + $result = new stdClass(); + $result->error = dao::getError(); + } + + return $result; + } } diff --git a/module/task/test/zen/buildrecordform.php b/module/task/test/zen/buildrecordform.php new file mode 100755 index 0000000000..9009ee2b27 --- /dev/null +++ b/module/task/test/zen/buildrecordform.php @@ -0,0 +1,105 @@ +#!/usr/bin/env php +id->range('1'); +$project->name->range('测试项目'); +$project->type->range('project'); +$project->status->range('doing'); +$project->gen(1); + +$execution = zenData('project'); +$execution->id->range('2'); +$execution->parent->range('1'); +$execution->name->range('测试执行'); +$execution->type->range('sprint'); +$execution->status->range('doing'); +$execution->gen(1); + +$story = zenData('story'); +$story->id->range('1'); +$story->title->range('测试需求'); +$story->type->range('story'); +$story->status->range('active'); +$story->version->range('1'); +$story->gen(1); + +$task = zenData('task'); +$task->id->range('1-10'); +$task->project->range('1'); +$task->execution->range('2'); +$task->name->range('测试任务{1-10}'); +$task->type->range('devel'); +$task->mode->range('linear{5},'); +$task->assignedTo->range('admin{3},user1{3},user2{4}'); +$task->status->range('wait{3},doing{4},done{3}'); +$task->story->range('0{8},1{2}'); +$task->storyVersion->range('1'); +$task->gen(10); + +$taskTeam = zenData('taskteam'); +$taskTeam->id->range('1-15'); +$taskTeam->task->range('1{3},2{3},3{3},4{3},5{3}'); +$taskTeam->account->range('admin,user1,user2'); +$taskTeam->status->range('wait{5},doing{5},done{5}'); +$taskTeam->gen(15); + +$taskEstimate = zenData('taskestimate'); +$taskEstimate->id->range('1-20'); +$taskEstimate->task->range('1{4},2{4},3{4},4{4},5{4}'); +$taskEstimate->account->range('admin,user1,user2,user3'); +$taskEstimate->consumed->range('1.0{5},2.0{5},3.0{5},1.5{5}'); +$taskEstimate->left->range('0.5{5},1.0{5},0{5},2.0{5}'); +$taskEstimate->gen(20); + +$user = zenData('user'); +$user->id->range('1-10'); +$user->account->range('admin,user1,user2,user3,user4,user5,user6,user7,user8,user9'); +$user->realname->range('管理员,用户一,用户二,用户三,用户四,用户五,用户六,用户七,用户八,用户九'); +$user->deleted->range('0'); +$user->gen(10); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$taskTest = new taskZenTest(); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +r($taskTest->buildRecordFormTest(1, '', '')) && p('taskID,title') && e('1,任务日志'); // 步骤1:正常情况 +r($taskTest->buildRecordFormTest(1, 'execution', 'order_desc')) && p('taskID,from,orderBy') && e('1,execution,order_desc,id_desc'); // 步骤2:团队模式排序处理 +r($taskTest->buildRecordFormTest(2, '', '')) && p('taskID,taskEffortFold') && e('2,0'); // 步骤3:默认折叠状态 +r($taskTest->buildRecordFormTest(1, '', '')) && p('taskID,taskAssignedTo,taskEffortFold') && e('1,admin,1'); // 步骤4:当前用户分配的任务 +r($taskTest->buildRecordFormTest(3, 'kanban', 'date_asc')) && p('taskID,from,usersCount') && e('3,kanban,10'); // 步骤5:用户列表验证 \ No newline at end of file