From 0af54247c7227f0fce767375ee56fd1c3402a100 Mon Sep 17 00:00:00 2001 From: dingguodong Date: Sat, 6 May 2023 15:45:31 +0800 Subject: [PATCH 1/6] * Reformat this file. --- module/todo/test/todo.class.php | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/module/todo/test/todo.class.php b/module/todo/test/todo.class.php index 15ee7c35b9..750566487b 100755 --- a/module/todo/test/todo.class.php +++ b/module/todo/test/todo.class.php @@ -364,19 +364,19 @@ class todoTest return $result ? '1' : '0'; } - /** - * 获取导出的待办数据。 - * Get data for export todo. - * - * @param string $orderBy - * @param object $formData - * @param string $queryCondition - * @param string $checkedItem - * @access public - * @return array - */ - public function getByExportListTest(string $orderBy, object $formData, string $queryCondition , string $checkedItem): array - { - return $this->objectModel->getByExportList($orderBy, $formData, $queryCondition, $checkedItem); - } + /** + * 获取导出的待办数据。 + * Get data for export todo. + * + * @param string $orderBy + * @param object $formData + * @param string $queryCondition + * @param string $checkedItem + * @access public + * @return array + */ + public function getByExportListTest(string $orderBy, object $formData, string $queryCondition , string $checkedItem): array + { + return $this->objectModel->getByExportList($orderBy, $formData, $queryCondition, $checkedItem); + } } From 28032be50197411f6dbed512444daa598abdb864 Mon Sep 17 00:00:00 2001 From: jukui Date: Sat, 6 May 2023 15:47:11 +0800 Subject: [PATCH 2/6] + Add getbyexportlist function test case for todo model. --- module/todo/test/model/getbyexportlist.php | 33 ++++++++++++++++ .../yaml/getbyexportlist/getbyexportlist.yaml | 39 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 module/todo/test/model/getbyexportlist.php create mode 100644 module/todo/test/model/yaml/getbyexportlist/getbyexportlist.yaml diff --git a/module/todo/test/model/getbyexportlist.php b/module/todo/test/model/getbyexportlist.php new file mode 100644 index 0000000000..709fd84118 --- /dev/null +++ b/module/todo/test/model/getbyexportlist.php @@ -0,0 +1,33 @@ +#!/usr/bin/env php +getByExportList(); +cid=1 +pid=1 + +*/ + +zdTable('todo')->config('getbyexportlist')->gen(5); + +$todo = new todoTest(); + +$formData = new stdClass(); +$formData->rawdata = new stdClass(); +$formData->rawdata->exportType = ''; +$testWhere = " `deleted` = '0' AND `vision` = 'rnd' AND `assignedTo` = 'admin' AND `date` >= '20230301' AND `date` <= '20230301' AND `status` IN ('wait') "; +$testWhere2 = " `deleted` = '0' and `status` IN ('closed') "; + +$testResult = $todo->getByExportListTest("date_desc", $formData, $testWhere, '1'); +$testResult2 = $todo->getByExportListTest("date_desc", $formData, $testWhere2, '1'); + +r(count($testResult)) && p() && e('1'); +r($testResult[1]) && p('name,status') && e('待办1,wait'); + +r(count($testResult2)) && p() && e('2'); +r($testResult2[4]) && p('name,status') && e('待办4,closed'); +r($testResult2[5]) && p('name,status') && e('待办5,closed'); diff --git a/module/todo/test/model/yaml/getbyexportlist/getbyexportlist.yaml b/module/todo/test/model/yaml/getbyexportlist/getbyexportlist.yaml new file mode 100644 index 0000000000..27495d142c --- /dev/null +++ b/module/todo/test/model/yaml/getbyexportlist/getbyexportlist.yaml @@ -0,0 +1,39 @@ +title: zt_getbyexportlist +author: jukui +version: "1.0" +fields: + - field: id + range: 1-9 + - field: account + range: 'admin' + - field: date + range: 1-9 + prefix: '2023-03-0' + - field: begin + range: 1000-1100 + - field: end + range: 1200-1300 + - field: type + range: 'custom' + - field: cycle + range: 0 + - field: pri + range: 3 + - field: name + range: 1-9 + prefix: '待办' + - field: desc + range: 1-9 + prefix: '这是待办描述' + - field: status + range: 'wait,doing,done,closed,closed' + - field: finishedDate + range: 1-9 + prefix: '2023-05-2' + - field: closedDate + range: 1-9 + prefix: '2023-05-2' + - field: assignedTo + range: 'admin' + - field: assignedBy + range: '' From b640578eba52a244bca5aa5acfaa0dbd356e16c8 Mon Sep 17 00:00:00 2001 From: xushenjie Date: Sat, 6 May 2023 07:51:07 +0000 Subject: [PATCH 3/6] * Added the todoModel::getPriByTodoType() unit test script. --- module/todo/test/model/getpribytodotype.php | 40 +++++++++++++++++++ .../model/yaml/getpribytodotype/todo.yaml | 35 ++++++++++++++++ module/todo/test/todo.class.php | 34 ++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100755 module/todo/test/model/getpribytodotype.php create mode 100644 module/todo/test/model/yaml/getpribytodotype/todo.yaml diff --git a/module/todo/test/model/getpribytodotype.php b/module/todo/test/model/getpribytodotype.php new file mode 100755 index 0000000000..3f710d44a7 --- /dev/null +++ b/module/todo/test/model/getpribytodotype.php @@ -0,0 +1,40 @@ +#!/usr/bin/env php +config('todo')->gen(10); + zdTable('bug')->gen(10); + zdTable('task')->gen(10); + zdTable('story')->gen(10); + zdTable('testtask')->gen(10); +} + +/** + +title=测试 todoModel->create(); +timeout=0 +cid=1 + +- 执行todoTest模块的getPriByTodoTypeTest方法,参数是$type, $objectID @1 + +- 执行todoTest模块的getPriByTodoTypeTest方法,参数是$inValidType, $inValidObjectID @1 + +*/ + +initData(); + +$validTypeList = array('bug','task','story','testtask'); +$validObjectIdList = array_combine(range(1,10), range(1,10)); +$type = $validTypeList[array_rand($validTypeList, 1)]; +$objectID = $validObjectIdList[array_rand($validObjectIdList, 1)]; +$inValidType = 'invalidType'; +$inValidObjectID = 0; + +$todoTest = new todoTest(); +r($todoTest->getPriByTodoTypeTest($type, $objectID)) && p() && e('1'); +r($todoTest->getPriByTodoTypeTest($inValidType, $inValidObjectID)) && p() && e('1'); diff --git a/module/todo/test/model/yaml/getpribytodotype/todo.yaml b/module/todo/test/model/yaml/getpribytodotype/todo.yaml new file mode 100644 index 0000000000..abeacbb74b --- /dev/null +++ b/module/todo/test/model/yaml/getpribytodotype/todo.yaml @@ -0,0 +1,35 @@ +title: Get pri for todoModel::getPriByTodoType UTC. +desc: Get pri for todoModel::getPriByTodoType UTC. +author: xushenjie +version: 1.0.0 + +fields: + - field: account + range: 'admin' + - field: name + range: 1-10 + prefix: '待办' + - field: date + range: 1-9 + prefix: '2023-05-0' + - field: type + range: 'custom' + - field: begin + range: 1000-1100 + - field: end + range: 1200-1300 + - field: assignedTo + range: 'admin' + - field: desc + range: 1-100 + prefix: '待办描述' + - field: status + range: 'wait,doing,doing,doing,wait' + - field: objectID + range: 0 + - field: assignedBy + range: 'admin' + - field: type + range: 'custom,bug,task,story,testtask' + - field: objectID + range: 1-10 diff --git a/module/todo/test/todo.class.php b/module/todo/test/todo.class.php index 750566487b..c9d9cc4c4f 100755 --- a/module/todo/test/todo.class.php +++ b/module/todo/test/todo.class.php @@ -379,4 +379,38 @@ class todoTest { return $this->objectModel->getByExportList($orderBy, $formData, $queryCondition, $checkedItem); } + + /** + * 获取导出的待办数据。 + * Get data for export todo. + * + * @param string $orderBy + * @param object $formData + * @param string $queryCondition + * @param string $checkedItem + * @access public + * @return array + */ + public function getByExportListTest(string $orderBy, object $formData, string $queryCondition , string $checkedItem): array + { + return $this->objectModel->getByExportList($orderBy, $formData, $queryCondition, $checkedItem); + } + + /** + * 根据待办类型,对象ID获取优先级。 + * Get pri by todo type and object id. + * + * @param string $todoType + * @param int $objectID + * @access public + * @return string + */ + public function getPriByTodoTypeTest(string $todoType, int $objectID): int + { + $pri = $this->objectModel->getPriByTodoType($todoType, $objectID); + + if(dao::isError()) return 0; + + return $pri ? 1 : 0; + } } From 69d65ca9bef472c0eeb910c34568af5ad11dddf1 Mon Sep 17 00:00:00 2001 From: xushenjie Date: Sat, 6 May 2023 07:52:46 +0000 Subject: [PATCH 4/6] * Remove duplicate code after merge. --- module/todo/test/todo.class.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/module/todo/test/todo.class.php b/module/todo/test/todo.class.php index c9d9cc4c4f..a4dc53c5c2 100755 --- a/module/todo/test/todo.class.php +++ b/module/todo/test/todo.class.php @@ -380,22 +380,6 @@ class todoTest return $this->objectModel->getByExportList($orderBy, $formData, $queryCondition, $checkedItem); } - /** - * 获取导出的待办数据。 - * Get data for export todo. - * - * @param string $orderBy - * @param object $formData - * @param string $queryCondition - * @param string $checkedItem - * @access public - * @return array - */ - public function getByExportListTest(string $orderBy, object $formData, string $queryCondition , string $checkedItem): array - { - return $this->objectModel->getByExportList($orderBy, $formData, $queryCondition, $checkedItem); - } - /** * 根据待办类型,对象ID获取优先级。 * Get pri by todo type and object id. From 92fe556a76662160bf042175be2f3119e7b02614 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Sat, 6 May 2023 15:54:59 +0800 Subject: [PATCH 5/6] * Add unit test of taskTao-removeCreateRequiredFields. --- .../test/tao/removecreaterequiredfields.php | 67 +++++++++++++++++++ .../project_removecreaterequiredfields.yaml | 13 ++++ module/task/test/task.class.php | 23 +++++++ 3 files changed, 103 insertions(+) create mode 100755 module/task/test/tao/removecreaterequiredfields.php create mode 100644 module/task/test/tao/yaml/removecreaterequiredfields/project_removecreaterequiredfields.yaml diff --git a/module/task/test/tao/removecreaterequiredfields.php b/module/task/test/tao/removecreaterequiredfields.php new file mode 100755 index 0000000000..0fc2d4fb32 --- /dev/null +++ b/module/task/test/tao/removecreaterequiredfields.php @@ -0,0 +1,67 @@ +#!/usr/bin/env php +config('project_removecreaterequiredfields')->gen(9); + +$tasks = array(); +for($i = 0; $i < 18; $i ++) +{ + $tasks[$i] = new stdclass(); + $tasks[$i]->execution = ($i + 1) % 9; + if(empty($tasks[$i]->execution)) $tasks[$i]->execution = 9; + if($i < 9) $tasks[$i]->type = 'dev'; + if($i >= 9) $tasks[$i]->type = 'test'; +} +global $tester; + +/** + +title=taskModel->removeCreateRequiredFields(); +timeout=0 +cid=1 + +*/ + + +$selectTestStoryList = array(false, true); + +$task = new taskTest(); + +r($task->removeCreateRequiredFieldsTest($tasks[0], $selectTestStoryList[0])) && p() && e('name,type,execution,story,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为mix 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[0], $selectTestStoryList[1])) && p() && e('name,type,execution,story,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为mix 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[1], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为request 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[1], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为request 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[2], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为review 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[2], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为review 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[3], $selectTestStoryList[0])) && p() && e('name,type,execution,story,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为mix 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[3], $selectTestStoryList[1])) && p() && e('name,type,execution,story,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为mix 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[4], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为request 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[4], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为request 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[5], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为review 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[5], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为review 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[6], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为mix 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[6], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为mix 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[7], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为request 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[7], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为request 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[8], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为review 任务类型为dev 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[8], $selectTestStoryList[1])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为review 任务类型为dev 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[9], $selectTestStoryList[0])) && p() && e('name,type,execution,story,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为mix 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[9], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为短期执行 阶段类型为mix 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[10], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为request 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[10], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为短期执行 阶段类型为request 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[11], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为短期执行 阶段类型为review 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[11], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为短期执行 阶段类型为review 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[12], $selectTestStoryList[0])) && p() && e('name,type,execution,story,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为mix 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[12], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为长期执行 阶段类型为mix 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[13], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为request 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[13], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为长期执行 阶段类型为request 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[14], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为长期执行 阶段类型为review 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[14], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为长期执行 阶段类型为review 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[15], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为mix 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[15], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为运维执行 阶段类型为mix 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[16], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为request 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[16], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为运维执行 阶段类型为request 任务类型为test 有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[17], $selectTestStoryList[0])) && p() && e('name,type,execution,estimate,estStarted,deadline,module'); // 测试任务执行为运维执行 阶段类型为review 任务类型为test 没有选择需求时候的必填项 +r($task->removeCreateRequiredFieldsTest($tasks[17], $selectTestStoryList[1])) && p() && e('name,type,execution'); // 测试任务执行为运维执行 阶段类型为review 任务类型为test 有选择需求时候的必填项 diff --git a/module/task/test/tao/yaml/removecreaterequiredfields/project_removecreaterequiredfields.yaml b/module/task/test/tao/yaml/removecreaterequiredfields/project_removecreaterequiredfields.yaml new file mode 100644 index 0000000000..0fd01d38bc --- /dev/null +++ b/module/task/test/tao/yaml/removecreaterequiredfields/project_removecreaterequiredfields.yaml @@ -0,0 +1,13 @@ +--- +title: zt_project +author: auto_removecreaterequiredfields +version: "1.0" +fields: +- field: id + range: 1-9 +- field: lifetime + range: short{3},long{3},ops{3} +- field: attribute + range: mix,request,review +... + diff --git a/module/task/test/task.class.php b/module/task/test/task.class.php index 76e0026874..850464c377 100644 --- a/module/task/test/task.class.php +++ b/module/task/test/task.class.php @@ -1605,4 +1605,27 @@ class taskTest return $task; } } + + /** + * Test remove required fields for creating tasks based on conditions. + * + * @param object $task + * @param bool $selectTestStory + * @access public + * @return string + */ + public function removeCreateRequiredFieldsTest(object $task, bool $selectTestStory): string + { + global $tester; + $tester->config->task->create->requiredFields = 'name,type,execution,story,estimate,estStarted,deadline,module'; + $this->objectModel->removeCreateRequiredFields($task, $selectTestStory); + if(dao::isError()) + { + return dao::getError(); + } + else + { + return $tester->config->task->create->requiredFields; + } + } } From e258becec8b1fbeda461109bbc9501389fa9174d Mon Sep 17 00:00:00 2001 From: tianshujie Date: Sat, 6 May 2023 15:59:08 +0800 Subject: [PATCH 6/6] * Add test case for create task. --- module/task/control.php | 4 +- module/task/model.php | 4 +- module/task/test/tao/docreate.php | 45 ++++++++++++++++++ module/task/test/tao/settaskfiles.php | 38 +++++++++++++++ module/task/test/task.class.php | 68 +++++++++++++++++++++++++++ 5 files changed, 156 insertions(+), 3 deletions(-) create mode 100755 module/task/test/tao/docreate.php create mode 100755 module/task/test/tao/settaskfiles.php diff --git a/module/task/control.php b/module/task/control.php index c20061a569..ab7ebb3043 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -66,7 +66,7 @@ class task extends control if(!empty($_POST)) { /* Prepare the data information before creating the task. */ - $result = $this->prepareCreate($executionID, (float)$this->post->estimate, $this->post->estStarted, $this->post->deadline, (bool)$this->post->selectTestStory); + $result = $this->taskZen->prepareCreate($executionID, (float)$this->post->estimate, $this->post->estStarted, $this->post->deadline, (bool)$this->post->selectTestStory); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); list($task, $testTasks, $existTaskID) = $result; @@ -493,7 +493,7 @@ class task extends control $execution = $this->execution->getById($task->execution); if(!isonlybody() and $execution->type == 'kanban') { - setcookie('taskToOpen', $taskID, 0, $this->config->webRoot, '', false, true); + setcookie('taskToOpen', $taskID, 0, $this->config->webRoot, '', $this->config->cookieSecure, true); return print(js::locate($this->createLink('execution', 'kanban', "executionID=$execution->id"))); } diff --git a/module/task/model.php b/module/task/model.php index 7b360423a2..fa60b4630a 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -4002,6 +4002,8 @@ class taskModel extends model */ public function setTaskFiles(array $taskFiles, int $taskID): array { + if(!empty($taskFiles) and !$taskID) return array(); + /* If taskFiles is not empty, create task files. */ if(!empty($taskFiles)) { @@ -4015,7 +4017,7 @@ class taskModel extends model else { $taskFileTitle = $this->loadModel('file')->saveUpload('task', $taskID); - $taskFiles = $this->dao->select('*')->from(TABLE_FILE)->where('id')->in(array_keys($taskFileTitle))->fetchAll('id'); + $taskFiles = $taskFileTitle ? $this->dao->select('*')->from(TABLE_FILE)->where('id')->in(array_keys($taskFileTitle))->fetchAll('id') : array(); foreach($taskFiles as $fileID => $taskFile) unset($taskFiles[$fileID]->id); } diff --git a/module/task/test/tao/docreate.php b/module/task/test/tao/docreate.php new file mode 100755 index 0000000000..b96669178c --- /dev/null +++ b/module/task/test/tao/docreate.php @@ -0,0 +1,45 @@ +#!/usr/bin/env php +gen(1); +zdTable('taskspec')->gen(1); + +/** + +title=taskModel->doCreate(); +timeout=0 +cid=2 + + +*/ +$devel = array('execution' => 101, 'name' => '开发任务一', 'type' => 'devel', 'estimate' => 1, 'version' => 1, 'estStarted' => null, 'deadline' => null); +$design = array('execution' => 101, 'name' => '设计任务一', 'type' => 'design', 'estimate' => 1, 'version' => 1, 'estStarted' => '2023-04-01', 'deadline' => null); +$request = array('execution' => 101, 'name' => '需求任务一', 'type' => 'request', 'estimate' => 1, 'version' => 1, 'estStarted' => null, 'deadline' => '2024-01-01'); +$test = array('execution' => 101, 'name' => '测试任务一', 'type' => 'test', 'estimate' => 1, 'version' => 1, 'estStarted' => null, 'deadline' => null); +$study = array('execution' => 101, 'name' => '研究任务一', 'type' => 'study', 'estimate' => 1, 'version' => 1, 'estStarted' => '2023-04-01', 'deadline' => '2024-01-01'); +$discuss = array('execution' => 101, 'name' => '讨论任务一', 'type' => 'discuss', 'estimate' => '', 'version' => 1); +$ui = array('execution' => 101, 'name' => '界面任务一', 'type' => 'ui', 'estimate' => 1, 'version' => 1); +$affair = array('execution' => 101, 'name' => '事务任务一', 'type' => 'affair', 'estimate' => 1, 'version' => 1); +$misc = array('execution' => 101, 'name' => '其他任务一', 'type' => 'misc', 'estimate' => 1, 'version' => 1); +$noexecution = array('execution' => 0, 'name' => '特殊任务一', 'type' => 'devel', 'estStarted' => '2021-04-10', 'deadline' => '2022-03-19', 'estimate' => 1, 'version' => 1); +$noname = array('execution' => 101, 'name' => '', 'type' => 'devel', 'estimate' => 1, 'version' => 1); +$notype = array('execution' => 101, 'name' => '特殊任务二', 'type' => '', 'estimate' => 1, 'version' => 1); +$errorEstimate = array('execution' => 101, 'name' => '特殊任务三', 'type' => 'devel', 'estimate' => '2a', 'version' => 1); + +$task = new taskTest(); + +r($task->doCreateObject($devel)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('开发任务一,101,devel,1,1,0000-00-00,0000-00-00'); // 测试正常的创建开发任务 +r($task->doCreateObject($design)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('设计任务一,101,design,1,1,2023-04-01,0000-00-00'); // 测试正常的创建设计任务 +r($task->doCreateObject($request)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('需求任务一,101,request,1,1,0000-00-00,2024-01-01'); // 测试正常的创建需求任务 +r($task->doCreateObject($test)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('测试任务一,101,test,1,1,0000-00-00,0000-00-00'); // 测试正常的创建测试任务 +r($task->doCreateObject($study)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('研究任务一,101,study,1,1,2023-04-01,2024-01-01'); // 测试正常的创建研究任务 +r($task->doCreateObject($discuss)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('讨论任务一,101,discuss,0,1,2021-01-10,2021-03-19'); // 测试正常的创建讨论任务 +r($task->doCreateObject($ui)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('界面任务一,101,ui,1,1,2021-01-10,2021-03-19'); // 测试正常的创建界面任务 +r($task->doCreateObject($affair)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('事务任务一,101,affair,1,1,2021-01-10,2021-03-19'); // 测试正常的创建事务任务 +r($task->doCreateObject($misc)) && p('name,execution,type,estimate,version,estStarted,deadline') && e('其他任务一,101,misc,1,1,2021-01-10,2021-03-19'); // 测试正常的创建其他任务 +r($task->doCreateObject($noexecution)) && p('execution:0') && e('『所属执行』不能为空。'); // 测试不输入执行创建任务 +r($task->doCreateObject($noname)) && p('name:0') && e('『任务名称』不能为空。'); // 测试不输入名称创建任务 +r($task->doCreateObject($notype)) && p('type:0') && e('『任务类型』不能为空。'); // 测试不输入类型创建任务 +r($task->doCreateObject($errorEstimate)) && p('estimate:0') && e('『最初预计』应当是数字,可以是小数。'); // 测试不输入类型创建任务 diff --git a/module/task/test/tao/settaskfiles.php b/module/task/test/tao/settaskfiles.php new file mode 100755 index 0000000000..544269bade --- /dev/null +++ b/module/task/test/tao/settaskfiles.php @@ -0,0 +1,38 @@ +#!/usr/bin/env php +id->range('1-6'); +$task->name->prefix('任务')->range('1-6'); +$task->gen(6); + +$file = zdTable('file'); +$file->id->range('1-10'); +$file->title->prefix('附件')->range('1-10'); +$file->objectType->range('task'); +$file->objectID->range('1-5'); +$file->gen(10); + +/** + +title=taskModel->setTaskFiles(); +timeout=0 +cid=1 + +*/ + +$taskIdList = range(1, 5); + +$taskTester = new taskTest(); +$emptyData = $taskTester->setTaskFilesTest(array(), 0); +$taskFiles = $taskTester->setTaskFilesTest(array(), 5); +$emptyTaskID = $taskTester->setTaskFilesTest($taskIdList, 0); +$insertData = $taskTester->setTaskFilesTest($taskIdList, 6); + +r($emptyData) && p() && e('0'); // 测试空数据 +r($emptyTaskID) && p() && e('0'); // 测试传入的任务ID +r(count($insertData)) && p() && e('10'); // 测试插入任务附件的数量 +r($insertData) && p('1:objectID') && e('6'); // 测试插入附件数据的对象ID +r(count($taskFiles)) && p() && e('0'); // 测试获取任务ID为5的附件数据的数量 diff --git a/module/task/test/task.class.php b/module/task/test/task.class.php index 850464c377..5e7d3b1f9f 100644 --- a/module/task/test/task.class.php +++ b/module/task/test/task.class.php @@ -1606,6 +1606,7 @@ class taskTest } } + /** * Test remove required fields for creating tasks based on conditions. * @@ -1628,4 +1629,71 @@ class taskTest return $tester->config->task->create->requiredFields; } } + + /** + * Test create a task. + * + * @param array $param + * @param int $executionID + * @access public + * @return object + */ + public function doCreateObject($param = array()) + { + $assignedTo = array(''); + $createFields = array('module' => 0, 'story' => 0, 'name' => '', 'type' => '', 'assignedTo' => 'admin', + 'pri' => 3, 'estimate' => '', '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; + + $objectID = $this->objectModel->doCreate($task); + + unset($_POST); + + if(dao::isError()) + { + return dao::getError(); + } + else + { + $object = $this->objectModel->getByID($objectID); + return $object; + } + } + + /** + * Set attachments for tasks. + * + * @param array $taskFiles + * @param int $taskID + * @access public + * @return array + */ + public function setTaskFilesTest(array $taskIdList, int $taskID) + { + global $tester; + + $taskFiles = array(); + if($taskIdList) + { + $taskFiles = $tester->dao->select('*')->from(TABLE_FILE)->where('objectID')->in($taskIdList)->andWhere('objectType')->eq('task')->fetchAll('id'); + foreach($taskFiles as $fileID => $taskFile) unset($taskFiles[$fileID]->id); + } + if(empty($taskFiles) and $taskID) + { + $files = $tester->dao->select('*')->from(TABLE_FILE)->where('objectID')->eq($taskID)->andWhere('objectType')->eq('task')->fetchAll('id'); + foreach($files as $file) + { + $_FILES['files']['name'][] = $file->title; + $_FILES['files']['size'][] = $file->size; + $_FILES['files']['tmp_name'][] = $file->extension; + } + $_FILES['files']['error'] = 0; + } + + return $this->objectModel->setTaskFiles($taskFiles, $taskID); + } }