diff --git a/module/task/model.php b/module/task/model.php index 6eaf223ee3..7c88de05cb 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -131,8 +131,8 @@ class taskModel extends model $taskSpec->task = $taskID; $taskSpec->version = $task->version; $taskSpec->name = $task->name; - $taskSpec->estStarted = $task->estStarted ? $task->estStarted : null; - $taskSpec->deadline = $task->deadline ? $task->deadline : null; + if(!empty($task->estStarted)) $taskSpec->estStarted = $task->estStarted; + if(!empty($task->deadline)) $taskSpec->deadline = $task->deadline; $this->dao->insert(TABLE_TASKSPEC)->data($taskSpec)->autoCheck()->exec(); if(dao::isError()) return false; @@ -362,17 +362,17 @@ class taskModel extends model $latestDeadline = ''; foreach($tasks as $task) { - if(!helper::isZeroDate($task->estStarted) && (empty($earliestEstStarted) || $earliestEstStarted > $task->estStarted)) $earliestEstStarted = $task->estStarted; - if(!helper::isZeroDate($task->realStarted) && (empty($earliestRealStarted) || $earliestRealStarted > $task->realStarted)) $earliestRealStarted = $task->realStarted; - if(!helper::isZeroDate($task->deadline) && (empty($latestDeadline) || $latestDeadline < $task->deadline)) $latestDeadline = $task->deadline; + if(!helper::isZeroDate($task->estStarted) && (empty($earliestEstStarted) || $earliestEstStarted > $task->estStarted)) $earliestEstStarted = $task->estStarted; + if(!helper::isZeroDate($task->realStarted) && (empty($earliestRealStarted) || $earliestRealStarted > $task->realStarted)) $earliestRealStarted = $task->realStarted; + if(!helper::isZeroDate($task->deadline) && (empty($latestDeadline) || $latestDeadline < $task->deadline)) $latestDeadline = $task->deadline; } /* Initialize task data and update it. */ - $newTask = new stdclass(); - $newTask->estStarted = $earliestEstStarted; - $newTask->realStarted = $earliestRealStarted; - $newTask->deadline = $latestDeadline; - $this->dao->update(TABLE_TASK)->data($newTask)->autoCheck()->where('id')->eq($taskID)->exec(); + $newTask = array(); + if(!empty($earliestEstStarted)) $newTask['estStarted'] = $earliestEstStarted; + if(!empty($earliestRealStarted)) $newTask['realStarted'] = $earliestRealStarted; + if(!empty($latestDeadline)) $newTask['deadline'] = $latestDeadline; + if(!empty($newTask)) $this->dao->update(TABLE_TASK)->data($newTask)->autoCheck()->where('id')->eq($taskID)->exec(); return !dao::isError(); } diff --git a/module/task/test/model/activate.php b/module/task/test/model/activate.php index 087e5a81d7..e16caed830 100755 --- a/module/task/test/model/activate.php +++ b/module/task/test/model/activate.php @@ -9,31 +9,6 @@ title=taskModel->activate(); timeout=0 cid=1 -- wait状态任务激活 - - 第0条的field属性 @status - - 第0条的old属性 @wait - - 第0条的new属性 @doing - -- done状态任务激活 - - 第0条的field属性 @status - - 第0条的old属性 @done - - 第0条的new属性 @doing - -- pause状态任务激活 - - 第0条的field属性 @status - - 第0条的old属性 @pause - - 第0条的new属性 @doing - -- cancel状态任务激活 - - 第0条的field属性 @status - - 第0条的old属性 @cancel - - 第0条的new属性 @doing - -- closed状态任务激活 - - 第0条的field属性 @status - - 第0条的old属性 @closed - - 第0条的new属性 @doing - */ zdTable('task')->gen(10); @@ -47,4 +22,4 @@ r($task->activateTest($taskIDList[0])) && p('0:field,old,new') && e('status,wait r($task->activateTest($taskIDList[1])) && p('0:field,old,new') && e('status,done,doing'); //done状态任务激活 r($task->activateTest($taskIDList[2])) && p('0:field,old,new') && e('status,pause,doing'); //pause状态任务激活 r($task->activateTest($taskIDList[3])) && p('0:field,old,new') && e('status,cancel,doing'); //cancel状态任务激活 -r($task->activateTest($taskIDList[4])) && p('0:field,old,new') && e('status,closed,doing'); //closed状态任务激活 \ No newline at end of file +r($task->activateTest($taskIDList[4])) && p('0:field,old,new') && e('status,closed,doing'); //closed状态任务激活 diff --git a/module/task/test/model/addtaskeffort.php b/module/task/test/model/addtaskeffort.php index cf89acb367..9004bea9b0 100755 --- a/module/task/test/model/addtaskeffort.php +++ b/module/task/test/model/addtaskeffort.php @@ -7,8 +7,8 @@ su('admin'); /** title=taskModel->addTaskEffort(); +timeout=0 cid=1 -pid=1 插入task为1 left为0 consumed为3的任务 >> 601,1,0,3 插入task为601 left为0 consumed为3的任务 >> 602,601,0,3 diff --git a/module/task/test/model/createtaskoftest.php b/module/task/test/model/createtaskoftest.php new file mode 100644 index 0000000000..0d63c70874 --- /dev/null +++ b/module/task/test/model/createtaskoftest.php @@ -0,0 +1,60 @@ +#!/usr/bin/env php +gen(0); +zdTable('taskspec')->gen(0); +zdTable('project')->config('project')->gen(5); +zdTable('story')->config('story')->gen(5); + +/** + +title=taskModel->createTaskOfTest(); +timeout=0 +cid=1 + +*/ + +$sprintTask = array('execution' => 3, 'name' => '迭代下的任务'); +$stageTask = array('execution' => 4, 'name' => '阶段下的任务'); +$kanbanTask = array('execution' => 5, 'name' => '看板下的任务'); +$notEstimateTask = array('execution' => 3, 'name' => '迭代下的任务', 'estimate' => 0); +$notStoryTask = array('execution' => 3, 'name' => '迭代下的任务', 'story' => 0); +$notEstStartedTask = array('execution' => 3, 'name' => '迭代下的任务', 'estStarted' => ''); +$notDeadlineTask = array('execution' => 3, 'name' => '迭代下的任务', 'deadline' => ''); +$notModuleTask = array('execution' => 3, 'name' => '迭代下的任务', 'module' => 0); + +$testTasks[2] = new stdclass(); +$testTasks[2]->name = '测试子任务1'; +$testTasks[2]->type = 'test'; +$testTasks[2]->estimate = 0; +$testTasks[2]->left = 0; +$testTasks[2]->mailto = ''; + +$testTasks[3] = new stdclass(); +$testTasks[3]->name = '测试子任务2'; +$testTasks[3]->type = 'test'; +$testTasks[3]->estimate = 0; +$testTasks[3]->left = 0; +$testTasks[3]->mailto = ''; + +$taskTester = new taskTest(); +r($taskTester->createTaskOfTestObject()) && p('name:0') && e('『任务名称』不能为空。'); // 测试空数据 +r($taskTester->createTaskOfTestObject($sprintTask)) && p('execution,name') && e('3,迭代下的任务'); // 测试创建迭代下的测试任务 +r($taskTester->createTaskOfTestObject($stageTask)) && p('execution,name') && e('4,阶段下的任务'); // 测试创建阶段下的测试任务 +r($taskTester->createTaskOfTestObject($kanbanTask)) && p('execution,name') && e('5,看板下的任务'); // 测试创建看板下的测试任务 +r($taskTester->createTaskOfTestObject($sprintTask, $testTasks)) && p('children[5]:parent') && e('4'); // 测试创建迭代下的测试任务以及子任务 +r($taskTester->createTaskOfTestObject($stageTask, $testTasks)) && p('children[8]:parent') && e('7'); // 测试创建阶段下的测试任务以及子任务 +r($taskTester->createTaskOfTestObject($kanbanTask, $testTasks)) && p('children[11]:parent') && e('10'); // 测试创建看板下的测试任务以及子任务 +r($taskTester->createTaskOfTestObject($notEstimateTask, array(), 'estimate')) && p('estimate:0') && e('『最初预计』不能为空。'); // 测试创建迭代下的测试任务的预计必填项 +r($taskTester->createTaskOfTestObject($notStoryTask, array(), 'story')) && p('story:0') && e('『相关研发需求』不能为空。'); // 测试创建迭代下的测试任务的需求必填项 +r($taskTester->createTaskOfTestObject($notEstStartedTask, array(), 'estStarted')) && p('estStarted:0') && e('『预计开始』不能为空。'); // 测试创建迭代下的测试任务的预计开始必填项 +r($taskTester->createTaskOfTestObject($notDeadlineTask, array(), 'deadline')) && p('deadline:0') && e('『截止日期』不能为空。'); // 测试创建迭代下的测试任务的截止日期必填项 +r($taskTester->createTaskOfTestObject($notModuleTask, array(), 'module')) && p('module:0') && e('『所属模块』不能为空。'); // 测试创建迭代下的测试任务的模块必填项 +r($taskTester->createTaskOfTestObject($notEstimateTask, $testTasks, 'estimate')) && p('children[14]:parent') && e('13'); // 测试创建迭代下的测试任务的预计必填项 +r($taskTester->createTaskOfTestObject($notStoryTask, $testTasks, 'story')) && p('children[17]:parent') && e('16'); // 测试创建迭代下的测试任务的需求必填项 +r($taskTester->createTaskOfTestObject($notEstStartedTask, $testTasks, 'estStarted')) && p('children[20]:parent') && e('19'); // 测试创建迭代下的测试任务的预计开始必填项 +r($taskTester->createTaskOfTestObject($notDeadlineTask, $testTasks, 'deadline')) && p('children[23]:parent') && e('22'); // 测试创建迭代下的测试任务的截止日期必填项 +r($taskTester->createTaskOfTestObject($notModuleTask, $testTasks, 'module')) && p('children[26]:parent') && e('25'); // 测试创建迭代下的测试任务的模块必填项 diff --git a/module/task/test/model/createtestchildtasks.php b/module/task/test/model/createtestchildtasks.php index c3a2cf1945..6c7b068b67 100755 --- a/module/task/test/model/createtestchildtasks.php +++ b/module/task/test/model/createtestchildtasks.php @@ -18,6 +18,8 @@ $story->title->range('1-5')->prefix('需求'); $story->type->range('story'); $story->gen(5); +zdTable('action')->gen(0); + /** title=测试taskModel->createTestChildTasks(); @@ -27,17 +29,21 @@ cid=1 */ $testTasks[2] = new stdclass(); -$testTasks[2]->name = '测试子任务1'; -$testTasks[2]->type = 'test'; -$testTasks[2]->mailto = ''; +$testTasks[2]->name = '测试子任务1'; +$testTasks[2]->type = 'test'; +$testTasks[2]->estimate = 0; +$testTasks[2]->left = 0; +$testTasks[2]->mailto = ''; $testTasks[3] = new stdclass(); -$testTasks[3]->name = '测试子任务2'; -$testTasks[3]->type = 'test'; -$testTasks[3]->mailto = ''; +$testTasks[3]->name = '测试子任务2'; +$testTasks[3]->type = 'test'; +$testTasks[3]->estimate = 0; +$testTasks[3]->left = 0; +$testTasks[3]->mailto = ''; $taskTester = new taskTest(); -r($taskTester->createTestChildTasksTest()) && p() && e('0'); // 测试空数据 -r($taskTester->createTestChildTasksTest(0, $testTasks)) && p('name') && e('测试研发需求 #3 需求3'); // 测试任务ID为空的情况 -r($taskTester->createTestChildTasksTest(1, array())) && p() && e('0'); // 测试子测试任务的数据为空的情况 -r($taskTester->createTestChildTasksTest(1, $testTasks)) && p('name') && e('测试研发需求 #3 需求3'); // 测试创建任务ID为1的子测试任务 +r($taskTester->createTestChildTasksTest()) && p() && e('0'); // 测试空数据 +r($taskTester->createTestChildTasksTest(0, $testTasks)) && p('type') && e('test'); // 测试任务ID为空的情况 +r($taskTester->createTestChildTasksTest(1, array())) && p('id') && e('2'); // 测试子测试任务的数据为空的情况 +r($taskTester->createTestChildTasksTest(1, $testTasks)) && p('name') && e('测试研发需求 #2 需求2'); // 测试创建任务ID为1的子测试任务 diff --git a/module/task/test/model/yaml/createtaskoftest/project.yaml b/module/task/test/model/yaml/createtaskoftest/project.yaml new file mode 100644 index 0000000000..2a064b7281 --- /dev/null +++ b/module/task/test/model/yaml/createtaskoftest/project.yaml @@ -0,0 +1,19 @@ +title: table zt_project +author: Hu Fangzhou +version: "1.0" +fields: + - field: id + range: 1-5 + - field: name + note: "名称" + fields: + - field: name1 + range: rnd + - field: name2 + range: 项目,迭代,阶段,看板{2} + - field: project + range: 1 + - field: type + range: project,sprint,stage,kanban{2} + - field: vision + range: rnd{4},lite diff --git a/module/task/test/model/yaml/createtaskoftest/story.yaml b/module/task/test/model/yaml/createtaskoftest/story.yaml new file mode 100644 index 0000000000..2610514165 --- /dev/null +++ b/module/task/test/model/yaml/createtaskoftest/story.yaml @@ -0,0 +1,15 @@ +title: table zt_story +author: Shujie Tian +version: "1.0" +fields: + - field: id + range: 1-5 + - field: title + range: 1-5 + profix: '需求' + - field: product + range: 1 + - field: type + range: story + - field: vision + range: rnd diff --git a/module/task/test/task.class.php b/module/task/test/task.class.php index 0195e8f807..75b4e51625 100644 --- a/module/task/test/task.class.php +++ b/module/task/test/task.class.php @@ -1665,6 +1665,53 @@ class taskTest return $tester->config->task->create->requiredFields; } + /** + * 创建测试类型的任务。 + * Create a test type task. + * + * @param array $param + * @param array $testTasks + * @param string $requiredFields + * @access public + * @return object|array + */ + public function createTaskOfTestObject(array $param = array(), array $testTasks = array(), string $requiredField = ''): object|array + { + global $tester; + $_SERVER['HTTP_HOST'] = $tester->config->db->host; + + $createFields = array( + 'execution' => 3, + 'module' => 0, + 'story' => 0, + 'name' => '', + 'type' => 'test', + 'assignedTo' => 'admin', + 'assignedDate' => helper::now(), + 'pri' => 3, + 'estimate' => 0, + 'left' => 0, + 'estStarted' => '2021-01-10', + 'deadline' => '2021-03-19', + 'desc' => '', + 'version' => '1' + ); + + $task = new stdclass(); + foreach($createFields as $field => $defaultValue) $task->$field = $defaultValue; + foreach($param as $key => $value) $task->$key = $value; + if($requiredField) + { + if(!empty($testTasks) and $requiredField == 'estStarted') unset($task->estStarted); + if(!empty($testTasks) and $requiredField == 'deadline') unset($task->deadline); + $tester->config->task->create->requiredFields = $tester->config->task->create->requiredFields . ',' . $requiredField . ','; + } + $objectID = $this->objectModel->createTaskOfTest($task, $testTasks); + + if(dao::isError()) return dao::getError(); + return $this->objectModel->getByID($objectID); + } + /** * 测试创建一个任务。 * Test create a task. @@ -1691,7 +1738,6 @@ class taskTest $task = new stdclass(); foreach($createFields as $field => $defaultValue) $task->$field = $defaultValue; - foreach($param as $key => $value) $task->$key = $value; $objectID = $this->objectModel->doCreate($task); diff --git a/module/task/zen.php b/module/task/zen.php index 18dfe9655e..ba1c7ad808 100644 --- a/module/task/zen.php +++ b/module/task/zen.php @@ -1095,8 +1095,8 @@ class taskZen extends task ->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags) ->get(); - if(empty($postData->estStarted)) $task->estStarted = null; - if(empty($postData->deadline)) $task->deadline = null; + if(empty($postData->estStarted)) unset($task->estStarted); + if(empty($postData->deadline)) unset($task->deadline); /* Processing image link. */ $task = $this->loadModel('file')->processImgURL($task, $this->config->task->editor->create['id'], $postData->uid);