Merge branch feature/performance of zentao/zentaopms (#9759)

This commit is contained in:
刘刚
2025-06-20 17:50:03 +08:00
committed by Gitfox
27 changed files with 193 additions and 110 deletions
+3 -2
View File
@@ -3891,10 +3891,11 @@ class ztSessionHandler implements SessionHandlerInterface
public function write(string $id, string $sessData): bool
{
$sessFile = $this->getSessionFile($id);
if(!$sessFile) return false;
if(!$sessFile) return true;
if(file_exists($sessFile) && !is_writable($sessFile)) return true;
if(md5_file($sessFile) == md5($sessData)) return true;
if(file_put_contents($sessFile, $sessData, LOCK_EX)) return true;
return false;
return true;
}
/**
+2 -2
View File
@@ -2442,7 +2442,7 @@ class actionModel extends model
/* 恢复隐藏执行。 */
/* Resotre hidden execution. */
if($action->objectType == 'project' && !$object->multiple) $this->dao->update(TABLE_EXECUTION)->set('deleted')->eq('0')->where('project')->eq($object->id)->andWhere('multiple')->eq('0')->exec();
if($action->objectType == 'project' && empty($object->multiple)) $this->dao->update(TABLE_EXECUTION)->set('deleted')->eq('0')->where('project')->eq($object->id)->andWhere('multiple')->eq('0')->exec();
}
if($action->objectType == 'doc' && $object->files) $this->dao->update(TABLE_FILE)->set('deleted')->eq('0')->where('id')->in($object->files)->exec();
@@ -2644,7 +2644,7 @@ class actionModel extends model
->where($condition)
->andWhere("`date`")->ge($lastDate)
->andWhere("`date`")->lt($lastDate . ' 23:59:59')
->andWhere('action.id' . $direction . $lastAction->id)
->andWhere("`date` {$direction} '{$lastAction->originalDate}'")
->orderBy($this->session->actionOrderBy)
->limit(1)
->fetchAll();
@@ -120,7 +120,7 @@ class actionTest
* @access public
* @return string
*/
public function getListTest(string $objectType, int $objectID, string $edition = 'pms'): string
public function getListTest(string $objectType, int $objectID, string $edition = 'open'): string
{
global $tester;
$oldEdition = $tester->config->edition;
@@ -274,7 +274,7 @@ class actionTest
if(dao::isError()) return dao::getError();
global $tester;
$objects = $tester->dao->select('*')->from(TABLE_HISTORY)->where('action')->eq($actionID)->fetchAll();
$objects = $tester->dao->select('*')->from(TABLE_HISTORY)->where('action')->eq($actionID)->fetchAll('', false);
return $objects;
}
@@ -512,19 +512,22 @@ class actionTest
* Test compute the begin date and end date of a period.
*
* @param string $period
* @param string $date
* @param string $direction
* @access public
* @return array
*/
public function computeBeginAndEndTest($period)
public function computeBeginAndEndTest($period, $date = '', $direction = 'next')
{
$date = $this->objectModel->computeBeginAndEnd($period);
$this->objectModel->app->methodName = 'dynamic';
$date = $this->objectModel->computeBeginAndEnd($period, $date, $direction);
$today = date('Y-m-d');
$tomorrow = date('Y-m-d', strtotime('+1 days'));
$yesterday = date('Y-m-d', strtotime('-1 days'));
$twoDaysAgo = date('Y-m-d', strtotime('-2 days'));
if($period == 'all') return $date['begin'] == '1970-01-01' and $date['end'] == '2030-01-01';
if($period == 'all') return $date['begin'] == (date('Y') - 1) . '-01-01' and $date['end'] == '2030-01-01';
if($period == 'today') return $date['begin'] == $today and $date['end'] == $tomorrow;
if($period == 'yesterday') return $date['begin'] == $yesterday and $date['end'] == $today;
if($period == 'twodaysago') return $date['begin'] == $twoDaysAgo and $date['end'] == $yesterday;
@@ -611,7 +614,7 @@ class actionTest
if(dao::isError()) return dao::getError();
global $tester;
$objects = $tester->dao->select('*')->from(TABLE_ACTION)->where('action')->eq('deleted')->fetchAll();
$objects = $tester->dao->select('*')->from(TABLE_ACTION)->where('action')->eq('deleted')->fetchAll('', false);
return $objects;
}
@@ -751,7 +754,7 @@ class actionTest
if(!$stage || $stage->deleted) return false;
}
if(isset($actionList[2]) && $actionList[2]->extra == '0') return true;
if(isset($actionList[2]) && $actionList[2]->extra == '0') return $actionList;
return false;
}
+19 -19
View File
@@ -6,10 +6,10 @@ use function zin\wg;
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('user')->gen(60);
su('admin');
zenData('action')->loadYaml('action')->gen(60);
zenData('actionrecent')->loadYaml('action')->gen(60);
zenData('action')->loadYaml('action')->gen(60, true, false);
zenData('actionrecent')->loadYaml('action')->gen(60, true, false);
su('admin');
/**
@@ -19,49 +19,49 @@ cid=1
- 测试创建下一个动作日期组 今天 日期倒序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建下一个动作日期组 昨天 日期倒序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 测试创建下一个动作日期组 今天 日期倒序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建下一个动作日期组 昨天 日期倒序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 测试创建下一个动作日期组 今天 日期正序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建下一个动作日期组 昨天 日期正序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 测试创建下一个动作日期组 今天 日期正序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建下一个动作日期组 昨天 日期正序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 测试创建上一个动作日期组 今天 日期倒序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建上一个动作日期组 昨天 日期倒序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 测试创建上一个动作日期组 今天 日期倒序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建上一个动作日期组 昨天 日期倒序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 测试创建上一个动作日期组 今天 日期正序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建上一个动作日期组 昨天 日期正序 前一模块 my
- 属性dateCount @1
- 属性dateActions @1
- 测试创建上一个动作日期组 今天 日期正序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
- 属性dateActions @2
- 测试创建上一个动作日期组 昨天 日期正序 前一模块 company
- 属性dateCount @1
- 属性dateActions @1
@@ -75,19 +75,19 @@ $rawMethodList = array('my', 'company');
$action = new actionTest();
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[0], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 今天 日期倒序 前一模块 my
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[0], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,2'); // 测试创建下一个动作日期组 今天 日期倒序 前一模块 my
r($action->buildDateGroupTest($directionList[0], $typeList[1], $orderByList[0], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 昨天 日期倒序 前一模块 my
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[0], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 今天 日期倒序 前一模块 company
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[0], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,2'); // 测试创建下一个动作日期组 今天 日期倒序 前一模块 company
r($action->buildDateGroupTest($directionList[0], $typeList[1], $orderByList[0], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 昨天 日期倒序 前一模块 company
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[1], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 今天 日期正序 前一模块 my
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[1], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,2'); // 测试创建下一个动作日期组 今天 日期正序 前一模块 my
r($action->buildDateGroupTest($directionList[0], $typeList[1], $orderByList[1], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 昨天 日期正序 前一模块 my
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[1], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 今天 日期正序 前一模块 company
r($action->buildDateGroupTest($directionList[0], $typeList[0], $orderByList[1], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,2'); // 测试创建下一个动作日期组 今天 日期正序 前一模块 company
r($action->buildDateGroupTest($directionList[0], $typeList[1], $orderByList[1], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建下一个动作日期组 昨天 日期正序 前一模块 company
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[0], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 今天 日期倒序 前一模块 my
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[0], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,2'); // 测试创建上一个动作日期组 今天 日期倒序 前一模块 my
r($action->buildDateGroupTest($directionList[1], $typeList[1], $orderByList[0], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 昨天 日期倒序 前一模块 my
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[0], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 今天 日期倒序 前一模块 company
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[0], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,2'); // 测试创建上一个动作日期组 今天 日期倒序 前一模块 company
r($action->buildDateGroupTest($directionList[1], $typeList[1], $orderByList[0], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 昨天 日期倒序 前一模块 company
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[1], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 今天 日期正序 前一模块 my
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[1], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,2'); // 测试创建上一个动作日期组 今天 日期正序 前一模块 my
r($action->buildDateGroupTest($directionList[1], $typeList[1], $orderByList[1], $rawMethodList[0])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 昨天 日期正序 前一模块 my
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[1], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 今天 日期正序 前一模块 company
r($action->buildDateGroupTest($directionList[1], $typeList[0], $orderByList[1], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,2'); // 测试创建上一个动作日期组 今天 日期正序 前一模块 company
r($action->buildDateGroupTest($directionList[1], $typeList[1], $orderByList[1], $rawMethodList[1])) && p('dateCount,dateActions') && e('1,1'); // 测试创建上一个动作日期组 昨天 日期正序 前一模块 company
@@ -19,6 +19,12 @@ cid=1
- 测试计算lastweek的日期 @1
- 测试计算thismonth的日期 @1
- 测试计算lastmonth的日期 @1
- 测试计算2025-06-11的日期的next排序
- 属性begin @1970-01-01
- 属性end @2025-06-11
- 测试计算2025-06-11的日期的pre排序
- 属性begin @2025-06-11
- 属性end @2030-01-01
*/
@@ -34,4 +40,6 @@ r($action->computeBeginAndEndTest($typeList[4])) && p() && e('1'); // 测试计
r($action->computeBeginAndEndTest($typeList[5])) && p() && e('1'); // 测试计算thisweek的日期
r($action->computeBeginAndEndTest($typeList[6])) && p() && e('1'); // 测试计算lastweek的日期
r($action->computeBeginAndEndTest($typeList[7])) && p() && e('1'); // 测试计算thismonth的日期
r($action->computeBeginAndEndTest($typeList[8])) && p() && e('1'); // 测试计算lastmonth的日期
r($action->computeBeginAndEndTest($typeList[8])) && p() && e('1'); // 测试计算lastmonth的日期
r($action->objectModel->computeBeginAndEnd($typeList[0], '2025-06-11', 'next')) && p('begin,end') && e('1970-01-01,2025-06-11'); // 测试计算2025-06-11的日期的next排序
r($action->objectModel->computeBeginAndEnd($typeList[0], '2025-06-11', 'pre')) && p('begin,end') && e('2025-06-11,2030-01-01'); // 测试计算2025-06-11的日期的pre排序
+2 -2
View File
@@ -55,7 +55,7 @@ cid=1
- 属性actor @系统
- 属性action @synctwins
- 测试升级中的并且版本号小于18.7的情况,不创建actionrecent @8
- 测试升级中的并且版本号大于18.7的情况,创建actionrecent @9
- 测试升级中的并且版本号大于18.7的情况,创建actionrecent @8
*/
$objectTypeList = array('task', 'project', 'user', 'bug', 'story');
@@ -92,7 +92,7 @@ $action->createTest($objectTypeList[0], $objectIDList[0], $storyActionTypeList[0
r($tester->dao->select('COUNT(1) AS count')->from('zt_actionrecent')->fetch('count')) && p() && e('8'); //测试升级中的并且版本号小于18.7的情况,不创建actionrecent
$action->createTest($objectTypeList[0], $objectIDList[0], $storyActionTypeList[0], $comment[0], '', '', '', $versionList[1]);
r($tester->dao->select('COUNT(1) AS count')->from('zt_actionrecent')->fetch('count')) && p() && e('9'); //测试升级中的并且版本号大于18.7的情况,创建actionrecent
r($tester->dao->select('COUNT(1) AS count')->from('zt_actionrecent')->fetch('count')) && p() && e('8'); //测试升级中的并且版本号大于18.7的情况,创建actionrecent
$tester->dao->update(TABLE_CONFIG)->set('value')->eq($version)->where('`key`')->eq('version')->andWhere('owner')->eq('system')->andWhere('module')->eq('common')->exec();
$tester->app->upgrading = false;
+16 -14
View File
@@ -3,6 +3,15 @@
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('action')->loadYaml('action')->gen(90);
zenData('actionrecent')->gen(0);
zenData('actionproduct')->loadYaml('actionproduct')->gen(90);
zenData('doclib')->gen(1);
zenData('doc')->gen(1);
zenData('lang')->gen(0);
zenData('product')->gen(1);
zenData('userquery')->loadYaml('userquery')->gen(1);
/**
title=测试 actionModel->getDynamicBySearch();
@@ -30,18 +39,11 @@ cid=1
- 第1条的id属性 @31
- 第1条的objectType属性 @bug
- 获取排序为date倒序的今年之后的动态
- 第0条的id属性 @1
- 第0条的objectType属性 @product
- 第0条的id属性 @31
- 第0条的objectType属性 @bug
*/
zenData('action')->loadYaml('action')->gen(90);
zenData('doclib')->gen(1);
zenData('doc')->gen(1);
zenData('lang')->gen(0);
zenData('product')->gen(1);
zenData('userquery')->loadYaml('userquery')->gen(1);
global $lang, $app;
$lang->SRCommon = '研发需求';
$lang->URCommon = '用户需求';
@@ -57,8 +59,8 @@ $directionList = array('next', 'pre');
$action = new actionTest();
r($action->getDynamicBySearchTest($queryID[0], $orderByList[0], $limit, $dateList[0], $directionList[0])) && p('0:id,objectType;1:id,objectType') && e('62,branch;31,bug'); // 获取排序为date倒序的所有动态
r($action->getDynamicBySearchTest($queryID[0], $orderByList[1], $limit, $dateList[0], $directionList[0])) && p('0:id,objectType;1:id,objectType') && e('63,module;32,testcase'); // 获取排序为date正序的所有动态
r($action->getDynamicBySearchTest($queryID[0], $orderByList[0], $limit, $dateList[0], $directionList[1])) && p('0:id,objectType;1:id,objectType') && e('62,branch;31,bug'); // 获取排序为date倒序的今年之后的动态
r($action->getDynamicBySearchTest($queryID[0], $orderByList[0], $limit, $dateList[1], $directionList[0])) && p('0:id,objectType;1:id,objectType') && e('61,todo;30,build'); // 获取排序为date倒序的今天之前的动态
r($action->getDynamicBySearchTest($queryID[1], $orderByList[0], $limit, $dateList[0], $directionList[1])) && p('0:id,objectType') && e('1,product'); // 获取排序为date倒序的今年之后的动态
r(array_values($action->getDynamicBySearchTest($queryID[0], $orderByList[0], $limit, $dateList[0], $directionList[0]))) && p('0:id,objectType;1:id,objectType') && e('64,testsuite;32,testcase'); // 获取排序为date倒序的所有动态
r(array_values($action->getDynamicBySearchTest($queryID[0], $orderByList[1], $limit, $dateList[0], $directionList[0]))) && p('0:id,objectType;1:id,objectType') && e('65,caselib;33,case'); // 获取排序为date正序的所有动态
r(array_values($action->getDynamicBySearchTest($queryID[0], $orderByList[0], $limit, $dateList[0], $directionList[1]))) && p('0:id,objectType;1:id,objectType') && e('64,testsuite;32,testcase'); // 获取排序为date倒序的今年之后的动态
r(array_values($action->getDynamicBySearchTest($queryID[0], $orderByList[0], $limit, $dateList[1], $directionList[0]))) && p('0:id,objectType;1:id,objectType') && e('63,module;31,bug'); // 获取排序为date倒序的今天之前的动态
r(array_values($action->getDynamicBySearchTest($queryID[1], $orderByList[0], $limit, $dateList[0], $directionList[1]))) && p('0:id,objectType') && e('31,bug'); // 获取排序为date倒序的今年之后的动态
+1 -1
View File
@@ -51,4 +51,4 @@ $_SESSION['actionQueryCondition'] = "1=1";
r($actionModel->getDynamicCount('today')) && p() && e('5'); // 测试传入条件 1=1。
$sql = $actionModel->dao->get();
r(strpos($sql, "SELECT count(1) AS count FROM `zt_actionrecent` AS action") !== false) && p() && e('1'); // 检查SQL。
r(strpos($sql, "SELECT action.id FROM `zt_actionrecent` AS action") !== false) && p() && e('1'); // 检查SQL。
+2 -2
View File
@@ -4,9 +4,9 @@
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('project')->gen(5);
zenData('actionrecent')->gen(0);
su('admin');
/**
+1 -17
View File
@@ -4,6 +4,7 @@ include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('action')->loadYaml('action')->gen(99);
zenData('actionrecent')->gen(0);
zenData('project')->gen(20, true, false);
zenData('project')->loadYaml('execution')->gen(90, false, false);
zenData('product')->loadYaml('product')->gen(50, true, false);
@@ -110,10 +111,6 @@ cid=1
- 测试 开源版 获取对象类型 risk 对象ID 1 的动态信息 @nochanged
- 测试 开源版 获取对象类型 isue 对象ID 1 的动态信息 @nochanged
- 测试 开源版 获取对象类型 opportunity 对象ID 1 的动态信息 @nochanged
- 测试获取对象类型 task 对象ID 12 的动态信息 @link
- 测试 开源版 获取对象类型 risk 对象ID 1 的动态信息 @link
- 测试 开源版 获取对象类型 isue 对象ID 1 的动态信息 @link
- 测试 开源版 获取对象类型 opportunity 对象ID 1 的动态信息 @link
- 测试获取对象类型 execution 对象ID 1 的动态信息 @link
- 测试获取对象类型 execution 对象ID 2 的动态信息 @link
- 测试获取对象类型 execution 对象ID 3 的动态信息 @link
@@ -339,19 +336,6 @@ r($action->getListTest($objectType[11], $hasOneID[0])) && p() && e('nochanged');
// 操作 importfromopportunitylib
r($action->getListTest($objectType[12], $hasOneID[0])) && p() && e('nochanged'); // 测试 开源版 获取对象类型 opportunity 对象ID 1 的动态信息
// 旗舰版 导入资产库相关
// 操作 importfromstorylib
r($action->getListTest($objectType[1], $taskID[11], 'max')) && p() && e('link'); // 测试获取对象类型 task 对象ID 12 的动态信息
// 操作 importfromrisklib
r($action->getListTest($objectType[10], $hasOneID[0], 'max')) && p() && e('link'); // 测试 开源版 获取对象类型 risk 对象ID 1 的动态信息
// 操作 importfromissuelib
r($action->getListTest($objectType[11], $hasOneID[0], 'max')) && p() && e('link'); // 测试 开源版 获取对象类型 isue 对象ID 1 的动态信息
// 操作 importfromopportunitylib
r($action->getListTest($objectType[12], $hasOneID[0], 'max')) && p() && e('link'); // 测试 开源版 获取对象类型 opportunity 对象ID 1 的动态信息
// 操作 opened 对象类型 execution
r($action->getListTest($objectType[13], $executionID[0])) && p() && e('link'); // 测试获取对象类型 execution 对象ID 1 的动态信息
+1 -1
View File
@@ -38,7 +38,7 @@ r(count($actionModel->getMoreActions($actionID))) && p() && e('0'); // 测试
$_SESSION['actionQueryCondition'] = "actor='admin' AND t2.product='1';";
r(count($actionModel->getMoreActions($actionID))) && p() && e('0'); // 测试传入条件 actor='admin' AND t2.product='1'。
$actionModel->dao->update(TABLE_ACTION)->set('date')->eq('2025-05-19 15:15:50')->exec();
$actionModel->dao->update(TABLE_ACTION)->set("`date` = concat('2025-05-19 15:15:5', id)")->exec();
$_SESSION['actionQueryCondition'] = "1=1";
r(count($actionModel->getMoreActions($actionID))) && p() && e('2'); // 测试传入条件 1=1。
+7 -4
View File
@@ -2,6 +2,8 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('actionrecent')->gen(0);
su('admin');
/**
@@ -11,12 +13,12 @@ timeout=0
cid=1
- 测试获取objectType product objectId 1的动态信息 @产品|product|view|productID=%s
- 测试获取objectType story objectId 2的动态信息 @研发需求|story|view|storyID=%s
- 测试获取objectType story objectId 2的动态信息 @研发需求|story|storyView|storyID=%s
- 测试获取objectType productplan objectId 3的动态信息 @计划|productplan|view|productID=%s
- 测试获取objectType release objectId 4的动态信息 @发布|release|view|productID=%s
- 测试获取objectType project objectId 5的动态信息 @项目|project|index|projectID=%s
- 测试获取objectType task objectId 6的动态信息 @任务|task|view|taskID=%s
- 测试获取objectType build objectId 7的动态信息 @版本|build|view|buildID=%s
- 测试获取objectType build objectId 7的动态信息 @构建|build|view|buildID=%s
- 测试获取objectType bug objectId 8的动态信息 @Bug|bug|view|bugID=%s
- 测试获取objectType testcase objectId 9的动态信息 @testcase
- 测试获取objectType case objectId 10的动态信息 @用例|testcase|view|caseID=%s
@@ -32,7 +34,8 @@ cid=1
- 测试获取objectType entry objectId 21的动态信息 @应用|entry|browse|
- 测试获取objectType webhook objectId 22的动态信息 @Webhook|webhook|browse|
- 测试获取objectType review objectId 23的动态信息 @review
- 测试获取objectType story objectId 25的动态信息 @用户需求|story|view|storyID=%s
- 测试获取objectType story objectId 25的动态信息 @用户需求|story|storyView|storyID=%s
- 测试获取objectType story objectId 26的动态信息 @业务需求|story|storyView|storyID=%s
*/
@@ -57,7 +60,7 @@ r($action->getObjectLabelTest($objectType[2], $objectId[2], $actionType[2], $
r($action->getObjectLabelTest($objectType[3], $objectId[3], $actionType[3], $requirements, $epics)) && p() && e('发布|release|view|productID=%s'); // 测试获取objectType release objectId 4的动态信息
r($action->getObjectLabelTest($objectType[4], $objectId[4], $actionType[4], $requirements, $epics)) && p() && e('项目|project|index|projectID=%s'); // 测试获取objectType project objectId 5的动态信息
r($action->getObjectLabelTest($objectType[5], $objectId[5], $actionType[5], $requirements, $epics)) && p() && e('任务|task|view|taskID=%s'); // 测试获取objectType task objectId 6的动态信息
r($action->getObjectLabelTest($objectType[6], $objectId[6], $actionType[6], $requirements, $epics)) && p() && e('版本|build|view|buildID=%s'); // 测试获取objectType build objectId 7的动态信息
r($action->getObjectLabelTest($objectType[6], $objectId[6], $actionType[6], $requirements, $epics)) && p() && e('构建|build|view|buildID=%s'); // 测试获取objectType build objectId 7的动态信息
r($action->getObjectLabelTest($objectType[7], $objectId[7], $actionType[7], $requirements, $epics)) && p() && e('Bug|bug|view|bugID=%s'); // 测试获取objectType bug objectId 8的动态信息
r($action->getObjectLabelTest($objectType[8], $objectId[8], $actionType[8], $requirements, $epics)) && p() && e('testcase'); // 测试获取objectType testcase objectId 9的动态信息
r($action->getObjectLabelTest($objectType[9], $objectId[9], $actionType[9], $requirements, $epics)) && p() && e('用例|testcase|view|caseID=%s'); // 测试获取objectType case objectId 10的动态信息
@@ -8,6 +8,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(20);
zenData('actionrecent')->gen(0);
zenData('userquery')->loadYaml('userquery')->gen(2);
zenData('story')->gen(10);
zenData('pipeline')->gen(5);
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(20);
zenData('actionrecent')->gen(0);
/**
+2 -2
View File
@@ -28,7 +28,7 @@ $actionModel = $tester->loadModel('action');
$lastAction = new stdclass();
$lastAction->id = 3;
$lastAction->originalDate = '2025-05-19 15:15:49';
$lastAction->originalDate = '2025-05-19 15:15:53';
$_SESSION['actionOrderBy'] = '`date` desc';
$_SESSION['actionQueryCondition'] = '';
@@ -46,6 +46,6 @@ r($actionModel->hasMoreAction($lastAction)) && p() && e('0'); // 测试传入
$sql = $actionModel->dao->get();
r(strpos($sql, "LEFT JOIN `zt_actionproduct` AS t2 ON action.id=t2.action") !== false) && p() && e('1'); // 检查SQL。
$actionModel->dao->update(TABLE_ACTION)->set('date')->eq('2025-05-19 15:15:50')->exec();
$actionModel->dao->update(TABLE_ACTION)->set("`date` = concat('2025-05-19 15:15:5', id)")->exec();
$_SESSION['actionQueryCondition'] = "1=1";
r($actionModel->hasMoreAction($lastAction)) && p() && e('1'); // 测试传入条件 1=1。
+3 -1
View File
@@ -2,9 +2,11 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(6);
zenData('actionrecent')->gen(0);
su('admin');
/**
+17 -5
View File
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(3);
zenData('actionrecent')->gen(0);
/**
@@ -12,13 +13,24 @@ title=测试 actionModel->hideAll();
timeout=0
cid=1
- 隐藏回收站全部信息
- 第0条的extra属性 @2
- 第1条的extra属性 @2
- 第2条的extra属性 @2
- 第一条日志隐藏回收站信息
- 属性id @1
- 属性action @deleted
- 属性extra @2
- 第二条日志隐藏回收站信息
- 属性id @2
- 属性action @deleted
- 属性extra @2
- 第三条日志隐藏回收站信息
- 属性id @3
- 属性action @deleted
- 属性extra @2
*/
$action = new actionTest();
r($action->hideAllTest()) && p('0:extra;1:extra;2:extra') && e('2;2;2'); // 隐藏回收站全部信息
$actions = $action->hideAllTest();
r($actions[0]) && p('id,action,extra') && e('1,deleted,2'); // 第一条日志隐藏回收站信息
r($actions[1]) && p('id,action,extra') && e('2,deleted,2'); // 第二条日志隐藏回收站信息
r($actions[2]) && p('id,action,extra') && e('3,deleted,2'); // 第三条日志隐藏回收站信息
+9 -5
View File
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(2);
zenData('actionrecent')->gen(0);
/**
@@ -13,7 +14,10 @@ timeout=0
cid=1
- 隐藏action1属性extra @2
- 隐藏action2属性extra @1
- 隐藏action2
- 属性id @2
- 属性action @created
- 属性extra @1
- 检查是否有action1的删除数据属性objectID @1
- 检查是否有action2的删除数据 @0
@@ -25,7 +29,7 @@ $deleteAction2SuccessActionID = 4;
$action = new actionTest();
r($action->hideOneTest($actionIDList[0])) && p('extra') && e('2'); //隐藏action1
r($action->hideOneTest($actionIDList[1])) && p('extra') && e('1'); //隐藏action2
r($action->getByIdTest($deleteAction1SuccessActionID)) && p('objectID') && e('1'); //检查是否有action1的删除数据
r($action->getByIdTest($deleteAction2SuccessActionID)) && p('') && e('0'); //检查是否有action2的删除数据
r($action->hideOneTest($actionIDList[0])) && p('extra') && e('2'); //隐藏action1
r($action->hideOneTest($actionIDList[1])) && p('id,action,extra') && e('2,created,1'); //隐藏action2
r($action->getByIdTest($deleteAction1SuccessActionID)) && p('objectID') && e('1'); //检查是否有action1的删除数据
r($action->getByIdTest($deleteAction2SuccessActionID)) && p('') && e('0'); //检查是否有action2的删除数据
+15 -11
View File
@@ -2,6 +2,10 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('action')->loadYaml('action')->gen(10);
zenData('actionrecent')->gen(0);
zenData('history')->gen(0);
su('admin');
/**
@@ -10,33 +14,33 @@ title=测试 actionModel->logHistory();
timeout=0
cid=1
- 测试新增actionID 10001 历史记录
- 测试新增actionID 1 历史记录
- 第0条的field属性 @name
- 第0条的old属性 @变更前名称
- 第0条的new属性 @变更后名称
- 第1条的field属性 @code
- 第1条的old属性 @变更前编号
- 第1条的new属性 @变更后编号
- 测试新增actionID 10002 历史记录
- 测试新增actionID 2 历史记录
- 第0条的field属性 @assignedTo
- 第0条的old属性 @admin
- 第0条的new属性 @test1
- 测试新增actionID 10003 历史记录
- 测试新增actionID 3 历史记录
- 第0条的field属性 @name
- 第0条的old属性 @name1
- 第0条的new属性 @name2
- 测试新增actionID 10004 历史记录
- 测试新增actionID 4 历史记录
- 第0条的field属性 @code
- 第0条的old属性 @code1
- 第0条的new属性 @code2
- 测试新增actionID 10005 历史记录
- 测试新增actionID 5 历史记录
- 第0条的field属性 @assignedTo
- 第0条的old属性 @test2
- 第0条的new属性 @test1
*/
$actionIDList = array('10001', '10002', '10003', '10004', '10005');
$actionIDList = array('1', '2', '3', '4', '5');
$changes1[0] = array('field' => 'name', 'old' => '变更前名称', 'new' => '变更后名称');
$changes1[1] = array('field' => 'code', 'old' => '变更前编号', 'new' => '变更后编号');
@@ -47,8 +51,8 @@ $changes5[0] = array('field' => 'assignedTo', 'old' => 'test2', 'new' => 'test1'
$action = new actionTest();
r($action->logHistoryTest($actionIDList[0], $changes1)) && p('0:field,old,new;1:field,old,new') && e('name,变更前名称,变更后名称;code,变更前编号,变更后编号'); // 测试新增actionID 10001 历史记录
r($action->logHistoryTest($actionIDList[1], $changes2)) && p('0:field,old,new') && e('assignedTo,admin,test1'); // 测试新增actionID 10002 历史记录
r($action->logHistoryTest($actionIDList[2], $changes3)) && p('0:field,old,new') && e('name,name1,name2'); // 测试新增actionID 10003 历史记录
r($action->logHistoryTest($actionIDList[3], $changes4)) && p('0:field,old,new') && e('code,code1,code2'); // 测试新增actionID 10004 历史记录
r($action->logHistoryTest($actionIDList[4], $changes5)) && p('0:field,old,new') && e('assignedTo,test2,test1'); // 测试新增actionID 10005 历史记录
r($action->logHistoryTest($actionIDList[0], $changes1)) && p('0:field,old,new;1:field,old,new') && e('name,变更前名称,变更后名称;code,变更前编号,变更后编号'); // 测试新增actionID 1 历史记录
r($action->logHistoryTest($actionIDList[1], $changes2)) && p('0:field,old,new') && e('assignedTo,admin,test1'); // 测试新增actionID 2 历史记录
r($action->logHistoryTest($actionIDList[2], $changes3)) && p('0:field,old,new') && e('name,name1,name2'); // 测试新增actionID 3 历史记录
r($action->logHistoryTest($actionIDList[3], $changes4)) && p('0:field,old,new') && e('code,code1,code2'); // 测试新增actionID 4 历史记录
r($action->logHistoryTest($actionIDList[4], $changes5)) && p('0:field,old,new') && e('assignedTo,test2,test1'); // 测试新增actionID 5 历史记录
@@ -2,9 +2,11 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->gen(10);
zenData('actionrecent')->gen(0);
su('admin');
/**
+48 -5
View File
@@ -3,19 +3,62 @@
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('user')->gen(10);
zenData('action')->gen(10);
zenData('actionrecent')->gen(0);
zenData('history')->loadYaml('history')->gen(25);
su('admin');
/**
title=测试 actionModel->processHistory();
timeout=0
cid=1
- 测试处理ID为的产品历史记录
- 属性field @PO
- 属性oldValue @~~
- 属性newValue @用户1
- 测试处理ID为的需求历史记录
- 属性field @status
- 属性oldValue @未开始
- 属性newValue @已关闭
- 测试处理ID为的计划历史记录
- 属性field @closedReason
- 属性oldValue @~~
- 属性newValue @已完成
- 测试处理ID为的发布历史记录
- 属性field @PM
- 属性oldValue @~~
- 属性newValue @用户4
- 测试处理ID为的项目历史记录
- 属性field @closedReason
- 属性oldValue @~~
- 属性newValue @已完成
- 测试处理ID为的任务历史记录
- 属性field @builder
- 属性oldValue @~~
- 属性newValue @用户8
- 测试处理ID为的版本历史记录
- 属性field @resolution
- 属性oldValue @~~
- 属性newValue @已解决
- 测试处理ID为的Bug历史记录
- 属性field @type
- 属性oldValue @单元测试
- 属性newValue @接口测试
- 测试处理ID为的用例历史记录
- 属性field @lastRunner
- 属性oldValue @~~
- 属性newValue @用户2
- 测试处理ID为的用例历史记录
- 属性field @stage
- 属性oldValue @单元测试阶段
- 属性newValue @功能测试阶段
*/
zenData('user')->gen(10);
su('admin');
zenData('history')->loadYaml('history')->gen(25);
$idList = array(1, 9, 10, 11, 16, 17, 20, 23, 24, 25);
$actionTester = new actionTest();
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(10);
zenData('actionrecent')->gen(0);
/**
+1
View File
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(5);
zenData('actionrecent')->gen(0);
/**
+14 -6
View File
@@ -3,11 +3,12 @@
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
zenData('user')->gen(5);
su('admin');
zenData('stage')->gen(5);
zenData('project')->loadYaml('project')->gen(5);
zenData('action')->loadYaml('action')->gen(4);
zenData('actionrecent')->gen(0);
su('admin');
/**
@@ -15,12 +16,19 @@ title=测试 actionModel->restoreStages();
timeout=0
cid=1
- 测试还原id为2和3的阶段 @1
- 测试还原id为2的阶段
- 属性id @1
- 属性action @deleted
- 属性extra @0
- 测试还原id为3的阶段
- 属性id @2
- 属性action @deleted
- 属性extra @0
*/
$action = new actionTest();
$hasDeleted = $action->restoreStagesTest(array(2 => 2, 3 => 3), array(1, 2));
r($hasDeleted) && p('') && e('1'); // 测试还原id为2和3的阶段
$actions = $action->restoreStagesTest(array(2 => 2, 3 => 3), array(1, 2));
r($actions[1]) && p('id,action,extra') && e('1,deleted,0'); // 测试还原id为2的阶段
r($actions[2]) && p('id,action,extra') && e('2,deleted,0'); // 测试还原id为3的阶段
+1
View File
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->gen(5);
zenData('actionrecent')->gen(0);
zenData('bug')->gen(1);
zenData('effort')->gen(1);
zenData('case')->gen(1);
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(25);
zenData('actionrecent')->gen(0);
zenData('product')->gen(1);
zenData('story')->gen(1);
zenData('productplan')->gen(1);
@@ -29,7 +30,7 @@ zenData('product')->gen(1);
/**
title=测试转换动态71 72 73 74 75 >> 分支1;这是一个模块1;这是测试套件名称1;这是测试套件名称1;2023-09-19EXECUTION
title=测试 actionModel->transformActions();
timeout=0
cid=101
+2 -1
View File
@@ -5,6 +5,7 @@ include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
su('admin');
zenData('action')->loadYaml('action')->gen(25);
zenData('actionrecent')->gen(0);
zenData('product')->loadYaml('product')->gen(2);
zenData('project')->loadYaml('execution')->gen(111);
zenData('repo')->loadYaml('repo')->gen(3);
@@ -134,4 +135,4 @@ r($result && $parentPlan->parent == '0') && p('') && e('1');
$result = $action->undeleteTest($actionIDList[25]);
$task = $tester->dao->select('*')->from('zt_task')->where('id')->eq('1')->fetch();
r($result && $task->parent == '-1') && p('') && e('1'); // 测试还原action 25, objectType task 的数据。
r($result && $task->deleted == '0') && p('') && e('1'); // 测试还原action 25, objectType task 的数据。