Merge branch release/21.7.8 of zentao/zentaopms (#12914)
This commit is contained in:
@@ -5,16 +5,33 @@ declare(strict_types=1);
|
||||
/**
|
||||
|
||||
title=测试 actionTao::getNeedRelatedFields();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 测试story类型对象的相关字段获取 >> 期望返回product数组和project、execution字段@1,0,0
|
||||
- 测试productplan类型对象的相关字段获取 >> 期望正确返回product字段@0,0,0
|
||||
- 测试branch类型对象的相关字段获取 >> 期望正确返回product字段@0,0,0
|
||||
- 测试testcase类型对象的相关字段获取 >> 期望正确返回相关字段@1,1,6
|
||||
- 测试case类型对象的相关字段获取 >> 期望正确返回相关字段@1,1,6
|
||||
- 测试task类型对象的相关字段获取 >> 期望正确返回相关字段@1,1,6
|
||||
- 测试release类型对象的相关字段获取 >> 期望正确返回相关字段@1,1
|
||||
- 测试不存在的对象类型的相关字段获取 >> 期望正确处理不存在的情况@0,0,0
|
||||
- 测试story类型对象的相关字段获取第0条的0属性 @1
|
||||
- 测试productplan类型对象的相关字段获取
|
||||
- @1
|
||||
- 属性1 @0
|
||||
- 属性2 @0
|
||||
- 测试branch类型对象的相关字段获取
|
||||
- @1
|
||||
- 属性1 @0
|
||||
- 属性2 @0
|
||||
- 测试testcase类型对象的相关字段获取
|
||||
- 第0条的0属性 @1
|
||||
- 第0条的1属性 @~~
|
||||
- 第0条的2属性 @~~
|
||||
- 测试case类型对象的相关字段获取
|
||||
- 第0条的0属性 @1
|
||||
- 第0条的1属性 @~~
|
||||
- 第0条的2属性 @~~
|
||||
- 测试task类型对象的相关字段获取
|
||||
- 第0条的0属性 @~~
|
||||
- 第0条的1属性 @1
|
||||
- 第0条的2属性 @~~
|
||||
- 测试release类型对象的相关字段获取
|
||||
- 第0条的0属性 @1
|
||||
- 第0条的1属性 @~~
|
||||
|
||||
*/
|
||||
|
||||
@@ -93,11 +110,10 @@ su('admin');
|
||||
|
||||
$actionTest = new actionTest();
|
||||
|
||||
r($actionTest->getNeedRelatedFieldsTest('story', 1, 'created', '')) && p('0:0;1;2') && e('1,0,0'); // 测试story类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('productplan', 1, '', '')) && p('0;1;2') && e('1,0,0'); // 测试productplan类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('branch', 1, '', '')) && p('0;1;2') && e('1,0,0'); // 测试branch类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('testcase', 1, 'linked2testtask', '1')) && p('0:0;1;2') && e('1,1,6'); // 测试testcase类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('case', 1, 'run', '1')) && p('0:0;1;2') && e('1,1,6'); // 测试case类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('task', 1, '', '')) && p('0:0;1;2') && e('1,1,6'); // 测试task类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('release', 1, '', '')) && p('0:0;1') && e('1,1'); // 测试release类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('unknown', 999, '', '')) && p('0:0;1;2') && e('0,0,0'); // 测试不存在的对象类型的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('story', 1, 'created', '')) && p('0:0') && e('1'); // 测试story类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('productplan', 1, '', '')) && p('0,1,2') && e('1,0,0'); // 测试productplan类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('branch', 1, '', '')) && p('0,1,2') && e('1,0,0'); // 测试branch类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('testcase', 1, 'linked2testtask', '1')) && p('0:0,1,2') && e('1,~~,~~'); // 测试testcase类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('case', 1, 'run', '1')) && p('0:0,1,2') && e('1,~~,~~'); // 测试case类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('task', 1, '', '')) && p('0:0,1,2') && e('~~,1,~~'); // 测试task类型对象的相关字段获取
|
||||
r($actionTest->getNeedRelatedFieldsTest('release', 1, '', '')) && p('0:0,1') && e('1,~~'); // 测试release类型对象的相关字段获取
|
||||
@@ -17,16 +17,16 @@ cid=14957
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
|
||||
|
||||
zenData('project')->gen(5);
|
||||
zenData('product')->gen(5);
|
||||
zenData('doc')->gen(5);
|
||||
|
||||
$actionTest = new actionTest();
|
||||
global $tester;
|
||||
$tester->loadModel('action');
|
||||
|
||||
r($actionTest->getUndeleteParamsByObjectType('project')) && p('0') && e('`zt_project`'); // 查看通过项目获取的字段
|
||||
r($actionTest->getUndeleteParamsByObjectType('project')) && p('3') && e('id'); // 查看通过项目获取的字段
|
||||
r($actionTest->getUndeleteParamsByObjectType('product')) && p('2', '|') && e('id, name, code, acl'); // 查看通过产品获取的字段
|
||||
r($actionTest->getUndeleteParamsByObjectType('product')) && p('3') && e('id'); // 查看通过产品获取的字段
|
||||
r($actionTest->getUndeleteParamsByObjectType('doc')) && p('1') && e('version desc'); // 查看通过文档获取的字段
|
||||
r($tester->action->getUndeleteParamsByObjectType('project')) && p('0') && e('`zt_project`'); // 查看通过项目获取的字段
|
||||
r($tester->action->getUndeleteParamsByObjectType('project')) && p('3') && e('id'); // 查看通过项目获取的字段
|
||||
r($tester->action->getUndeleteParamsByObjectType('product')) && p('2', '|') && e('id, name, code, acl'); // 查看通过产品获取的字段
|
||||
r($tester->action->getUndeleteParamsByObjectType('product')) && p('3') && e('id'); // 查看通过产品获取的字段
|
||||
r($tester->action->getUndeleteParamsByObjectType('doc')) && p('1') && e('version desc'); // 查看通过文档获取的字段
|
||||
Regular → Executable
+21
-5
@@ -11,6 +11,22 @@ title=bugTao->processSearchQuery();
|
||||
timeout=0
|
||||
cid=15420
|
||||
|
||||
- 处理 bug 产品 1 分支 all 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5)
|
||||
|
||||
- 处理 bug 产品 2 分支 all 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5)
|
||||
|
||||
- 处理 bug 产品 1 分支 0 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'
|
||||
|
||||
- 处理 bug 产品 2 分支 0 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'
|
||||
|
||||
- 处理 story 产品 1 分支 all 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5)
|
||||
|
||||
- 处理 story 产品 2 分支 all 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5)
|
||||
|
||||
- 处理 story 产品 1 分支 0 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'
|
||||
|
||||
- 处理 story 产品 2 分支 0 的查询语句 @`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'
|
||||
|
||||
*/
|
||||
|
||||
$object = array('bug', 'story');
|
||||
@@ -25,12 +41,12 @@ $bug = $tester->loadModel('bug');
|
||||
|
||||
r($bug->processSearchQuery($object[0], 0, array($productIdList[0]), $branch[0])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5)"); // 处理 bug 产品 1 分支 all 的查询语句
|
||||
r($bug->processSearchQuery($object[0], 0, array($productIdList[1]), $branch[0])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5)"); // 处理 bug 产品 2 分支 all 的查询语句
|
||||
r($bug->processSearchQuery($object[0], 0, array($productIdList[0]), $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` in('0','0')"); // 处理 bug 产品 1 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[0], 0, array($productIdList[1]), $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` in('0','0')"); // 处理 bug 产品 2 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[0], 0, array($productIdList[0]), $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'"); // 处理 bug 产品 1 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[0], 0, array($productIdList[1]), $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'"); // 处理 bug 产品 2 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[1], 0, $productIdList[0], $branch[0])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5)"); // 处理 story 产品 1 分支 all 的查询语句
|
||||
r($bug->processSearchQuery($object[1], 0, $productIdList[1], $branch[0])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5)"); // 处理 story 产品 2 分支 all 的查询语句
|
||||
r($bug->processSearchQuery($object[1], 0, $productIdList[0], $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` in('0','0')"); // 处理 story 产品 1 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[1], 0, $productIdList[1], $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` in('0','0')"); // 处理 story 产品 2 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[1], 0, $productIdList[0], $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'"); // 处理 story 产品 1 分支 0 的查询语句
|
||||
r($bug->processSearchQuery($object[1], 0, $productIdList[1], $branch[1])) && p() && e("`product` != '0' AND `product` IN (1,2,3,4,5) AND `branch` = '0'"); // 处理 story 产品 2 分支 0 的查询语句
|
||||
|
||||
unset($_SESSION['bugQuery']);
|
||||
unset($_SESSION['storyBugQuery']);
|
||||
unset($_SESSION['storyBugQuery']);
|
||||
@@ -20,7 +20,7 @@ cid=16988
|
||||
- 属性color @#FFC20E
|
||||
- 执行kanbanTest模块的initCardItemTest方法,参数是4, 4, 4, array
|
||||
- 属性parent @0
|
||||
- 属性progress @30
|
||||
- 属性progress @30.00
|
||||
- 属性status @wait
|
||||
- 执行kanbanTest模块的initCardItemTest方法,参数是5, 5, 5, array
|
||||
- 属性group @2
|
||||
@@ -72,5 +72,5 @@ $kanbanTest = new kanbanTest();
|
||||
r($kanbanTest->initCardItemTest(1, 1, 1, array('admin' => 'avatar1.jpg', 'user1' => 'avatar2.jpg'), array('admin' => '管理员', 'user1' => '用户1'))) && p('title,id,assignedTo') && e('测试卡片1,1,admin');
|
||||
r($kanbanTest->initCardItemTest(2, 2, 2, array('user1' => 'avatar2.jpg'), array('user1' => '用户1'))) && p('assignedTo,realnames') && e('user1,用户1 ');
|
||||
r($kanbanTest->initCardItemTest(3, 3, 3, array('user2' => 'avatar3.jpg'), array('user2' => '用户2'))) && p('cardType,pri,color') && e('common,3,#FFC20E');
|
||||
r($kanbanTest->initCardItemTest(4, 4, 4, array(), array())) && p('parent,progress,status') && e('0,30,wait');
|
||||
r($kanbanTest->initCardItemTest(4, 4, 4, array(), array())) && p('parent,progress,status') && e('0,30.00,wait');
|
||||
r($kanbanTest->initCardItemTest(5, 5, 5, array('user1' => 'avatar2.jpg', 'user2' => 'avatar3.jpg'), array('user1' => '用户1', 'user2' => '用户2'))) && p('group,region,fromType') && e('2,1,task');
|
||||
@@ -7,8 +7,7 @@ title=测试 kanbanTao::refreshStoryCards();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 步骤1:测试需求卡片刷新,验证wait和projected阶段需求在backlog列
|
||||
- 属性backlog @
|
||||
- 步骤1:测试需求卡片刷新,验证wait和projected阶段需求在backlog列属性backlog @,2,
|
||||
- 步骤2:测试需求卡片刷新,验证designing阶段需求在designing列属性designing @~~
|
||||
- 步骤3:测试需求卡片刷新,验证designed阶段需求在designed列属性designed @~~
|
||||
- 步骤4:测试需求卡片刷新,验证developing阶段需求在developing列属性developing @~~
|
||||
@@ -44,7 +43,7 @@ $kanbanTest = new kanbanTaoTest();
|
||||
|
||||
// 5. 强制要求:必须包含至少5个测试步骤
|
||||
$cardPairs = array('backlog' => '', 'ready' => '', 'design' => '', 'designing' => '', 'designed' => '', 'develop' => '', 'developing' => '', 'developed' => '', 'test' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'rejected' => '', 'pending' => '', 'released' => '', 'closed' => '');
|
||||
r($kanbanTest->refreshStoryCardsTest($cardPairs, 1, '')) && p('backlog') && e(',2,'); // 步骤1:测试需求卡片刷新,验证wait和projected阶段需求在backlog列
|
||||
r($kanbanTest->refreshStoryCardsTest($cardPairs, 1, '')) && p('backlog', '|') && e(',2,'); // 步骤1:测试需求卡片刷新,验证wait和projected阶段需求在backlog列
|
||||
r($kanbanTest->refreshStoryCardsTest($cardPairs, 1, '')) && p('designing') && e('~~'); // 步骤2:测试需求卡片刷新,验证designing阶段需求在designing列
|
||||
r($kanbanTest->refreshStoryCardsTest($cardPairs, 1, '')) && p('designed') && e('~~'); // 步骤3:测试需求卡片刷新,验证designed阶段需求在designed列
|
||||
r($kanbanTest->refreshStoryCardsTest($cardPairs, 1, '')) && p('developing') && e('~~'); // 步骤4:测试需求卡片刷新,验证developing阶段需求在developing列
|
||||
|
||||
Regular → Executable
+7
-5
@@ -2,7 +2,9 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 pivotTao->getProductList();
|
||||
timeout=0
|
||||
cid=17446
|
||||
|
||||
- 查询所有的已关闭产品
|
||||
@@ -33,12 +35,12 @@ zenData('project')->gen(10);
|
||||
|
||||
global $tester;
|
||||
|
||||
$pivot = new pivotTest();
|
||||
$tester->loadModel('pivot');
|
||||
|
||||
$conditionList = array('', 'closedProduct');
|
||||
$IDList = array(array(), array(1, 2, 3, 5), array(5, 7 ,8, 9));
|
||||
|
||||
r($pivot->getProductList($conditionList[0], $IDList[0])) && p('1:id,name;9:id,name') && e('1,正常产品1;9,正常产品9'); //查询所有的已关闭产品
|
||||
r($pivot->getProductList($conditionList[1], $IDList[0])) && p('1:id,name;10:id,name') && e('1,正常产品1;10,正常产品10'); //查询所有的未关闭产品
|
||||
r($pivot->getProductList($conditionList[0], $IDList[1])) && p('1:id;5:id') && e('1,5'); //查询所有的已关闭产品,并且id在1,2,3,5中
|
||||
r($pivot->getProductList($conditionList[1], $IDList[2])) && p('5:id;7:id;9:id') && e('5,7,9'); //查询所有的未关闭产品,并且id在5,7,8,9中
|
||||
r($tester->pivot->getProductList($conditionList[0], $IDList[0])) && p('1:id,name;9:id,name') && e('1,正常产品1;9,正常产品9'); //查询所有的已关闭产品
|
||||
r($tester->pivot->getProductList($conditionList[1], $IDList[0])) && p('1:id,name;10:id,name') && e('1,正常产品1;10,正常产品10'); //查询所有的未关闭产品
|
||||
r($tester->pivot->getProductList($conditionList[0], $IDList[1])) && p('1:id;5:id') && e('1,5'); //查询所有的已关闭产品,并且id在1,2,3,5中
|
||||
r($tester->pivot->getProductList($conditionList[1], $IDList[2])) && p('5:id;7:id;9:id') && e('5,7,9'); //查询所有的未关闭产品,并且id在5,7,8,9中
|
||||
@@ -1,7 +1,11 @@
|
||||
<?php
|
||||
declare(strict_types = 1);
|
||||
class productplanZenTest
|
||||
require_once dirname(__FILE__, 5) . '/test/lib/test.class.php';
|
||||
class productplanZenTest extends baseTest
|
||||
{
|
||||
protected $moduleName = 'productplan';
|
||||
protected $className = 'zen';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
global $tester, $app;
|
||||
@@ -12,7 +16,7 @@ class productplanZenTest
|
||||
|
||||
$this->objectModel = $tester->loadModel('productplan');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 模拟buildActionsList方法的逻辑
|
||||
* Simulate buildActionsList method logic.
|
||||
@@ -70,7 +74,7 @@ class productplanZenTest
|
||||
$result->product = $product;
|
||||
$result->branchID = $branchID;
|
||||
$result->orderBy = $orderBy;
|
||||
|
||||
|
||||
// 模拟assignKanbanData方法的核心逻辑
|
||||
if($product->type == 'normal')
|
||||
{
|
||||
@@ -82,7 +86,7 @@ class productplanZenTest
|
||||
$result->type = 'branch';
|
||||
$result->branches = array(); // 简化返回
|
||||
}
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -169,11 +173,11 @@ class productplanZenTest
|
||||
public function setSessionForViewPageTest(int $planID, string $type, string $orderBy, int $pageID, int $recPerPage): array
|
||||
{
|
||||
global $app;
|
||||
|
||||
|
||||
$result = array();
|
||||
$beforeStoryList = isset($_SESSION['storyList']) ? $_SESSION['storyList'] : null;
|
||||
$beforeBugList = isset($_SESSION['bugList']) ? $_SESSION['bugList'] : null;
|
||||
|
||||
|
||||
// 模拟setSessionForViewPage的逻辑
|
||||
if(in_array($type, array('story', 'bug')) && ($orderBy != 'order_desc' || $pageID != 1 || $recPerPage != 100))
|
||||
{
|
||||
@@ -186,13 +190,13 @@ class productplanZenTest
|
||||
$_SESSION['bugList'] = $app->getURI(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$result['beforeStoryList'] = $beforeStoryList;
|
||||
$result['beforeBugList'] = $beforeBugList;
|
||||
$result['afterStoryList'] = isset($_SESSION['storyList']) ? $_SESSION['storyList'] : null;
|
||||
$result['afterBugList'] = isset($_SESSION['bugList']) ? $_SESSION['bugList'] : null;
|
||||
$result['sessionChanged'] = ($beforeStoryList != $result['afterStoryList']) || ($beforeBugList != $result['afterBugList']);
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -203,25 +207,12 @@ class productplanZenTest
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function assignViewDataTest(object $plan): array
|
||||
public function assignViewDataTest(object $plan)
|
||||
{
|
||||
$reflection = new ReflectionClass($this->objectZen);
|
||||
$method = $reflection->getMethod('assignViewData');
|
||||
$method->setAccessible(true);
|
||||
$method->invoke($this->objectZen, $plan);
|
||||
|
||||
$this->invokeArgs('assignViewData', [$plan]);
|
||||
$result = $this->getProperty('view');
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
$result = array();
|
||||
$result['parentPlan'] = isset($this->objectZen->view->parentPlan) ? $this->objectZen->view->parentPlan->id : null;
|
||||
$result['childrenPlans'] = isset($this->objectZen->view->childrenPlans) ? count($this->objectZen->view->childrenPlans) : 0;
|
||||
$result['plan'] = isset($this->objectZen->view->plan) ? $this->objectZen->view->plan->id : null;
|
||||
$result['gradeGroupSet'] = isset($this->objectZen->view->gradeGroup) ? 'set' : 'not_set';
|
||||
$result['actionsSet'] = isset($this->objectZen->view->actions) ? count($this->objectZen->view->actions) : 0;
|
||||
$result['usersSet'] = isset($this->objectZen->view->users) ? 'set' : 'not_set';
|
||||
$result['plansSet'] = isset($this->objectZen->view->plans) ? 'set' : 'not_set';
|
||||
$result['modulesSet'] = isset($this->objectZen->view->modules) ? 'set' : 'not_set';
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -237,18 +228,18 @@ class productplanZenTest
|
||||
public function buildBugSearchFormTest(object $plan, int $queryID, string $orderBy): array
|
||||
{
|
||||
global $config;
|
||||
|
||||
|
||||
$beforeActionURL = isset($config->bug->search['actionURL']) ? $config->bug->search['actionURL'] : null;
|
||||
$beforeQueryID = isset($config->bug->search['queryID']) ? $config->bug->search['queryID'] : null;
|
||||
$beforeStyle = isset($config->bug->search['style']) ? $config->bug->search['style'] : null;
|
||||
|
||||
|
||||
$reflection = new ReflectionClass($this->objectZen);
|
||||
$method = $reflection->getMethod('buildBugSearchForm');
|
||||
$method->setAccessible(true);
|
||||
$method->invoke($this->objectZen, $plan, $queryID, $orderBy);
|
||||
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
|
||||
$result = array();
|
||||
$result['actionURL'] = isset($config->bug->search['actionURL']) ? $config->bug->search['actionURL'] : null;
|
||||
$result['queryID'] = isset($config->bug->search['queryID']) ? $config->bug->search['queryID'] : null;
|
||||
@@ -258,7 +249,7 @@ class productplanZenTest
|
||||
$result['moduleValues'] = isset($config->bug->search['params']['module']['values']) ? count($config->bug->search['params']['module']['values']) : 0;
|
||||
$result['productFieldUnset'] = !isset($config->bug->search['fields']['product']);
|
||||
$result['branchHandled'] = true;
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,24 +7,27 @@ title=测试 productplanZen::assignViewData();
|
||||
timeout=0
|
||||
cid=17658
|
||||
|
||||
- 执行productplanTest模块的assignViewDataTest方法,参数是$normalPlan
|
||||
- 属性plan @1
|
||||
- 属性gradeGroupSet @set
|
||||
- 属性actionsSet @0
|
||||
- 属性usersSet @set
|
||||
- 属性plansSet @set
|
||||
- 属性modulesSet @set
|
||||
- 执行$result
|
||||
- 第plan,parentPlan条的id属性 @3
|
||||
- 执行$result
|
||||
- 属性plan @2
|
||||
- 属性childrenPlans @3
|
||||
- 执行$allPropertiesSet @1
|
||||
- 查看计划一的数据
|
||||
- 第plan条的id属性 @1
|
||||
- 第plan条的title属性 @普通计划
|
||||
- 第plan条的status属性 @wait
|
||||
- 查看计划二的数据
|
||||
- 第plan条的id属性 @2
|
||||
- 第plan条的title属性 @父计划
|
||||
- 第plan条的status属性 @doing
|
||||
- 查看计划三的数据
|
||||
- 第plan条的id属性 @3
|
||||
- 第plan条的title属性 @子计划1
|
||||
- 第plan条的status属性 @done
|
||||
- 查看计划五的数据
|
||||
- 第plan条的id属性 @5
|
||||
- 第plan条的title属性 @子计划3
|
||||
- 第plan条的status属性 @wait
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/productplan.unittest.class.php';
|
||||
include dirname(__FILE__, 2) . '/lib/productplanzen.unittest.class.php';
|
||||
|
||||
// zendata数据准备
|
||||
$productTable = zenData('product');
|
||||
@@ -36,11 +39,11 @@ $productTable->gen(3);
|
||||
$planTable = zenData('productplan');
|
||||
$planTable->product->range('1-3');
|
||||
$planTable->branch->range('0');
|
||||
$planTable->parent->range('0,-1,1,1,1');
|
||||
$planTable->parent->range('0,1,1,1,1');
|
||||
$planTable->title->range('普通计划,父计划,子计划1,子计划2,子计划3');
|
||||
$planTable->status->range('wait,doing,done,closed,wait');
|
||||
$planTable->begin->range('2024-01-01,2024-02-01,2024-02-05,2024-02-10,2024-02-15');
|
||||
$planTable->end->range('2024-12-31,2024-12-31,2024-03-05,2024-03-10,2024-03-15');
|
||||
$planTable->begin->prefix('2024-01-01');
|
||||
$planTable->end->prefix('2024-12-31');
|
||||
$planTable->deleted->range('0');
|
||||
$planTable->gen(5);
|
||||
|
||||
@@ -63,35 +66,21 @@ $userTable->gen(5);
|
||||
|
||||
su('admin');
|
||||
|
||||
$productplanTest = new productPlan();
|
||||
$productplanTest = new productplanZenTest();
|
||||
|
||||
// 测试步骤1:测试普通计划(无父子关系)的视图数据分配
|
||||
$normalPlan = $tester->loadModel('productplan')->getByID(1);
|
||||
if(!$normalPlan) $normalPlan = (object)array('id' => 1, 'product' => 1, 'branch' => 0, 'parent' => 0, 'title' => 'test plan 1', 'status' => 'wait');
|
||||
r($productplanTest->assignViewDataTest($normalPlan)) && p('plan,gradeGroupSet,actionsSet,usersSet,plansSet,modulesSet') && e('1,set,0,set,set,set');
|
||||
$plan = $tester->loadModel('productplan')->getByID(1);
|
||||
$result = $productplanTest->assignViewDataTest($plan);
|
||||
r($result) && p('plan:id,title,status') && e('1,普通计划,wait'); // 查看计划一的数据
|
||||
|
||||
// 测试步骤2:测试子计划(parent>0)的视图数据分配,检查父计划是否设置
|
||||
$childPlan = $tester->loadModel('productplan')->getByID(3);
|
||||
if(!$childPlan) $childPlan = (object)array('id' => 3, 'product' => 1, 'branch' => 0, 'parent' => 2, 'title' => 'test plan 3', 'status' => 'doing');
|
||||
$result = $productplanTest->assignViewDataTest($childPlan);
|
||||
r($result) && p('plan,parentPlan:id') && e('3,2');
|
||||
$plan = $tester->loadModel('productplan')->getByID(2);
|
||||
$result = $productplanTest->assignViewDataTest($plan);
|
||||
r($result) && p('plan:id,title,status') && e('2,父计划,doing'); // 查看计划二的数据
|
||||
|
||||
// 测试步骤3:测试父计划(parent=-1)的视图数据分配,检查子计划是否设置
|
||||
$parentPlan = $tester->loadModel('productplan')->getByID(2);
|
||||
if(!$parentPlan) $parentPlan = (object)array('id' => 2, 'product' => 1, 'branch' => 0, 'parent' => -1, 'title' => 'test plan 2', 'status' => 'doing');
|
||||
$result = $productplanTest->assignViewDataTest($parentPlan);
|
||||
r($result) && p('plan,childrenPlans') && e('2,3');
|
||||
$plan = $tester->loadModel('productplan')->getByID(3);
|
||||
$result = $productplanTest->assignViewDataTest($plan);
|
||||
r($result) && p('plan:id,title,status') && e('3,子计划1,done'); // 查看计划三的数据
|
||||
|
||||
// 测试步骤4:测试所有必需的视图属性是否正确设置
|
||||
$completePlan = $tester->loadModel('productplan')->getByID(5);
|
||||
if(!$completePlan) $completePlan = (object)array('id' => 5, 'product' => 3, 'branch' => 0, 'parent' => 2, 'title' => 'test plan 5', 'status' => 'wait');
|
||||
$result = $productplanTest->assignViewDataTest($completePlan);
|
||||
$allPropertiesSet = (
|
||||
$result['plan'] == 5 &&
|
||||
$result['gradeGroupSet'] == 'set' &&
|
||||
$result['actionsSet'] > 0 &&
|
||||
$result['usersSet'] == 'set' &&
|
||||
$result['plansSet'] == 'set' &&
|
||||
$result['modulesSet'] == 'set'
|
||||
);
|
||||
r($allPropertiesSet) && p() && e('1');
|
||||
$plan = $tester->loadModel('productplan')->getByID(5);
|
||||
$result = $productplanTest->assignViewDataTest($plan);
|
||||
r($result) && p('plan:id,title,status') && e('5,子计划3,wait'); // 查看计划五的数据
|
||||
Regular → Executable
+2
-1
@@ -4,6 +4,7 @@
|
||||
/**
|
||||
|
||||
title=测试 loadModel->buildPlanDataForGantt()
|
||||
timeout=0
|
||||
cid=17763
|
||||
|
||||
- 检查普通阶段,构建Gantt数据。
|
||||
@@ -43,4 +44,4 @@ r(isset($planItem->percent)) && p() && e('0'); //检查是否存在percent字段
|
||||
|
||||
$tester->programplan->config->setPercent = true;
|
||||
$plan->milestone = true;
|
||||
r((array)$tester->programplan->buildPlanDataForGantt($plan)) && p('id,type,text,start_date,percent') && e("1,plan,项目集1<icon class='icon icon-flag icon-sm red'></icon>,28-09-2023,10"); //里程碑阶段,并设置显示percent,检查构建数据。
|
||||
r((array)$tester->programplan->buildPlanDataForGantt($plan)) && p('id,type,text,start_date,percent') && e("1,plan,项目集1<icon class='icon icon-flag icon-sm red'></icon>,28-09-2023,10.00"); //里程碑阶段,并设置显示percent,检查构建数据。
|
||||
Executable
+38
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchModel->getObjectList();
|
||||
timeout=0
|
||||
cid=18328
|
||||
|
||||
- 查看获取到story类型对象
|
||||
- 第4条的id属性 @4
|
||||
- 第4条的type属性 @story
|
||||
- 查看获取到requirement类型对象
|
||||
- 第5条的id属性 @5
|
||||
- 第5条的type属性 @requirement
|
||||
- 查看获取到story类型对象
|
||||
- 第6条的id属性 @6
|
||||
- 第6条的type属性 @story
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
zenData('task')->gen(10);
|
||||
zenData('story')->gen(10);
|
||||
zenData('bug')->gen(10);
|
||||
zenData('case')->gen(10);
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('search');
|
||||
$idGroup = array('task' => array(1, 2, 3), 'story' => array(4, 5, 6), 'bug' => array(7, 8, 9), 'case' => array(10, 11, 12));
|
||||
|
||||
$result = $tester->search->getObjectList($idGroup);
|
||||
|
||||
r($result['story']) && p('4:id,type') && e('4,story'); // 查看获取到story类型对象
|
||||
r($result['story']) && p('5:id,type') && e('5,requirement'); // 查看获取到requirement类型对象
|
||||
r($result['story']) && p('6:id,type') && e('6,story'); // 查看获取到story类型对象
|
||||
@@ -26,7 +26,7 @@ $story = zenData('story');
|
||||
$story->id->range('1-100');
|
||||
$story->title->range('teststory');
|
||||
$story->product->range('1');
|
||||
$story->parent->range('`-1`,`-1`,0,1,1');
|
||||
$story->parent->range('0,1,1');
|
||||
$story->version->range('1');
|
||||
$story->gen(5);
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ $story->duplicateStory->range('0,4,0{100}');
|
||||
$story->linkStories->range('0,6,0{100}');
|
||||
$story->linkRequirements->range('3,0{100}');
|
||||
$story->toBug->range('0{9},1,0{100}');
|
||||
$story->parent->range('0{17},`-1`,0,18,0{100}');
|
||||
$story->parent->range('0{17},0,18,0{100}');
|
||||
$story->twins->range('``{27},30,``,28');
|
||||
$story->gen(30);
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ $story->duplicateStory->range('0,4,0{100}');
|
||||
$story->linkStories->range('0,6,0{100}');
|
||||
$story->linkRequirements->range('3,0{100}');
|
||||
$story->toBug->range('0{9},1,0{100}');
|
||||
$story->parent->range('0{17},`-1`,0,18,0{100}');
|
||||
$story->parent->range('0{17},0,18,0{100}');
|
||||
$story->twins->range('``{27},30,``,28');
|
||||
$story->gen(30);
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ $story->duplicateStory->range('0,4,0{100}');
|
||||
$story->linkStories->range('0,6,0{100}');
|
||||
$story->linkRequirements->range('3,0{100}');
|
||||
$story->toBug->range('0{9},1,0{100}');
|
||||
$story->parent->range('0{17},`-1`,0,18,0{100}');
|
||||
$story->parent->range('0{17},0,18,0{100}');
|
||||
$story->twins->range('``{27},30,``,28');
|
||||
$story->gen(30);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user