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

104 lines
6 KiB
PHP
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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');