+ [misc] Add unit tests for executionZen::filterGroupTasks() method
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1205,7 +1205,7 @@ class executionZenTest
|
||||
$method = $this->executionZenTest->getMethod('filterGroupTasks');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$executionZen = $this->executionZenTest->newInstance();
|
||||
$executionZen = $this->executionZenTest->newInstanceWithoutConstructor();
|
||||
$result = $method->invokeArgs($executionZen, [$groupTasks, $groupBy, $filter, $allCount, $tasks]);
|
||||
|
||||
if(dao::isError()) {
|
||||
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 executionZen::filterGroupTasks();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- allCount保持不变属性allCount @3
|
||||
- 返回2个分组属性groupCount @2
|
||||
- allCount减少2属性allCount @1
|
||||
- 只剩1个分组属性groupCount @1
|
||||
- 只保留1个分组属性groupCount @1
|
||||
- allCount减少2属性allCount @1
|
||||
- allCount减少2属性allCount @2
|
||||
- 保留2个分组属性groupCount @2
|
||||
- 多人任务只计数一次,减少1属性allCount @3
|
||||
- 保留2个分组属性groupCount @2
|
||||
- allCount减少2属性allCount @1
|
||||
- 保留1个分组属性groupCount @1
|
||||
- allCount减少3属性allCount @1
|
||||
- 保留1个分组属性groupCount @1
|
||||
- allCount减少2属性allCount @2
|
||||
- 保留1个分组属性groupCount @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/executionzen.unittest.class.php';
|
||||
|
||||
zenData('task')->loadYaml('filtergrouptasks/task', false, 2)->gen(20);
|
||||
|
||||
su('admin');
|
||||
|
||||
$executionTest = new executionZenTest();
|
||||
|
||||
// 准备测试数据
|
||||
$task1 = new stdClass();
|
||||
$task1->id = 1;
|
||||
$task1->name = 'Task1';
|
||||
$task1->status = 'wait';
|
||||
$task1->mode = '';
|
||||
|
||||
$task2 = new stdClass();
|
||||
$task2->id = 2;
|
||||
$task2->name = 'Task2';
|
||||
$task2->status = 'doing';
|
||||
$task2->mode = '';
|
||||
|
||||
$task3 = new stdClass();
|
||||
$task3->id = 3;
|
||||
$task3->name = 'Task3';
|
||||
$task3->status = 'done';
|
||||
$task3->mode = '';
|
||||
|
||||
$task4 = new stdClass();
|
||||
$task4->id = 4;
|
||||
$task4->name = 'Task4';
|
||||
$task4->status = 'closed';
|
||||
$task4->mode = '';
|
||||
|
||||
$task5 = new stdClass();
|
||||
$task5->id = 5;
|
||||
$task5->name = 'Task5';
|
||||
$task5->status = 'wait';
|
||||
$task5->mode = 'multi';
|
||||
|
||||
$task6 = new stdClass();
|
||||
$task6->id = 6;
|
||||
$task6->name = 'Task6';
|
||||
$task6->status = 'done';
|
||||
$task6->mode = 'multi';
|
||||
|
||||
// 测试步骤1: filter为all时不过滤
|
||||
$groupTasks1 = array(0 => array($task1, $task2), 1 => array($task3));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks1, 'story', 'all', 3, array())) && p('allCount') && e('3'); // allCount保持不变
|
||||
r($executionTest->filterGroupTasksTest($groupTasks1, 'story', 'all', 3, array())) && p('groupCount') && e('2'); // 返回2个分组
|
||||
|
||||
// 测试步骤2: groupBy为story且filter为linked时,移除story为0的任务
|
||||
$groupTasks2 = array(0 => array($task1, $task2), 1 => array($task3));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks2, 'story', 'linked', 3, array())) && p('allCount') && e('1'); // allCount减少2
|
||||
r($executionTest->filterGroupTasksTest($groupTasks2, 'story', 'linked', 3, array())) && p('groupCount') && e('1'); // 只剩1个分组
|
||||
|
||||
// 测试步骤3: groupBy为pri且filter为noset时,只保留pri为0的任务
|
||||
$groupTasks3 = array(0 => array($task1), 1 => array($task2), 2 => array($task3));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks3, 'pri', 'noset', 3, array())) && p('groupCount') && e('1'); // 只保留1个分组
|
||||
r($executionTest->filterGroupTasksTest($groupTasks3, 'pri', 'noset', 3, array())) && p('allCount') && e('1'); // allCount减少2
|
||||
|
||||
// 测试步骤4: groupBy为assignedTo且filter为undone时,过滤已完成任务
|
||||
$groupTasks4 = array('user1' => array($task1, $task3), 'user2' => array($task2, $task4));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks4, 'assignedTo', 'undone', 4, array())) && p('allCount') && e('2'); // allCount减少2
|
||||
r($executionTest->filterGroupTasksTest($groupTasks4, 'assignedTo', 'undone', 4, array())) && p('groupCount') && e('2'); // 保留2个分组
|
||||
|
||||
// 测试步骤5: groupBy为assignedTo且filter为undone时,多人任务去重处理
|
||||
$groupTasks5 = array('user1' => array($task5, $task6), 'user2' => array($task5, $task6));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks5, 'assignedTo', 'undone', 4, array())) && p('allCount') && e('3'); // 多人任务只计数一次,减少1
|
||||
r($executionTest->filterGroupTasksTest($groupTasks5, 'assignedTo', 'undone', 4, array())) && p('groupCount') && e('2'); // 保留2个分组
|
||||
|
||||
// 测试步骤6: groupBy为finishedBy且tasks有空键时,移除空键数据
|
||||
$groupTasks6 = array('user1' => array($task1));
|
||||
$tasks6 = array('' => array($task2, $task3));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks6, 'finishedBy', 'filtered', 3, $tasks6)) && p('allCount') && e('1'); // allCount减少2
|
||||
r($executionTest->filterGroupTasksTest($groupTasks6, 'finishedBy', 'filtered', 3, $tasks6)) && p('groupCount') && e('1'); // 保留1个分组
|
||||
|
||||
// 测试步骤7: groupBy为closedBy且tasks有空键时,移除空键数据
|
||||
$groupTasks7 = array('user1' => array($task1));
|
||||
$tasks7 = array('' => array($task2, $task3, $task4));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks7, 'closedBy', 'filtered', 4, $tasks7)) && p('allCount') && e('1'); // allCount减少3
|
||||
r($executionTest->filterGroupTasksTest($groupTasks7, 'closedBy', 'filtered', 4, $tasks7)) && p('groupCount') && e('1'); // 保留1个分组
|
||||
|
||||
// 测试步骤8: groupBy为assignedTo且filter为undone时,验证非多人模式任务计数
|
||||
$groupTasks8 = array('user1' => array($task1, $task2, $task3, $task4));
|
||||
r($executionTest->filterGroupTasksTest($groupTasks8, 'assignedTo', 'undone', 4, array())) && p('allCount') && e('2'); // allCount减少2
|
||||
r($executionTest->filterGroupTasksTest($groupTasks8, 'assignedTo', 'undone', 4, array())) && p('groupCount') && e('1'); // 保留1个分组
|
||||
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: 任务测试数据
|
||||
desc: 用于测试filterGroupTasks方法的任务数据
|
||||
|
||||
fields:
|
||||
- field: id
|
||||
note: 任务ID
|
||||
range: 1-20
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: project
|
||||
note: 所属项目ID
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: parent
|
||||
note: 父任务ID
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: isParent
|
||||
note: 是否父任务
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: isTpl
|
||||
note: 是否模板
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: path
|
||||
note: 路径
|
||||
range: '`,1,`, `,2,`, `,3,`, `,4,`, `,5,`, `,6,`, `,7,`, `,8,`, `,9,`, `,10,`, `,11,`, `,12,`, `,13,`, `,14,`, `,15,`, `,16,`, `,17,`, `,18,`, `,19,`, `,20,`'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: execution
|
||||
note: 所属执行ID
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: module
|
||||
note: 所属模块ID
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: design
|
||||
note: 关联设计ID
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: story
|
||||
note: 关联需求ID
|
||||
range: '[0]{5}, [1,2,3]{15}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: storyVersion
|
||||
note: 需求版本
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: designVersion
|
||||
note: 设计版本
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: fromBug
|
||||
note: 来源Bug
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: feedback
|
||||
note: 关联反馈
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: fromIssue
|
||||
note: 来源问题
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: docs
|
||||
note: 关联文档
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: docVersions
|
||||
note: 文档版本
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: name
|
||||
note: 任务名称
|
||||
range: Task1,Task2,Task3,Task4,Task5,Task6,Task7,Task8,Task9,Task10,Task11,Task12,Task13,Task14,Task15,Task16,Task17,Task18,Task19,Task20
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: type
|
||||
note: 任务类型
|
||||
range: design,devel,test,study,discuss,ui,affair,misc
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: mode
|
||||
note: 任务模式
|
||||
range: '[]{15}, [multi]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: pri
|
||||
note: 优先级
|
||||
range: '[0]{5}, 1{5}, 2{5}, 3{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: estimate
|
||||
note: 预计工时
|
||||
range: 1-10
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: consumed
|
||||
note: 已消耗工时
|
||||
range: 0-5
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: left
|
||||
note: 剩余工时
|
||||
range: 1-5
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: deadline
|
||||
note: 截止日期
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: status
|
||||
note: 任务状态
|
||||
range: '[wait]{5}, [doing]{5}, [done]{5}, [closed]{3}, [cancel]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: subStatus
|
||||
note: 子状态
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: color
|
||||
note: 颜色
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: mailto
|
||||
note: 抄送给
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: keywords
|
||||
note: 关键词
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: desc
|
||||
note: 任务描述
|
||||
range: Test task description
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: version
|
||||
note: 版本
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: openedBy
|
||||
note: 由谁创建
|
||||
range: admin
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: openedDate
|
||||
note: 创建日期
|
||||
range: '2024-01-01 00:00:00'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: assignedTo
|
||||
note: 指派给
|
||||
range: '[]{3}, [user1]{5}, [user2]{5}, [user3]{4}, [admin]{3}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: assignedDate
|
||||
note: 指派日期
|
||||
range: '2024-01-02 00:00:00'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: estStarted
|
||||
note: 预计开始
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: realStarted
|
||||
note: 实际开始
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: finishedBy
|
||||
note: 由谁完成
|
||||
range: '[]{10}, [user1]{5}, [user2]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: finishedDate
|
||||
note: 完成日期
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: finishedList
|
||||
note: 完成列表
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: canceledBy
|
||||
note: 由谁取消
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: canceledDate
|
||||
note: 取消日期
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: closedBy
|
||||
note: 由谁关闭
|
||||
range: '[]{15}, [user1]{3}, [user2]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: closedDate
|
||||
note: 关闭日期
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: planDuration
|
||||
note: 计划工期
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: realDuration
|
||||
note: 实际工期
|
||||
range: 0
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: closedReason
|
||||
note: 关闭原因
|
||||
range: ""
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: lastEditedBy
|
||||
note: 最后编辑者
|
||||
range: admin
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: lastEditedDate
|
||||
note: 最后编辑日期
|
||||
range: '2024-01-03 00:00:00'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: deleted
|
||||
note: 是否删除
|
||||
range: '0'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: vision
|
||||
note: 视图
|
||||
range: rnd
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
Reference in New Issue
Block a user