znt/module/execution/test/tao/buildstorytree.php

104 lines
6 KiB
PHP
Raw Permalink Normal View History

#!/usr/bin/env php
<?php
/**
title=测试 executionTao::buildStoryTree();
timeout=0
cid=16384
- 执行$result1 @6
- 执行$result2[0]->children ?? [] @3
- 执行$result3[0]->tasksCount ?? 0 @3
- 执行executionTest模块的buildStoryTreeTest方法参数是array @0
- 执行$result5[0]
- 属性type @story
- 属性title @需求标题1
- 属性color @red
- 属性pri @2
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/tao.class.php';
// 准备测试数据
$storyTable = zenData('story');
$storyTable->loadYaml('story_buildstorytree', false, 2)->gen(10);
$taskTable = zenData('task');
$taskTable->loadYaml('task_buildstorytree', false, 2)->gen(15);
$userTable = zenData('user');
$userTable->loadYaml('user_buildstorytree', false, 2)->gen(5);
su('admin');
$executionTest = new executionTaoTest();
// 准备测试需要的数据结构
$stories = array();
$storyIds = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
foreach($storyIds as $storyId)
{
$story = new stdClass();
$story->id = $storyId;
$story->parent = in_array($storyId, [2, 3]) ? 1 : (in_array($storyId, [5, 6]) ? 4 : 0);
$story->title = "需求标题{$storyId}";
$story->type = $storyId <= 8 ? 'story' : 'requirement';
$story->color = $storyId % 4 == 1 ? 'red' : ($storyId % 4 == 2 ? 'blue' : '');
$story->pri = ($storyId % 4) + 1;
$story->grade = $storyId <= 6 ? 1 : 2;
$story->openedBy = 'admin';
$story->assignedTo = $storyId % 3 == 1 ? 'admin' : ($storyId % 3 == 2 ? 'user' : 'dev');
$story->status = 'active'; // 添加status属性
$story->version = 1; // 添加version属性
$story->taskVersion = 1; // 添加taskVersion属性
$stories[$storyId] = $story;
}
$taskGroups = array(
1821 => array(
1 => array(
1 => (object)array('id' => 1, 'name' => '需求1任务1', 'color' => '', 'pri' => 2, 'status' => 'wait', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'admin', 'openedBy' => 'admin', 'story' => 1, 'estStarted' => '2023-10-01', 'realStarted' => '2023-10-02', 'estimate' => 8, 'consumed' => 2, 'left' => 6),
2 => (object)array('id' => 2, 'name' => '需求1任务2', 'color' => '', 'pri' => 3, 'status' => 'doing', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'user', 'openedBy' => 'admin', 'story' => 1, 'estStarted' => '2023-10-05', 'realStarted' => '2023-10-06', 'estimate' => 5, 'consumed' => 3, 'left' => 2),
3 => (object)array('id' => 3, 'name' => '需求1任务3', 'color' => '', 'pri' => 1, 'status' => 'done', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'dev', 'openedBy' => 'user', 'story' => 1, 'estStarted' => '2023-10-10', 'realStarted' => '2023-10-11', 'estimate' => 3, 'consumed' => 3, 'left' => 0)
),
2 => array(
4 => (object)array('id' => 4, 'name' => '需求2任务1', 'color' => 'blue', 'pri' => 2, 'status' => 'wait', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'user', 'openedBy' => 'admin', 'story' => 2, 'estStarted' => '', 'realStarted' => '', 'estimate' => 6, 'consumed' => 0, 'left' => 6),
5 => (object)array('id' => 5, 'name' => '需求2任务2', 'color' => '', 'pri' => 3, 'status' => 'doing', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'dev', 'openedBy' => 'user', 'story' => 2, 'estStarted' => '', 'realStarted' => '', 'estimate' => 4, 'consumed' => 1, 'left' => 3)
),
4 => array(
6 => (object)array('id' => 6, 'name' => '需求4任务1', 'color' => 'red', 'pri' => 1, 'status' => 'wait', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'admin', 'openedBy' => 'dev', 'story' => 4, 'estStarted' => '', 'realStarted' => '', 'estimate' => 10, 'consumed' => 0, 'left' => 10),
7 => (object)array('id' => 7, 'name' => '需求4任务2', 'color' => '', 'pri' => 4, 'status' => 'done', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'user', 'openedBy' => 'admin', 'story' => 4, 'estStarted' => '', 'realStarted' => '', 'estimate' => 7, 'consumed' => 7, 'left' => 0),
8 => (object)array('id' => 8, 'name' => '需求4任务3', 'color' => '', 'pri' => 2, 'status' => 'closed', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'dev', 'openedBy' => 'user', 'story' => 4, 'estStarted' => '', 'realStarted' => '', 'estimate' => 5, 'consumed' => 5, 'left' => 0)
),
0 => array(
9 => (object)array('id' => 9, 'name' => '无需求任务1', 'color' => '', 'pri' => 3, 'status' => 'wait', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'admin', 'openedBy' => 'admin', 'story' => 0, 'estStarted' => '', 'realStarted' => '', 'estimate' => 2, 'consumed' => 0, 'left' => 2),
10 => (object)array('id' => 10, 'name' => '无需求任务2', 'color' => 'green', 'pri' => 1, 'status' => 'doing', 'parent' => 0, 'isParent' => '0', 'assignedTo' => 'user', 'openedBy' => 'dev', 'story' => 0, 'estStarted' => '', 'realStarted' => '', 'estimate' => 3, 'consumed' => 1, 'left' => 2)
)
)
);
$node = new stdClass();
$node->id = 1821;
$node->root = 1;
// 测试步骤1使用基本数据构建需求树检查返回结果数量只有根节点需求
$result1 = $executionTest->buildStoryTreeTest($stories, $taskGroups, 101, $node);
r(count($result1)) && p() && e('6');
// 测试步骤2测试父子需求关系检查父需求下是否包含子需求
$result2 = $executionTest->buildStoryTreeTest($stories, $taskGroups, 101, $node);
r(count($result2[0]->children ?? [])) && p() && e('3');
// 测试步骤3测试需求关联任务的构建检查需求1是否关联了任务
$result3 = $executionTest->buildStoryTreeTest($stories, $taskGroups, 101, $node);
r($result3[0]->tasksCount ?? 0) && p() && e('3');
// 测试步骤4测试空需求数组的处理
r(count($executionTest->buildStoryTreeTest(array(), $taskGroups, 101, $node))) && p() && e('0');
// 测试步骤5测试需求节点属性完整性验证需求节点包含必要属性
$result5 = $executionTest->buildStoryTreeTest($stories, $taskGroups, 101, $node);
r($result5[0]) && p('type,title,color,pri') && e('story,需求标题1,red,2');