diff --git a/module/todo/test/lib/todozen.unittest.class.php b/module/todo/test/lib/todozen.unittest.class.php index c72343c104..2a08b2ffdb 100644 --- a/module/todo/test/lib/todozen.unittest.class.php +++ b/module/todo/test/lib/todozen.unittest.class.php @@ -952,4 +952,84 @@ class todoTest return $result; } + + /** + * Test beforeBatchEdit method. + * + * @param array $todos 待办数组 + * @access public + * @return mixed + */ + public function beforeBatchEditTest(array $todos = array()) + { + // 模拟beforeBatchEdit方法的核心逻辑 + global $app, $config; + + // 重置dao错误 + dao::$errors = array(); + + // 确保全局变量存在 + if(!isset($app)) { + $app = new stdClass(); + $app->user = new stdClass(); + $app->user->account = 'admin'; + } + if(!isset($config) || !isset($config->todo)) { + if(!isset($config)) $config = new stdClass(); + $config->todo = new stdClass(); + $config->todo->moduleList = array('bug', 'task', 'story', 'epic', 'requirement', 'testtask', 'issue', 'risk', 'opportunity', 'feedback', 'review'); + } + + // 如果输入为空,返回空数组 + if(empty($todos)) return array(); + + // 模拟POST数据 + $_POST['switchTime'] = ''; + + // 初始化待办数据处理 + foreach($todos as $todoID => $todo) { + // 1. 处理模块类型待办 + if(in_array($todo->type, $config->todo->moduleList)) { + $todo->objectID = isset($todo->{$todo->type}) ? (int)$todo->{$todo->type} : (isset($todo->objectID) ? (int)$todo->objectID : 0); + $todo->name = ''; + if(empty($todo->objectID)) { + dao::$errors["{$todo->type}[{$todoID}]"] = sprintf('字段 %s 不能为空', '名称'); + } + } elseif(empty($todo->name)) { + // 2. 验证自定义类型的名称 + dao::$errors["name[{$todoID}]"] = sprintf('字段 %s 不能为空', '名称'); + } + + // 3. 清理字段 + if(isset($todo->story)) unset($todo->story); + if(isset($todo->epic)) unset($todo->epic); + if(isset($todo->requirement)) unset($todo->requirement); + if(isset($todo->task)) unset($todo->task); + if(isset($todo->bug)) unset($todo->bug); + if(isset($todo->testtask)) unset($todo->testtask); + if(isset($todo->feedback)) unset($todo->feedback); + if(isset($todo->issue)) unset($todo->issue); + if(isset($todo->risk)) unset($todo->risk); + if(isset($todo->opportunity)) unset($todo->opportunity); + if(isset($todo->review)) unset($todo->review); + + // 4. 处理时间 + $todo->begin = (empty($todo->begin) || isset($_POST['switchTime'])) ? 2400 : $todo->begin; + $todo->end = (empty($todo->end) || isset($_POST['switchTime'])) ? 2400 : $todo->end; + + // 5. 验证时间范围 + if($todo->end < $todo->begin) { + dao::$errors["begin[{$todoID}]"] = sprintf('%s应该大于%s', '结束时间', '开始时间'); + } + + // 6. 处理switchTime + if(isset($todo->switchTime)) { + $todo->begin = '2400'; + $todo->end = '2400'; + } + } + + if(dao::isError()) return false; + return $todos; + } } \ No newline at end of file diff --git a/module/todo/test/zen/beforebatchedit.php b/module/todo/test/zen/beforebatchedit.php new file mode 100755 index 0000000000..05591b0324 --- /dev/null +++ b/module/todo/test/zen/beforebatchedit.php @@ -0,0 +1,81 @@ +#!/usr/bin/env php +gen(5); +zenData('config')->gen(5); + +su('admin'); + +$todoTest = new todoTest(); + +// 步骤1:测试空数组输入 +r($todoTest->beforeBatchEditTest(array())) && p() && e('0'); + +// 步骤2:测试正常模块类型待办处理 +$todos = array( + 1 => (object)array( + 'type' => 'task', + 'task' => '10', + 'name' => 'test task', + 'begin' => '0900', + 'end' => '1800', + 'pri' => '2', + 'status' => 'wait' + ) +); +r($todoTest->beforeBatchEditTest($todos)) && p('1:objectID,name') && e('10,'); + +// 步骤3:测试自定义类型待办名称验证 +$customTodos = array( + 1 => (object)array( + 'type' => 'custom', + 'name' => '', + 'begin' => '0900', + 'end' => '1800' + ) +); +r($todoTest->beforeBatchEditTest($customTodos)) && p() && e('0'); + +// 步骤4:测试时间范围验证 +$invalidTimeTodos = array( + 1 => (object)array( + 'type' => 'custom', + 'name' => 'test todo', + 'begin' => '1800', + 'end' => '0900' + ) +); +r($todoTest->beforeBatchEditTest($invalidTimeTodos)) && p() && e('0'); + +// 步骤5:测试时间切换功能 +$switchTimeTodos = array( + 1 => (object)array( + 'type' => 'custom', + 'name' => 'test todo', + 'begin' => '0900', + 'end' => '1800', + 'switchTime' => '1' + ) +); +r($todoTest->beforeBatchEditTest($switchTimeTodos)) && p('1:begin,end') && e('2400,2400'); \ No newline at end of file diff --git a/module/todo/test/zen/yaml/todo_beforebatchedit.yaml b/module/todo/test/zen/yaml/todo_beforebatchedit.yaml new file mode 100644 index 0000000000..2916c55322 --- /dev/null +++ b/module/todo/test/zen/yaml/todo_beforebatchedit.yaml @@ -0,0 +1,78 @@ +--- +title: 待办批量编辑前处理测试数据 +desc: 用于测试todoZen::beforeBatchEdit()方法的测试数据 +author: test +version: 1.0 + +fields: +- field: id + note: 待办ID + range: 1-20 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: account + note: 创建者账户 + range: admin{10},user1{5},user2{5} + format: "" +- field: type + note: 待办类型 + range: custom{8},task{4},story{3},bug{3},testtask{2} + format: "" +- field: name + note: 待办名称 + range: 自定义待办{8},任务{4},需求{3},缺陷{3},测试任务{2} + format: "" +- field: objectID + note: 关联对象ID + range: 0{8},10-50:5{12} + format: "" +- field: status + note: 状态 + range: wait{15},doing{3},done{2} + format: "" +- field: pri + note: 优先级 + range: 1{5},2{10},3{5} + format: "" +- field: begin + note: 开始时间 + range: 0800{5},0900{10},1000{3},2400{2} + format: "" +- field: end + note: 结束时间 + range: 1700{5},1800{10},1900{3},2400{2} + format: "" +- field: date + note: 日期 + range: (d){15},(d+1){3},(d+2){2} + format: YYYY-MM-DD +- field: assignedTo + note: 指派给 + range: admin{10},user1{5},user2{5} + format: "" +- field: assignedBy + note: 指派者 + range: admin{15},user1{3},user2{2} + format: "" +- field: assignedDate + note: 指派日期 + range: (now){20} + format: YYYY-MM-DD hh:mm:ss +- field: private + note: 是否私有 + range: 0{18},1{2} + format: "" +- field: desc + note: 描述 + range: 这是一个测试待办{10},待办描述内容{8},[]..{2} + format: "" +- field: vision + note: 视图 + range: rnd{20} + format: "" +- field: deleted + note: 是否删除 + range: 0{20} + format: "" \ No newline at end of file