Merge branch ztflow-yidong-release/21.7.2#wangyidong of zentao/zentaopms (#9396)

This commit is contained in:
刘刚
2025-06-11 13:19:23 +08:00
committed by Gitfox
19 changed files with 199 additions and 114 deletions
+5 -6
View File
@@ -12,7 +12,6 @@ timeout=0
cid=1
- 测试替换看板执行的二级菜单第kanban条的link属性 @看板|execution|kanban|executionID=%s
- 查看交付物菜单第deliverable条的link属性 @交付物|execution|deliverable|executionID=%s
- 查看构建菜单第build条的link属性 @构建|execution|build|executionID=%s
- 查看累积流图菜单第CFD条的link属性 @累积流图|execution|cfd|executionID=%s
- 查看设置菜单第settings条的link属性 @设置|execution|view|executionID=%s
@@ -20,8 +19,8 @@ cid=1
*/
$executionTester = new executionTest();
r($executionTester->setKanbanMenuTest()) && p('kanban:link') && e('看板|execution|kanban|executionID=%s'); // 测试替换看板执行的二级菜单
r($executionTester->setKanbanMenuTest()) && p('deliverable:link') && e('交付物|execution|deliverable|executionID=%s'); // 查看交付物菜单
r($executionTester->setKanbanMenuTest()) && p('build:link') && e('构建|execution|build|executionID=%s'); // 查看构建菜单
r($executionTester->setKanbanMenuTest()) && p('CFD:link') && e('累积流图|execution|cfd|executionID=%s'); // 查看累积流图菜单
r($executionTester->setKanbanMenuTest()) && p('settings:link') && e('设置|execution|view|executionID=%s'); // 查看设置菜单
$menu = $executionTester->setKanbanMenuTest();
r($menu) && p('kanban:link') && e('看板|execution|kanban|executionID=%s'); // 测试替换看板执行的二级菜单
r($menu) && p('build:link') && e('构建|execution|build|executionID=%s'); // 查看构建菜单
r($menu) && p('CFD:link') && e('累积流图|execution|cfd|executionID=%s'); // 查看累积流图菜单
r($menu) && p('settings:link') && e('设置|execution|view|executionID=%s'); // 查看设置菜单
@@ -43,42 +43,42 @@ include dirname(__FILE__, 5) . '/test/lib/init.php';
global $tester;
$product = $tester->loadModel('product');
$product->app->moduleName = 'product';
$product->app->methodName = 'browse';
$product->app->rawModule = 'product';
$product->app->rawMethod = 'browse';
r($product->computeLocate4DropMenu()) && p('0,1') && e('product,browse');
$product->app->moduleName = 'story';
$product->app->methodName = 'view';
$product->app->rawModule = 'story';
$product->app->rawMethod = 'view';
r($product->computeLocate4DropMenu()) && p('0,1') && e('product,browse');
$product->app->moduleName = 'story';
$product->app->methodName = 'create';
$product->app->rawModule = 'story';
$product->app->rawMethod = 'create';
r($product->computeLocate4DropMenu()) && p('0,1') && e('story,create');
$product->app->moduleName = 'story';
$product->app->methodName = 'report';
$product->app->rawModule = 'story';
$product->app->rawMethod = 'report';
r($product->computeLocate4DropMenu()) && p('0,1') && e('product,browse');
$product->app->moduleName = 'product';
$product->app->methodName = 'report';
$product->app->rawModule = 'product';
$product->app->rawMethod = 'report';
r($product->computeLocate4DropMenu()) && p('0,1') && e('product,browse');
$product->app->moduleName = 'bug';
$product->app->methodName = 'edit';
$product->app->rawModule = 'bug';
$product->app->rawMethod = 'edit';
r($product->computeLocate4DropMenu()) && p('0,1') && e('bug,browse');
$product->app->moduleName = 'bug';
$product->app->methodName = 'view';
$product->app->rawModule = 'bug';
$product->app->rawMethod = 'view';
r($product->computeLocate4DropMenu()) && p('0,1') && e('bug,view');
$product->app->moduleName = 'bug';
$product->app->methodName = 'report';
$product->app->rawModule = 'bug';
$product->app->rawMethod = 'report';
r($product->computeLocate4DropMenu()) && p('0,1') && e('bug,browse');
$product->app->moduleName = 'testcase';
$product->app->methodName = 'edit';
$product->app->rawModule = 'testcase';
$product->app->rawMethod = 'edit';
r($product->computeLocate4DropMenu()) && p('0,1') && e('testcase,browse');
$product->app->moduleName = 'testcase';
$product->app->methodName = 'view';
$product->app->rawModule = 'testcase';
$product->app->rawMethod = 'view';
r($product->computeLocate4DropMenu()) && p('0,1') && e('testcase,browse');
@@ -13,6 +13,12 @@ title=测试 programTao::buildProgramActionsMap();
timeout=0
cid=1
- 测试生成项目集id为1的操作按钮数据。第0条的name属性 @close
- 测试生成项目集id为2的操作按钮数据。第0条的name属性 @close
- 测试生成敏捷项目的操作按钮数据。第0条的name属性 @close
- 测试生成瀑布项目的操作按钮数据。第0条的name属性 @close
- 测试生成看板项目的操作按钮数据。第0条的name属性 @close
*/
$objectIdList = array(1, 2, 11, 60, 100);
+17 -2
View File
@@ -6,6 +6,21 @@ title=测试 programTao::getTaskStats();
timeout=0
cid=1
- 获取系统中所有项目的任务统计信息
- 第11条的totalEstimate属性 @51
- 第11条的totalConsumed属性 @13
- 第11条的totalLeft属性 @44
- 第11条的teamCount属性 @0
- 第11条的totalLeftNotDel属性 @44
- 第11条的totalConsumedNotDel属性 @13
- 获取系统中项目ID=60的任务统计信息
- 第60条的totalEstimate属性 @21
- 第60条的totalConsumed属性 @7
- 第60条的totalLeft属性 @18
- 第60条的teamCount属性 @0
- 第60条的totalLeftNotDel属性 @18
- 第60条的totalConsumedNotDel属性 @7
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
@@ -20,5 +35,5 @@ $projectIdList[] = array();
$projectIdList[] = array(60);
$programTester = new programTest();
r($programTester->getTaskStatsTest($projectIdList[0])) && p('11:totalEstimate,totalConsumed,totalLeft,teamCount,totalLeftNotDel,totalConsumedNotDel') && e('46,13,39,0,39,13'); // 获取系统中所有项目的任务统计信息
r($programTester->getTaskStatsTest($projectIdList[1])) && p('60:totalEstimate,totalConsumed,totalLeft,teamCount,totalLeftNotDel,totalConsumedNotDel') && e('18,7,15,0,15,7'); // 获取系统中项目ID=60的任务统计信息
r($programTester->getTaskStatsTest($projectIdList[0])) && p('11:totalEstimate,totalConsumed,totalLeft,teamCount,totalLeftNotDel,totalConsumedNotDel') && e('51,13,44,0,44,13'); // 获取系统中所有项目的任务统计信息
r($programTester->getTaskStatsTest($projectIdList[1])) && p('60:totalEstimate,totalConsumed,totalLeft,teamCount,totalLeftNotDel,totalConsumedNotDel') && e('21,7,18,0,18,7'); // 获取系统中项目ID=60的任务统计信息
+25 -25
View File
@@ -8,29 +8,29 @@ cid=0
- 禅道版本为开源版,检查任务关系。 @0
- 检查第一条任务关系
- 属性source @1-1
- 属性target @1-2
- 属性source @1
- 属性target @2
- 属性type @0
- 检查第二条任务关系
- 属性source @2-2
- 属性target @2-3
- 属性source @2
- 属性target @3
- 属性type @2
- 检查第三条任务关系
- 属性source @3-3
- 属性target @3-4
- 属性source @3
- 属性target @4
- 属性type @1
- 检查第四条任务关系
- 属性source @1-11
- 属性target @1-12
- 属性type @1
- 检查第五条任务关系
- 属性source @2-12
- 属性target @2-13
- 属性source @4
- 属性target @5
- 属性type @3
- 检查第六条任务关系
- 属性source @3-13
- 属性target @3-14
- 检查第五条任务关系
- 属性source @5
- 属性target @6
- 属性type @0
- 检查第六条任务关系
- 属性source @6
- 属性target @7
- 属性type @2
*/
@@ -39,7 +39,7 @@ su('admin');
$relationoftasks = zenData('relationoftasks');
$relationoftasks->id->range('1-100');
$relationoftasks->execution->range('1-10');
$relationoftasks->project->range('1');
$relationoftasks->pretask->range('1-100');
$relationoftasks->condition->range('end{2},begin{2}');
$relationoftasks->task->range('2-100');
@@ -49,16 +49,16 @@ $relationoftasks->gen(20);
global $tester;
$tester->loadModel('programplan');
$planIdList = array(1,2,3);
$planId = 1;
$tester->programplan->config->edition = 'open';
r($tester->programplan->buildGanttLinks($planIdList)) && p() && e("0"); //禅道版本为开源版,检查任务关系。
r($tester->programplan->buildGanttLinks($planId)) && p() && e("0"); //禅道版本为开源版,检查任务关系。
$tester->programplan->config->edition = 'max';
$links = $tester->programplan->buildGanttLinks($planIdList);
r($links[0]) && p('source,target,type') && e('1,2,0'); //检查第一条任务关系
r($links[1]) && p('source,target,type') && e('2,3,2'); //检查第二条任务关系
r($links[2]) && p('source,target,type') && e('3,4,1'); //检查第三条任务关系
r($links[3]) && p('source,target,type') && e('11,12,1'); //检查第四条任务关系
r($links[4]) && p('source,target,type') && e('12,13,3'); //检查第五条任务关系
r($links[5]) && p('source,target,type') && e('13,14,0'); //检查第六条任务关系
$links = $tester->programplan->buildGanttLinks($planId);
r($links[0]) && p('source,target,type') && e('1,2,0'); //检查第一条任务关系
r($links[1]) && p('source,target,type') && e('2,3,2'); //检查第二条任务关系
r($links[2]) && p('source,target,type') && e('3,4,1'); //检查第三条任务关系
r($links[3]) && p('source,target,type') && e('4,5,3'); //检查第四条任务关系
r($links[4]) && p('source,target,type') && e('5,6,0'); //检查第五条任务关系
r($links[5]) && p('source,target,type') && e('6,7,2'); //检查第六条任务关系
@@ -17,13 +17,13 @@ cid=0
- 属性realBegan @``
- 属性realEnd @``
- 传入进行中的任务数据
- 属性start @2023-10-01
- 属性end @2023-10-01
- 属性start @2023-09-28
- 属性end @2023-09-29
- 属性realBegan @2023-10-01
- 属性realEnd @``
- 传入已完成的任务数据
- 属性start @2023-10-01
- 属性end @2023-10-02
- 属性start @2023-09-28
- 属性end @2023-09-29
- 属性realBegan @2023-10-01
- 属性realEnd @2023-10-02
@@ -54,8 +54,8 @@ r($tester->programplan->getTaskDateLimit($task)) && p('start,end,realBegan,re
$task->realStarted = '2023-10-01';
$task->status = 'doing';
r($tester->programplan->getTaskDateLimit($task)) && p('start,end,realBegan,realEnd') && e('2023-10-01,2023-10-01,2023-10-01,``'); //传入进行中的任务数据
r($tester->programplan->getTaskDateLimit($task)) && p('start,end,realBegan,realEnd') && e('2023-09-28,2023-09-29,2023-10-01,``'); //传入进行中的任务数据
$task->finishedDate = '2023-10-02';
$task->status = 'done';
r($tester->programplan->getTaskDateLimit($task)) && p('start,end,realBegan,realEnd') && e('2023-10-01,2023-10-02,2023-10-01,2023-10-02'); //传入已完成的任务数据
r($tester->programplan->getTaskDateLimit($task)) && p('start,end,realBegan,realEnd') && e('2023-09-28,2023-09-29,2023-10-01,2023-10-02'); //传入已完成的任务数据
@@ -2,16 +2,36 @@
<?php
/**
* Test searchTao->processBuildinFields()
*
* @title=测试 searchTao->processBuildinFields();
* @timeout=0
* @cid=1
title=测试 searchTao->processBuildinFields();
cid=1
- projectstory
- 属性module @story
- 属性fields @title,id,keywords,status,pri,module,stage,grade,plan,estimate,source,sourceNote,fromBug,category,openedBy,reviewedBy,result,assignedTo,closedBy,lastEditedBy,mailto,closedReason,version,openedDate,reviewedDate,assignedDate,closedDate,lastEditedDate,activatedDate
- 属性maxCount @500
- bug
- 属性module @bug
- 属性fields @title,module,keywords,steps,assignedTo,resolvedBy,status,confirmed,story,project,branch,plan,id,execution,severity,pri,type,os,browser,resolution,activatedCount,toTask,toStory,openedBy,closedBy,lastEditedBy,mailto,openedBuild,resolvedBuild,openedDate,assignedDate,resolvedDate,closedDate,lastEditedDate,deadline,activatedDate
- 属性maxCount @500
- product
- 属性module @story
- 属性fields @title,id,keywords,status,pri,module,stage,grade,plan,estimate,source,sourceNote,fromBug,category,openedBy,reviewedBy,result,assignedTo,closedBy,lastEditedBy,mailto,closedReason,version,openedDate,reviewedDate,assignedDate,closedDate,lastEditedDate,activatedDate
- 属性maxCount @500
- testcase
- 属性module @testcase
- 属性fields @title,story,id,keywords,lastEditedBy,type,auto,openedBy,status,stage,module,pri,lib,lastRunner,lastRunResult,lastRunDate,openedDate,lastEditedDate,scene
- 属性maxCount @500
- caselib
- 属性module @caselib
- 属性fields @title,story,id,keywords,lastEditedBy,type,auto,openedBy,status,stage,module,pri,openedDate,lastEditedDate
- 属性maxCount @500
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/search.unittest.class.php';
zenData('product')->gen(2);
su('admin');
$search = new searchTest();
@@ -219,7 +219,7 @@ class settingTest
$params['section'] = 'global';
$params['key'] = 'version';
$objects = $this->objectModel->createDAO($params)->fetchAll();
$objects = $this->objectModel->createDAO($params)->fetchAll('', false);
return $objects;
}
+8 -1
View File
@@ -539,7 +539,14 @@ class storyTao extends storyModel
if(strpos($orderBy, 'version_') !== false) $orderBy = str_replace('version_', 't2.version_', $orderBy);
$unclosedStatus = $this->getUnclosedStatusKeys();
return $storyDAO->beginIF(!empty($productID) && (!$project->charter || ($project->charter && $project->hasProduct)))->andWhere('t1.product')->eq($productID)->fi()
$assignProduct = false;
if(!empty($productID) && !empty($project))
{
if(empty($project->charter)) $assignProduct = true;
if(!empty($project->charter) && $project->hasProduct) $assignProduct = true;
}
return $storyDAO->beginIF($assignProduct)->andWhere('t1.product')->eq($productID)->fi()
->beginIF($type == 'bybranch' and $branch !== '')->andWhere('t2.branch')->in("0,$branch")->fi()
->beginIF(strpos('draft|reviewing|changing|closed', $type) !== false)->andWhere('t2.status')->eq($type)->fi()
->beginIF($type == 'unclosed')->andWhere('t2.status')->in($unclosedStatus)->fi()
@@ -636,6 +636,7 @@ class storyTest
unset($unclosedStatus['closed']);
$storyIdList = array('1,2,3,4,5,6,7');
$project = $this->objectModel->dao->select("*")->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch();
$storyDAO = $this->objectModel->dao->select("DISTINCT t2.*")->from(TABLE_PROJECTSTORY)->alias('t1')
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t2.product = t3.id')
@@ -644,7 +645,7 @@ class storyTest
->andWhere('t2.deleted')->eq(0)
->andWhere('t3.deleted')->eq(0);
return $this->objectModel->fetchProjectStories($storyDAO, $productID, $type, $branch, $storyIdList, 't2.id_desc', $pager);
return $this->objectModel->fetchProjectStories($storyDAO, $productID, $type, $branch, $storyIdList, 't2.id_desc', $pager, empty($project) ? null : $project);
}
/**
@@ -818,7 +819,7 @@ class storyTest
$this->objectModel->doCreateSpec($storyID, $story, $files);
if(dao::isError()) return dao::getError();
return $this->objectModel->dao->select('*')->from(TABLE_STORYSPEC)->fetchAll();
return $this->objectModel->dao->select('*')->from(TABLE_STORYSPEC)->fetchAll('', false);
}
/**
+5 -5
View File
@@ -62,7 +62,7 @@ $story->gen(11)->fixPath();
$task = zenData('task');
$task->story->range('1-5');
$task->gen('10');
$task->gen('10')->fixPath();
$bug = zenData('bug');
$bug->story->range('1-5');
@@ -85,7 +85,7 @@ global $tester;
$tester->loadModel('story');
$allStoryIdList = array(1,2,3,4,5,6,7,8,9,10,11);
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->orderBy('id_desc')->fetchAll('id', false);
$leafNodes = $tester->story->getLeafNodes($stories);
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('root')->in('1,11')->andWhere('deleted')->eq(0)->orderBy('type,grade,parent')->fetchAll('id');
@@ -99,7 +99,7 @@ r((array)$epicItems['lane_4']['bug'][0]) && p('id') && e('4');
r((array)$epicItems['lane_4']['case'][0]) && p('id') && e('4');
$allStoryIdList = array(2,3,4,5,6,7,8,9,10);
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('2,3,4')->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('2,3,4')->orderBy('id_desc')->fetchAll('id', false);
$leafNodes = $tester->story->getLeafNodes($stories, 'epic');
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('root')->in('1')->andWhere('deleted')->eq(0)->orderBy('type,grade,parent')->fetchAll('id');
@@ -111,7 +111,7 @@ r((array)$epicItems['lane_4']['bug'][0]) && p('id') && e('4');
r((array)$epicItems['lane_4']['case'][0]) && p('id') && e('4');
$allStoryIdList = array(5,6,7,8,9,10);
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('5,6,7,8,9,10')->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('5,6,7,8,9,10')->orderBy('id_desc')->fetchAll('id', false);
$leafNodes = $tester->story->getLeafNodes($stories, 'epic');
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('root')->in('1')->andWhere('deleted')->eq(0)->orderBy('type,grade,parent')->fetchAll('id');
@@ -120,4 +120,4 @@ r((array)$epicItems['lane_10']['requirement_2'][0]) && p('id') && e('3');
r((array)$epicItems['lane_10']['project'][0]) && p('id') && e('1');
r((array)$epicItems['lane_5']['task'][0]) && p('id') && e('5');
r((array)$epicItems['lane_5']['bug'][0]) && p('id') && e('5');
r((array)$epicItems['lane_5']['case'][0]) && p('id') && e('5');
r((array)$epicItems['lane_5']['case'][0]) && p('id') && e('5');
@@ -50,8 +50,8 @@ $_SESSION['executionStoryBrowseType'] = 'changing';
r(count($storyTest->fetchExecutionStoriesTest($executionID[1], $productID[1]))) && p() && e('5'); //传入产品,传入执行,设置SESSION。
$storyTest->objectModel->app->loadClass('pager', $static = true);
$storyTest->objectModel->app->moduleName = 'product';
$storyTest->objectModel->app->methodName = 'track';
$storyTest->objectModel->app->rawModule = 'product';
$storyTest->objectModel->app->rawMethod = 'track';
$_SESSION['executionStoryBrowseType'] = '';
$pager = new pager(0, 5, 1);
r(count($storyTest->fetchExecutionStoriesTest($executionID[1], $productID[1], $pager))) && p() && e('5'); //分页获取需求。
@@ -59,7 +59,7 @@ r(count($storyTest->fetchProjectStoriesTest($productID[1], $projectID[1], 'linke
r(count($storyTest->fetchProjectStoriesTest($productID[1], $projectID[1], 'unlinkedexecution'))) && p() && e('24'); //传入项目,获取未关联执行的需求。
$storyTest->objectModel->app->loadClass('pager', $static = true);
$storyTest->objectModel->app->moduleName = 'product';
$storyTest->objectModel->app->methodName = 'track';
$storyTest->objectModel->app->rawModule = 'product';
$storyTest->objectModel->app->rawMethod = 'track';
$pager = new pager(0, 5, 1);
r(count($storyTest->fetchProjectStoriesTest($productID[1], $projectID[1], 'unclosed', '', $pager))) && p() && e('5'); //分页获取需求。
@@ -70,8 +70,8 @@ r($storyTest->getExecutionStoriesBySearchTest($executionID[1], $queryID[0], $pro
r($storyTest->getExecutionStoriesBySearchTest($executionID[1], $queryID[0], $productID[1])) && p() && e('9'); //传入执行 ID,传入产品 ID。
$storyTest->objectModel->app->loadClass('pager', $static = true);
$storyTest->objectModel->app->moduleName = 'product';
$storyTest->objectModel->app->methodName = 'track';
$storyTest->objectModel->app->rawModule = 'product';
$storyTest->objectModel->app->rawMethod = 'track';
$pager = new pager(0, 5, 1);
$excludeStories = array(2, 4);
r($storyTest->getExecutionStoriesBySearchTest($executionID[1], $queryID[0], $productID[1], $excludeStories)) && p() && e('7'); //传入排除需求号。
@@ -33,7 +33,7 @@ su('admin');
global $tester;
$tester->loadModel('story');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('1')->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('1')->orderBy('id_desc')->fetchAll('id', false);
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('deleted')->eq(0)->orderBy('id_desc')->fetchAll('id');
$newStories = $tester->story->mergeChildrenForTrack(array(), array(), 'epic');
@@ -48,17 +48,17 @@ r(count($newStories)) && p() && e('0'); //stories传入空参数,检查new
$newStories = $tester->story->mergeChildrenForTrack($allStories, $stories, 'epic');
r(implode(';', array_keys($newStories))) && p() && e('1;4;3;10;9;8;2;7;6;5'); //传入正常的业务需求,检查newStories。
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('3')->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('3')->orderBy('id_desc')->fetchAll('id', false);
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('deleted')->eq(0)->orderBy('id_desc')->fetchAll('id');
$newStories = $tester->story->mergeChildrenForTrack($allStories, $stories, 'requirement');
r(implode(';', array_keys($newStories))) && p() && e('3;10;9;8'); //传入正常用户需求,检查newStories。
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('3')->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('3')->orderBy('id_desc')->fetchAll('id', false);
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('deleted')->eq(0)->orderBy('id_desc')->fetchAll('id');
$newStories = $tester->story->mergeChildrenForTrack($allStories, $stories, 'story');
r(count($newStories)) && p() && e('0'); //传入错误的用户参数,检查newStories。
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('8')->orderBy('id_desc')->fetchAll('id');
$stories = $tester->story->dao->select('*')->from(TABLE_STORY)->where('id')->in('8')->orderBy('id_desc')->fetchAll('id', false);
$allStories = $tester->story->dao->select('id,parent,isParent,root,path,grade,product,pri,type,status,stage,title,estimate')->from(TABLE_STORY)->where('deleted')->eq(0)->orderBy('id_desc')->fetchAll('id');
$newStories = $tester->story->mergeChildrenForTrack($allStories, $stories, 'story');
r(reset($newStories)) && p('id') && e('8'); //传入正常的研发需求,检查newStories。
r(reset($newStories)) && p('id') && e('8'); //传入正常的研发需求,检查newStories。
@@ -18,7 +18,7 @@ cid=0
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @activated
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @started
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @activated
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @finished
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask @0
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @finished
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @finished
- 执行task模块的createAutoUpdateTaskActionTest方法,参数是$oldParentTask 属性action @finished
@@ -41,6 +41,7 @@ cid=0
*/
zenData('action')->gen(0);
zenData('user')->loadYaml('user')->gen(5);
zenData('project')->loadYaml('project')->gen(3);
su('user4');
@@ -77,7 +78,7 @@ r($task->createAutoUpdateTaskActionTest($oldParentTask)) && p('action') && e('ac
$oldParentTask->id = 3;
$oldParentTask->status = 'done';
r($task->createAutoUpdateTaskActionTest($oldParentTask)) && p('action') && e('finished');
r($task->createAutoUpdateTaskActionTest($oldParentTask)) && p() && e('0');
$oldParentTask->status = 'cancel';
r($task->createAutoUpdateTaskActionTest($oldParentTask)) && p('action') && e('finished');
$oldParentTask->status = 'wait';
@@ -3,7 +3,27 @@
/**
title=测试 userTao->fetchExecutionTaskCount();
cid=1
pid=1
- 传入空数组,返回空数组。 @0
- 用户 admin 没有参与执行,返回空数组。 @0
- 用户 user1 参与了 5 个执行。 @5
- 执行 1 中指派给 user1 的任务数为 3。属性1 @3
- 执行 3 中指派给 user1 的任务数为 4。属性3 @4
- 执行 4 中指派给 user1 的任务数为 2。属性4 @2
- 执行 5 中指派给 user1 的任务数为 3。属性5 @3
- 用户 user2 参与了 5 个执行。 @5
- 执行 1 中指派给 user2 的任务数为 5。属性1 @5
- 执行 2 中指派给 user2 的任务数为 7。属性2 @7
- 执行 3 中指派给 user2 的任务数为 3。属性3 @3
- 执行 4 中指派给 user2 的任务数为 5。属性4 @5
- 执行 5 中指派给 user2 的任务数为 4。属性5 @4
- 用户 user3 参与了 5 个执行。 @5
- 执行 1 中指派给 user3 的任务数为 1。属性1 @1
- 执行 2 中指派给 user3 的任务数为 1。属性2 @1
- 执行 3 中指派给 user3 的任务数为 2。属性3 @2
- 执行 4 中指派给 user3 的任务数为 1。属性4 @1
- 执行 5 中指派给 user3 的任务数为 2。属性5 @2
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/user.unittest.class.php';
@@ -25,11 +45,11 @@ r($userTest->fetchExecutionTaskCountTest('user1', array())) && p() && e
r($userTest->fetchExecutionTaskCountTest('admin', $executionIdList)) && p() && e(0); // 用户 admin 没有参与执行,返回空数组。
$tasks = $userTest->fetchExecutionTaskCountTest('user1', $executionIdList);
r(count($tasks)) && p() && e(4); // 用户 user1 参与了 4 个执行。
r($tasks) && p(1) && e(2); // 执行 1 中指派给 user1 的任务数为 2。
r($tasks) && p(3) && e(2); // 执行 3 中指派给 user1 的任务数为 2。
r($tasks) && p(4) && e(1); // 执行 4 中指派给 user1 的任务数为 1。
r($tasks) && p(5) && e(1); // 执行 5 中指派给 user1 的任务数为 1。
r(count($tasks)) && p() && e(5); // 用户 user1 参与了 5 个执行。
r($tasks) && p(1) && e(3); // 执行 1 中指派给 user1 的任务数为 3。
r($tasks) && p(3) && e(4); // 执行 3 中指派给 user1 的任务数为 4。
r($tasks) && p(4) && e(2); // 执行 4 中指派给 user1 的任务数为 2。
r($tasks) && p(5) && e(3); // 执行 5 中指派给 user1 的任务数为 3。
$tasks = $userTest->fetchExecutionTaskCountTest('user2', $executionIdList);
r(count($tasks)) && p() && e(5); // 用户 user2 参与了 5 个执行。
+17 -9
View File
@@ -7,17 +7,25 @@ su('admin');
/**
title=测试 weeklyModel->getStaff();
cid=1
pid=1
cid=0
测试project值为0,date值为2022-05-01 >> 0
测试project值为0,date值为空 >> 0
测试project值为1,date值为2022-05-01 >> 0
测试project值为1,date值为空 >> 0
测试project值为11,date值为2022-05-01 >> 0
测试project值为11,date值为空 >> 0
- 测试project值为0,date值为2022-05-01 @0
- 测试project值为0,date值为空 @0
- 测试project值为1,date值为2022-05-01 @0
- 测试project值为1,date值为空 @0
- 测试project值为11,date值为2022-05-01 @0
- 测试project值为11,date值为空 @0
*/
$date = date('Y-m-d');
$project = zenData('project');
$project->type->range('stage');
$project->project->range('0,1,11');
$project->gen(20);
$task = zenData('task');
$task->execution->range('1-20');
$task->deadline->range("`2022-04-25`,`2022-05-31`,`{$date}`,`0000-00-00`");
$task->gen(50);
$projectList = array(0, 1, 11);
$dateList = array('2022-05-01', '');
@@ -29,4 +37,4 @@ r($weekly->getStaffTest($projectList[0], $dateList[1])) && p() && e('0'); //测
r($weekly->getStaffTest($projectList[1], $dateList[0])) && p() && e('0'); //测试project值为1,date值为2022-05-01
r($weekly->getStaffTest($projectList[1], $dateList[1])) && p() && e('0'); //测试project值为1,date值为空
r($weekly->getStaffTest($projectList[2], $dateList[0])) && p() && e('0'); //测试project值为11,date值为2022-05-01
r($weekly->getStaffTest($projectList[2], $dateList[1])) && p() && e('0'); //测试project值为11,date值为空
r($weekly->getStaffTest($projectList[2], $dateList[1])) && p() && e('0'); //测试project值为11,date值为空
+21 -13
View File
@@ -8,24 +8,32 @@ su('admin');
title=测试 weeklyModel->getTasksOfNextWeek();
cid=1
pid=1
测试project值为0,date值为2022-07-30 >> 子任务6
测试project值为0,date值为空 >> 0
测试project值为1,date值为2022-07-30 >> 0
测试project值为1,date值为空 >> 0
测试project值为11,date值为2022-07-30 >> 开发任务371
测试project值为11,date值为空 >> 0
- 测试project值为0,date值为2022-07-30第48条的name属性 @开发任务58
- 测试project值为0,date值为空 @0
- 测试project值为1,date值为2022-07-30第48条的name属性 @开发任务58
- 测试project值为1,date值为空 @0
- 测试project值为11,date值为2022-07-30第32条的name属性 @开发任务42
- 测试project值为11,date值为空 @0
*/
$date = date('Y-m-d', time() + 5 * 24 * 3600);
$project = zenData('project');
$project->type->range('stage');
$project->project->range('0,1,11');
$project->gen(20);
$task = zenData('task');
$task->execution->range('1-20');
$task->deadline->range("`2022-07-25`,`2022-07-31`,`{$date}`,`2022-08-02`");
$task->gen(50);
$projectList = array(0, 1, 11);
$dateList = array('2022-07-30', '');
$weekly = new weeklyTest();
r($weekly->getTasksOfNextWeekTest($projectList[0], $dateList[0])) && p('906:name') && e('子任务6'); //测试project值为0,date值为2022-07-30
r($weekly->getTasksOfNextWeekTest($projectList[0], $dateList[1])) && p() && e('0'); //测试project值为0,date值为空
r($weekly->getTasksOfNextWeekTest($projectList[1], $dateList[0])) && p() && e('0'); //测试project值为1,date值为2022-07-30
r($weekly->getTasksOfNextWeekTest($projectList[1], $dateList[1])) && p() && e('0'); //测试project值为1,date值为空
r($weekly->getTasksOfNextWeekTest($projectList[2], $dateList[0])) && p('361:name') && e('开发任务371'); //测试project值为11,date值为2022-07-30
r($weekly->getTasksOfNextWeekTest($projectList[2], $dateList[1])) && p() && e('0'); //测试project值为11,date值为空
r($weekly->getTasksOfNextWeekTest($projectList[0], $dateList[0])) && p('48:name') && e('开发任务58'); //测试project值为0,date值为2022-07-30
r($weekly->getTasksOfNextWeekTest($projectList[0], $dateList[1])) && p() && e('0'); //测试project值为0,date值为空
r($weekly->getTasksOfNextWeekTest($projectList[1], $dateList[0])) && p('48:name') && e('开发任务58'); //测试project值为1,date值为2022-07-30
r($weekly->getTasksOfNextWeekTest($projectList[1], $dateList[1])) && p() && e('0'); //测试project值为1,date值为空
r($weekly->getTasksOfNextWeekTest($projectList[2], $dateList[0])) && p('32:name') && e('开发任务42'); //测试project值为11,date值为2022-07-30
r($weekly->getTasksOfNextWeekTest($projectList[2], $dateList[1])) && p() && e('0'); //测试project值为11,date值为空