Merge branch 'master' into zenops_46

This commit is contained in:
tanghucheng
2023-01-06 16:37:18 +08:00
71 changed files with 1548 additions and 428 deletions
+1
View File
@@ -124,6 +124,7 @@ $filter->project->story = new stdclass();
$filter->project->export = new stdclass();
$filter->project->task = new stdclass();
$filter->project->execution = new stdclass();
$filter->project->testcase = new stdclass();
$filter->projectstory->story = new stdclass();
$filter->qa->default = new stdclass();
$filter->story->create = new stdclass();
-1
View File
@@ -27,7 +27,6 @@
40812 将流程图融入使用帮助中的使用教程中
40809 地盘仪表盘删除流程图区块,增加使用帮助区块
40808 新用户登录禅道后,删除原弹窗引导
40806 欢迎总览页面中支持试用的版本类型调整
40801 欢迎总览页面改版
40797 欢迎总览页面背景颜色调整
40615 优化创建执行节点的交互
+1 -1
View File
@@ -205,7 +205,7 @@ $config->bug->datatable->fieldList['branch']['fixed'] = 'left';
$config->bug->datatable->fieldList['branch']['width'] = '100';
$config->bug->datatable->fieldList['branch']['required'] = 'no';
$config->bug->datatable->fieldList['branch']['control'] = 'select';
$config->bug->datatable->fieldList['branch']['dataSource'] = array('module' => 'bug', 'method' => 'getRelatedObjects', 'params' => 'branch&id,name');
$config->bug->datatable->fieldList['branch']['dataSource'] = array('module' => 'branch', 'method' => 'getPairs', 'params' => '$productID');
$config->bug->datatable->fieldList['type']['title'] = 'type';
$config->bug->datatable->fieldList['type']['fixed'] = 'no';
+14 -6
View File
@@ -863,7 +863,7 @@ class bugModel extends model
if($bug->assignedTo != $oldBug->assignedTo) $bug->assignedDate = $now;
if($bug->resolution != '') $bug->confirmed = 1;
if(($bug->resolvedBy != '' or $bug->resolution != '') and $oldBug->status != 'closed')
if(($bug->resolvedBy != '' or $bug->resolution != '') and strpos(',resolved,closed,', ",{$oldBug->status},") === false)
{
$bug->resolvedDate = $now;
$bug->status = 'resolved';
@@ -1528,16 +1528,24 @@ class bugModel extends model
*/
public function getBugs2Link($bugID, $browseType = 'bySearch', $queryID = 0, $pager = null, $excludeBugs = '')
{
$bug = $this->getById($bugID);
$bugIDList = $bug->id . ',' . $bug->linkBug . ',' . $excludeBugs;
if($browseType == 'bySearch')
{
$bug = $this->getById($bugID);
$bugIDList = $bug->id . ',' . $bug->linkBug . ',' . $excludeBugs;
$bugs2Link = $this->getBySearch($bug->product, 'all', $queryID, 'id', $bugIDList, $pager);
return $bugs2Link;
return $this->getBySearch($bug->product, 'all', $queryID, 'id', $bugIDList, $pager);
}
else
{
return array();
return $this->dao->select('*')->from(TABLE_BUG)
->where('deleted')->eq('0')
->andWhere('id')->notin($bugIDList)
->andWhere('product')->eq($bug->product)
->beginIF($bug->project)->andWhere('project')->eq($bug->project)->fi()
->beginIF($bug->execution)->andWhere('execution')->eq($bug->execution)->fi()
->orderBy('id desc')
->page($pager)
->fetchAll();
}
}
+13 -1
View File
@@ -48,7 +48,19 @@ class custom extends control
$currentLang = $this->app->getClientLang();
$this->app->loadLang($module);
$fieldList = zget($this->lang->$module, $field, '');
if($lang == 'all')
{
$fieldList = array();
$items = $this->custom->getItems("lang=all&module=$module&section=$field&vision={$this->config->vision}");
foreach($items as $key => $item)
{
$fieldList[$key] = $item->value;
}
}
else
{
$fieldList = zget($this->lang->$module, $field, '');
}
if($module == 'project' and $field == 'unitList')
{
+5
View File
@@ -90,6 +90,9 @@ class datatable extends control
}
$cols = $this->datatable->getFieldList($module);
if($module == 'story' && $extra != 'requirement') unset($cols['SRS']);
if($extra == 'requirement')
{
unset($cols['plan']);
@@ -97,6 +100,8 @@ class datatable extends control
unset($cols['taskCount']);
unset($cols['bugCount']);
unset($cols['caseCount']);
unset($cols['URS']);
$cols['title']['title'] = str_replace($this->lang->SRCommon, $this->lang->URCommon, $this->lang->story->title);
}
+6 -3
View File
@@ -1760,10 +1760,13 @@ class execution extends control
foreach($products as $productIndex => $product)
{
$productPlans[$productIndex] = array();
foreach($branches[$productIndex] as $branchID => $branch)
if(isset($branches[$productIndex]))
{
$linkedBranches[$productIndex][$branchID] = $branchID;
$productPlans[$productIndex] += isset($plans[$productIndex][$branchID]) ? $plans[$productIndex][$branchID] : array();
foreach($branches[$productIndex] as $branchID => $branch)
{
$linkedBranches[$productIndex][$branchID] = $branchID;
$productPlans[$productIndex] += isset($plans[$productIndex][$branchID]) ? $plans[$productIndex][$branchID] : array();
}
}
}
+1
View File
@@ -395,6 +395,7 @@ $lang->kanbancard->beginAndEnd = 'Begin & End';
$lang->kanbancard->begin = 'Begin';
$lang->kanbancard->end = 'End';
$lang->kanbancard->pri = 'Priority';
$lang->kanbancard->status = 'Status';
$lang->kanbancard->progress = 'Progress';
$lang->kanbancard->desc = 'Description';
$lang->kanbancard->estimate = 'Estimate';
+1
View File
@@ -395,6 +395,7 @@ $lang->kanbancard->beginAndEnd = 'Begin & End';
$lang->kanbancard->begin = 'Begin';
$lang->kanbancard->end = 'End';
$lang->kanbancard->pri = 'Priority';
$lang->kanbancard->status = 'Status';
$lang->kanbancard->progress = 'Progress';
$lang->kanbancard->desc = 'Description';
$lang->kanbancard->estimate = 'Estimate';
+1
View File
@@ -395,6 +395,7 @@ $lang->kanbancard->beginAndEnd = 'Begin & End';
$lang->kanbancard->begin = 'Begin';
$lang->kanbancard->end = 'End';
$lang->kanbancard->pri = 'Priority';
$lang->kanbancard->status = 'Status';
$lang->kanbancard->progress = 'Progress';
$lang->kanbancard->desc = 'Description';
$lang->kanbancard->estimate = 'Estimate';
+1
View File
@@ -395,6 +395,7 @@ $lang->kanbancard->beginAndEnd = '起止日期';
$lang->kanbancard->begin = '预计开始';
$lang->kanbancard->end = '截止日期';
$lang->kanbancard->pri = '优先级';
$lang->kanbancard->status = '状态';
$lang->kanbancard->progress = '进度';
$lang->kanbancard->desc = '描述';
$lang->kanbancard->estimate = '预计';
+2 -2
View File
@@ -222,9 +222,9 @@
</div>
</div>
</div>
<div class="input-group addProduct hidden <?php if($programID) echo 'required';?>">
<div class="input-group addProduct hidden">
<?php echo html::input('productName', '', "class='form-control'");?>
<span class='input-group-addon'><?php echo html::checkBox('newProduct', $lang->project->addProduct, '', "onchange=addNewProduct(this);");?></span>
<span class='input-group-addon required'><?php echo html::checkBox('newProduct', $lang->project->addProduct, '', "onchange=addNewProduct(this);");?></span>
</div>
</td>
</tr>
+1 -1
View File
@@ -254,5 +254,5 @@ $config->story->datatable->fieldList['caseCount']['name'] = $lang->story->ca
$config->story->datatable->fieldList['actions']['title'] = 'actions';
$config->story->datatable->fieldList['actions']['fixed'] = 'right';
$config->story->datatable->fieldList['actions']['width'] = $app->tab == 'project' ? '230' : '210';
$config->story->datatable->fieldList['actions']['width'] = $app->tab == 'project' ? '250' : '230';
$config->story->datatable->fieldList['actions']['required'] = 'yes';
+3 -2
View File
@@ -1364,7 +1364,7 @@ class story extends control
$buildApp = $tab == 'product' ? 'project' : $tab;
$releaseApp = $tab == 'execution' ? 'product' : $tab;
$this->session->set('productList', $uri . "#app={$tab}", 'product');
if(!isonlybody())$this->session->set('buildList', $uri, $buildApp);
if(!isonlybody()) $this->session->set('buildList', $uri, $buildApp);
$this->app->loadLang('bug');
$storyID = (int)$storyID;
@@ -1401,7 +1401,8 @@ class story extends control
}
elseif($from == 'project')
{
$this->loadModel('project')->setMenu($this->session->project);
$projectID = (isset($story->projects[$this->session->project]) || empty($story->projects)) ? $this->session->project : key($story->projects);
$this->loadModel('project')->setMenu($projectID);
}
elseif($from == 'qa')
{
+19 -2
View File
@@ -47,13 +47,30 @@ class storyModel extends model
if($setImgSize) $story->spec = $this->file->setImgSize($story->spec);
if($setImgSize) $story->verify = $this->file->setImgSize($story->verify);
$story->executions = $this->dao->select('t1.project, t2.name, t2.status, t2.type, t2.multiple')->from(TABLE_PROJECTSTORY)->alias('t1')
$projects = $this->dao->select('t1.project, t2.name, t2.status, t2.type, t2.multiple, t2.project AS parentProject')->from(TABLE_PROJECTSTORY)->alias('t1')
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.project = t2.id')
->where('t2.type')->in('sprint,stage,kanban')
->where('t2.type')->in('sprint,stage,kanban,project')
->beginIF($story->twins)->andWhere('t1.story')->in(ltrim($story->twins, ',') . $story->id)
->beginIF(!$story->twins)->andWhere('t1.story')->in($story->id)
->orderBy('t1.`order` DESC')
->fetchAll('project');
$story->projects = array();
$story->executions = array();
foreach($projects as $project)
{
if($project->type == 'project')
{
$story->projects[$project->project] = $project->project;
}
else
{
$story->executions[$project->project] = $project;
if(!$project->multiple) $story->projects[$project->parentProject] = $project->parentProject;
}
}
$story->tasks = $this->dao->select('id, name, assignedTo, execution, project, status, consumed, `left`,type')->from(TABLE_TASK)
->where('deleted')->eq(0)
->beginIF($story->twins)->andWhere('story')->in(ltrim($story->twins, ',') . $story->id)
+1 -1
View File
@@ -158,6 +158,6 @@ ksort($myOrders);
</div>
</div>
<?php endif;?>
<?php if($i > 4):?>
<?php if(!empty($myCountList) and $i > 4):?>
<style>#legendMyEffort > .table {margin-bottom: 5px;}</style>
<?php endif;?>
+16 -9
View File
@@ -71,6 +71,7 @@ class tutorialModel extends model
$product->type = 'normal';
$product->status = 'normal';
$product->desc = '';
$product->shadow = '0';
$product->PO = $this->app->user->account;
$product->QD = '';
$product->RD = '';
@@ -166,8 +167,9 @@ class tutorialModel extends model
$project->displayCards = 0;
$project->fluidBoard = 0;
$project->deleted = '0';
$project->hasProduct = '';
$project->hasProduct = '1';
$project->multiple = '';
$project->division = 0;
return $project;
}
@@ -215,19 +217,24 @@ class tutorialModel extends model
*/
public function getExecutionStats($browseType = '')
{
$execution = $this->getProject();
$execution = $this->getProject();
$emptyHour = array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalLeft' => 0, 'progress' => 0);
$execution->hours = (object)$emptyHour;
$execution->leftTasks = '—';
$execution->teamMembers = array_keys($this->getTeamMembers());
$execution->teamCount = count($execution->teamMembers);
$execution->hasProduct = '';
$execution->multiple = '';
$execution->hours = (object)$emptyHour;
$execution->leftTasks = '—';
$execution->teamMembers = array_keys($this->getTeamMembers());
$execution->teamCount = count($execution->teamMembers);
$execution->hasProduct = '';
$execution->multiple = '';
$execution->order = 1;
$execution->burns = array('');
$execution->type = 'sprint';
$execution->projectName = '';
$execution->projectModel = '';
if($browseType and $browseType != 'all') $execution->name .= '-' . $browseType; // Fix bug #21096
$executionStat[$execution->id] = $execution;
$executionStat[0] = $execution;
return $executionStat;
}
+1 -1
View File
@@ -485,7 +485,7 @@ class userModel extends model
}
$accounts[$i] = $data[$i]->account;
$prev['company'] = $data[$i]->company;
if($users->userType == 'outside') $prev['company'] = $data[$i]->company;
$prev['dept'] = $data[$i]->dept;
$prev['role'] = $data[$i]->role;
$prev['group'] = $data[$i]->group;
+342 -10
View File
@@ -15,6 +15,90 @@ class programTest
$this->program = $tester->loadModel('program');
}
/**
* Get switcher.
*
* @param int $programID
* @access public
* @return string
*/
public function getSwitcherTest($programID = 0)
{
return $this->program->getSwitcher($programID);
}
/**
* Get list by search.
*
* @param string $orderBy
* @param int $queryID
* @param string $sql
* @access public
* @return array
*/
public function getListBySearchTest($orderBy = 'id_asc', $queryID = 0, $sql = '')
{
if(!empty($sql)) $_SESSION['programQuery'] = $sql;
return $this->program->getListBySearch($orderBy, $queryID);
}
/**
* Get pairs.
*
* @param bool $isQueryAll
* @param string $orderBy
* @access public
* @return array
*/
public function getPairsTest($isQueryAll = false, $orderBy = 'id_desc')
{
return $this->program->getPairs($isQueryAll, $orderBy);
}
/**
* Get pairs by id list.
*
* @param string $programIDList
* @access public
* @return array
*/
public function getPairsByListTest($programIDList = '')
{
return $this->program->getPairsByList($programIDList);
}
/**
* Get parent pairs.
*
* @param string $model
* @param string $mode
* @param bool $showRoot
* @access public
* @return array
*/
public function getParentPairsTest($model = '', $mode = 'noclosed', $showRoot = true)
{
return $this->program->getParentPairs($model, $mode, $showRoot);
}
/**
* Get the product associated with the program.
*
* @param int $programID
* @param string $mode
* @param string $status
* @param string|array $append
* @param int|string $shadow
* @param bool $withProgram
* @access public
* @return array
*/
public function getProductPairsTest($programID = 0, $mode = 'assign', $status = 'all', $append = '', $shadow = 0, $withProgram = false)
{
return $this->program->getProductPairs($programID, $mode, $status, $append, $shadow, $withProgram);
}
/**
* Test create program.
*
@@ -22,7 +106,7 @@ class programTest
* @access public
* @return object
*/
public function create($data)
public function createTest($data)
{
$_POST = $data;
@@ -30,21 +114,34 @@ class programTest
if(dao::isError()) return array('message' => dao::getError());
$program = $this->program->getById($programID);
$program = $this->program->getByID($programID);
return $program;
}
/**
* createStakeholder
* Get parent PM.
*
* @param int mixed $programID
* @param array $programIdList
* @access public
* @return array
*/
public function getParentPMTest($programIdList)
{
return $this->program->getParentPM($programIdList);
}
/**
* Create stakeholder.
*
* @param int $programID
* @param array $accounts
* @access public
* @return void
*/
public function createStakeholder($programID)
public function createStakeholderTest($programID, $accounts = array())
{
$_POST['accounts'] = array('dev1', 'dev2');
$_POST['accounts'] = $accounts;
$stakeHolder = $this->program->createStakeholder($programID);
return $this->program->getStakeholdersByPrograms($programID);
@@ -60,7 +157,7 @@ class programTest
{
$programID = $this->program->createDefaultProgram();
return $programID;
return $programID > 0;
}
/**
@@ -74,7 +171,7 @@ class programTest
* @access public
* @return void
*/
public function getList($status = 'all', $orderBy = 'id_asc', $pager = NULL, $type = '', $idList = '')
public function getListTest($status = 'all', $orderBy = 'id_asc', $pager = NULL, $type = '', $idList = '')
{
$this->program->cookie->showClosed = 'ture';
$programs = $this->program->getList($status, $orderBy, $pager, $type, $idList);
@@ -86,14 +183,14 @@ class programTest
/**
* update
* Test update program.
*
* @param mixed $proguamID
* @param mixed $data
* @access public
* @return void
*/
public function update($programID, $data)
public function updateTest($programID, $data)
{
$_POST = $data;
$this->program->update($programID);
@@ -116,4 +213,239 @@ class programTest
return $program;
}
/**
* Get budget left.
*
* @param int $programID
* @access public
* @return int
*/
public function getBudgetLeftTest($programID)
{
$program = $this->program->getByID($programID);
$budget = $this->program->getBudgetLeft($program);
if(dao::isError()) return array('message' => dao::getError());
return $budget;
}
/**
* Set tree path.
*
* @param int $programID
* @access public
* @return void
*/
public function setTreePathTest($programID)
{
$this->program->setTreePath($programID);
$program = $this->program->getByID($programID);
return $program;
}
/**
* Get children.
*
* @param int $programID
* @access public
* @return int
*/
public function getChildrenTest($programID)
{
return $this->program->getChildren($programID);
}
/**
* Check clickable.
*
* @param int $programID
* @param string $status
* @access public
* @return int
*/
public function isClickableTest($programID, $status)
{
return $this->program->isClickable($programID, $status);
}
/**
* Has unfinished.
*
* @param int $programID
* @access public
* @return int
*/
public function hasUnfinishedTest($programID)
{
$program = $this->program->getByID($programID);
return $this->program->hasUnfinished($program);
}
/*
* get involved programs.
*
* @param string $account
* @access public
* @return array
*/
public function getInvolvedProgramsTest($account)
{
return $this->program->getInvolvedPrograms($account);
}
/*
* Get Tree menu.
*
* @param string $programID
* @access public
* @return array
*/
public function getTreeMenuTest($programID)
{
return $this->program->getTreeMenu($programID);
}
/**
* Get top pairs.
*
* @param string $model
* @param string $mode
* @param bool $isQueryAll
* @access public
* @return array
*/
public function getTopPairsTest($model = '', $mode = '', $isQueryAll = false)
{
return $this->program->getTopPairs($model, $mode, $isQueryAll);
}
/**
* Get kanban group.
*
* @access public
* @return array
*/
public function getKanbanGroupTest()
{
return $this->program->getKanbanGroup();
}
/**
* Get team member pairs .
*
* @param int $programID
* @access public
* @return array
*/
public function getTeamMemberPairsTest($programID)
{
return $this->program->getTeamMemberPairs($programID);
}
/**
* Get project stats.
*
* @param int $programID
* @param string $browseType
* @param int $queryID
* @param string $orderBy
* @param object $pager
* @access public
* @return array
*/
public function getProjectStatsTest($programID = 0, $browseType = 'undone', $queryID = 0, $orderBy = 'id_desc', $pager = null)
{
return $this->program->getProjectStats($programID, $browseType, $queryID, $orderBy, $pager);
}
/**
* Get project list.
*
* @param int $programID
* @param string $browseType
* @param int $queryID
* @param string $orderBy
* @param int $pager
* @param int $programTitle
* @param int $involved
* @access public
* @return array
*/
public function getProjectListTest($programID = 0, $browseType = 'all', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $involved = 0)
{
return $this->program->getProjectList($programID, $browseType, $queryID, $orderBy, $pager, $programTitle, $involved);
}
/**
* Get progress list.
*
* @access public
* @return array
*/
public function getProgressListTest()
{
return $this->program->getProgressList();
}
/**
* Get stakeholders.
*
* @param int $programID
* @param string $orderBy
* @access public
* @return array
*/
public function getStakeholdersTest($programID, $orderBy = 'id_desc')
{
return $this->program->getStakeholders($programID, $orderBy);
}
/**
* Test save state.
*
* @param int $programID
* @param array $programs
* @access public
* @return array
*/
public function saveStateTest($programID = 0, $programs = array())
{
return $this->program->saveState($programID, $programs);
}
/**
* Test build operate menu.
*
* @param int $programID
* @access public
* @return string
*/
public function buildOperateMenuTest($programID = 0)
{
$program = $this->program->getByID($programID);
if(empty($program)) return '0';
return $this->program->buildOperateMenu($program);
}
/**
* Test set menu.
*
* @param int $programID
* @access public
* @return string
*/
public function setMenuTest($programID = 0)
{
$program = $this->program->getByID($programID);
if(empty($program)) return '0';
$this->program->setMenu($programID);
global $lang;
return strip_tags($lang->switcherMenu);
}
}
+23 -7
View File
@@ -14,9 +14,9 @@ class userTest
* @access public
* @return void
*/
public function getListTest($count = false)
public function getListTest($params = 'nodeleted', $count = false)
{
$objects = $this->objectModel->getList();
$objects = $this->objectModel->getList($params);
if(dao::isError())
{
$error = dao::getError();
@@ -32,13 +32,14 @@ class userTest
* Test get user information by accounts.
*
* @param array $accounts
* @param string $keyField
* @param bool $count
* @access public
* @return void
*/
public function getListByAccountsTest($accounts = array(), $count = false)
public function getListByAccountsTest($accounts = array(), $keyField = 'id', $count = false)
{
$objects = $this->objectModel->getListByAccounts($accounts);
$objects = $this->objectModel->getListByAccounts($accounts, $keyField);
if(dao::isError())
{
$error = dao::getError();
@@ -77,12 +78,13 @@ class userTest
/**
* Test get avatar pairs.
*
* @param string $params
* @access public
* @return void
* @return array
*/
public function getAvatarPairsTest()
public function getAvatarPairsTest($param = 'nodeleted')
{
$objects = $this->objectModel->getAvatarPairs();
$objects = $this->objectModel->getAvatarPairs($param);
if(dao::isError())
{
$error = dao::getError();
@@ -955,4 +957,18 @@ class userTest
{
return $this->objectModel->processAccountSort($users);
}
/**
* Set users list.
*
* @param array $users
* @param string $account
* @access public
* @return string
*/
public function setUserListTest($users, $account)
{
$string = $this->objectModel->setUserList($users, $account);
return strpos($string, "<option value='$account' selected='selected'") !== false ? 1 : 0;
}
}
+1 -1
View File
@@ -42,7 +42,7 @@ fields:
note: "真实姓名"
fields:
- field: realname1
range: admin,用户,测试{100},开发{100},项目经理{100},产品经理{100},研发主管{100},产品主管{100},测试主管{100},高层管理{100},用户{100},其他{100},A,BB,CCC,非常长非常长的用户名怎么这么长?
range: admin,用户{99},测试{100},开发{100},项目经理{100},产品经理{100},研发主管{100},产品主管{100},测试主管{100},高层管理{100},用户{100},其他{100},A,BB,CCC,非常长非常长的用户名怎么这么长?
- field: realname2
range: [],1-99,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,[]{4}
- field: nickname
-2
View File
@@ -52,7 +52,6 @@ class Processor
$this->initTest();
$this->initTodo();
$this->initSonPlan();
$this->initBassicSql();
$this->dao->commit();
}
@@ -298,7 +297,6 @@ class Processor
{
global $app;
$sqlRoot = $app->getAppRoot();
$this->dao->exec(file_get_contents($sqlRoot . '/data/zt_config.sql'));
$this->dao->exec(file_get_contents($sqlRoot . '/data/zt_block.sql'));
$this->dao->exec(file_get_contents($sqlRoot . '/data/zt_lang.sql'));
$this->dao->exec(file_get_contents($sqlRoot . '/data/zt_cron.sql'));
+1 -1
View File
@@ -4,7 +4,7 @@ INSERT INTO `zt_config` (`id`, `vision`, `owner`, `module`, `section`, `key`, `v
(2, 'rnd', 'system', 'common', '', 'CRProduct', '1'),
(3, 'rnd', 'system', 'common', '', 'CRExecution', '1'),
(4, 'rnd', 'system', 'custom', '', 'URSR', '2'),
(9, 'rnd', 'system', 'common', 'global', 'mode', 'new'),
(9, 'rnd', 'system', 'common', 'global', 'mode', 'ALM'),
(6, 'rnd', 'system', 'project', '', 'unitList', 'CNY,USD'),
(7, 'rnd', 'system', 'project', '', 'defaultCurrency', 'CNY'),
(8, 'rnd', 'system', 'story', '', 'reviewRules', 'allpass'),
+1 -1
View File
@@ -259,7 +259,7 @@ function zdImport($table, $yaml, $count = 10)
function su($account)
{
$userModel = new userModel();
$user = $userModel->identify($account, '123qwe!@#');
$user = $userModel->identify($account, '123Qwe!@#');
if($user) return $userModel->login($user);
return false;
}
+4 -4
View File
@@ -257,7 +257,7 @@ class yaml
* @access public
* @return void
*/
public function gen($rows, $version = '')
public function gen($rows, $version = '1.0')
{
$runFileDir = dirname(getcwd() . DS . $_SERVER['SCRIPT_FILENAME']);
$runFileName = str_replace(strrchr($_SERVER['SCRIPT_FILENAME'], "."), "", $_SERVER['SCRIPT_FILENAME']);
@@ -268,9 +268,9 @@ class yaml
$yamlDataArr = array();
$yamlDataArr['title'] = "zt_{$this->tableName}";
$yamlDataArr['author'] = "auto_{$runFileName}";
$version ? $yamlDataArr['version'] = $version : $yamlDataArr['version'] = '1.0';
$yamlDataArr['title'] = "zt_{$this->tableName}";
$yamlDataArr['author'] = "auto_{$runFileName}";
$yamlDataArr['version'] = $version;
if(empty($this->fields->fieldArr))
{
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
/**
title=测试 programModel::getStakeholdersByPrograms();
cid=1
pid=1
权限不足跳转 >> html
*/
global $tester;
$tester->loadModel('program');
ob_start();
$tester->program->accessDenied();
$result = ob_get_clean();
r(substr($result, 1, 4)) && p() && e('html'); // 权限不足跳转
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('父项目集1,父项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
su('admin');
/**
title=测试 programModel::buildOperateMenu();
cid=1
pid=1
项目集不存在 >> 0
项目集存在 >> div
*/
$programTester = new programTest();
$menus1 = $programTester->buildOperateMenuTest(0);
$menus2 = $programTester->buildOperateMenuTest(1);
r($menus1) && p() && e('0'); // 项目集不存在
r(substr($menus2, 1, 3)) && p() && e('div'); // 项目集存在
+20 -20
View File
@@ -2,25 +2,32 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$db->switchDB();
su('admin');
$program = zdTable('project');
$program->id->range('1');
$program->name->range('父项目集1');
$program->type->range('program');
$program->path->range('1')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(1);
/**
title=测试 programModel::create();
cid=1
pid=1
创建新项目集 >> 测试新增项目集一
项目集名称为空时 >> 『项目集名称』不能为空。
项目集的开始时间为空 >> 『计划开始』不能为空。
项目集的完成时间为空 >> 『计划完成』不能为空。
项目集的计划完成时间大于计划开始时间 >> 『计划完成』应当大于『2022-01-12』。
项目集的完成日期大于父项目集的完成日期(需要实时更新日期) >> 父项目集的开始日期:2022-01-16,开始日期不能小于父项目集的开始日期
创建新项目集 >> 测试新增项目集一
项目集名称为空时 >> 『项目集名称』不能为空。
项目集的开始时间为空 >> 『计划开始』不能为空。
项目集的完成时间为空 >> 『计划完成』不能为空。
『计划完成』应当大于『2022-01-12』。 >> 『计划完成』应当大于『2022-01-12』。
*/
$program = new programTest();
$programTester = new programTest();
$data = array(
'parent' => 0,
@@ -48,15 +55,8 @@ $emptyEndProgram['end'] = '';
$beginGtEndProgram = $data;
$beginGtEndProgram['end'] = '2022-01-10';
$moreThanParent = $data;
$moreThanParent['parent'] = '1';
$moreThanParent['begin'] = '2018-01-01';
$moreThanParent['end'] = '2022-02-10';
r($program->create($normalProgram)) && p('name') && e('测试新增项目集一'); // 创建新项目集
r($program->create($emptyNameProgram)) && p('message[name]:0') && e('『项目集名称』不能为空。'); // 项目集名称为空时
r($program->create($emptyBeginProgram)) && p('message[begin]:0') && e('『计划开始』不能为空。'); // 项目集的开始时间为空
r($program->create($emptyEndProgram)) && p('message[end]:0') && e('『计划完成』不能为空。'); // 项目集的完成时间为空
r($program->create($beginGtEndProgram)) && p('message[end]:0') && e('『计划完成』应当大于『2022-01-12』。'); // 项目集的计划完成时间大于计划开始时间
r($program->create($moreThanParent)) && p('message:begin;message:end') && e('父项目集的开始日期:2022-01-16,开始日期不能小于父项目集的开始日期'); // 项目集的完成日期大于父项目集的完成日期(需要实时更新日期)
$db->restoreDB();
r($programTester->createTest($normalProgram)) && p('name') && e('测试新增项目集一'); // 创建新项目集
r($programTester->createTest($emptyNameProgram)) && p('message[name]:0') && e('『项目集名称』不能为空。'); // 项目集名称为空时
r($programTester->createTest($emptyBeginProgram)) && p('message[begin]:0') && e('『计划开始』不能为空。'); // 项目集的开始时间为空
r($programTester->createTest($emptyEndProgram)) && p('message[end]:0') && e('『计划完成』不能为空。'); // 项目集的完成时间为空
r($programTester->createTest($beginGtEndProgram)) && p('message[end]:0') && e('『计划完成』应当大于『2022-01-12』。'); // 『计划完成』应当大于『2022-01-12』。
+4 -7
View File
@@ -2,7 +2,6 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$db->switchDB();
/**
@@ -10,14 +9,12 @@ title=测试 programModel::createDefaultProgram();
cid=1
pid=1
创建默认项目集并返回ID >> 751
创建默认项目集 >> 1
*/
$test = new programTest();
$programTester = new programTest();
$result = $test->createDefaultProgramTest();
$result = $programTester->createDefaultProgramTest();
r($result) && p('') && e('751'); // 创建默认项目集并返回ID
$db->restoreDB();
r($result) && p('') && e('1'); // 创建默认项目集
+14 -9
View File
@@ -2,7 +2,15 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$db->switchDB();
$program = zdTable('project');
$program->id->range('1');
$program->name->range('父项目集1');
$program->type->range('program');
$program->path->range('1')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(1);
/**
@@ -11,17 +19,14 @@ cid=1
pid=1
创建id=1的项目集的干系人并查看数量。 >> 2
创建id=1的项目集的干系人dev1,dev2并查看Account。 >> dev2;dev1
创建id=1的项目集的干系人dev1,dev2并查看Account。 >> dev1;dev2
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$_POST['accounts'] = array('dev1', 'dev2');
$tester->program->createStakeholder(1);
$result = $tester->program->getStakeholdersByPrograms(1);
$accounts = array('dev1', 'dev2');
$result = $programTester->createStakeholderTest(1, $accounts);
r(count($result)) && p('') && e('2'); // 创建id=1的项目集的干系人并查看数量。
r($result) && p('0:account;1:account') && e('dev2;dev1'); // 创建id=1的项目集的干系人dev1,dev2并查看Account。
$db->restoreDB();
r($result) && p('0:account;1:account') && e('dev1;dev2'); // 创建id=1的项目集的干系人dev1,dev2并查看Account。
+18 -10
View File
@@ -1,25 +1,33 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('父项目集1,父项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
/**
title=测试 programModel::getBudgetLeft();
cid=1
pid=1
查看项目11的所有父项目集的预算剩余 >> 900000
查看项目12的所有父项目集的预算剩余 >> 899900
查看项目1的所有父项目集的预算剩余 >> 900000
查看项目2的所有父项目集的预算剩余 >> 899900
*/
global $tester;
$tester->loadModel('program');
$program1 = $tester->program->getById(11);
$program2 = $tester->program->getById(12);
$result1 = $tester->program->getBudgetLeft($program1);
$result2 = $tester->program->getBudgetLeft($program2);
$programTester = new programTest();
$result1 = $programTester->getBudgetLeftTest(1);
$result2 = $programTester->getBudgetLeftTest(2);
r($result) && p() && e('900000'); // 查看项目11的所有父项目集的预算剩余
r($result) && p() && e('899900'); // 查看项目12的所有父项目集的预算剩余
r($result1) && p() && e('900000'); // 查看项目1的所有父项目集的预算剩余
r($result2) && p() && e('899900'); // 查看项目2的所有父项目集的预算剩余
-19
View File
@@ -1,19 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
su('admin');
/**
title=测试 programModel::getBudgetUnitList();
cid=1
pid=1
获取货币类型列表 >> 人民币;美元
*/
global $tester;
$tester->loadModel('project');
r($tester->loadModel('program')->getBudgetUnitList()) && p('CNY;USD') && e('人民币;美元'); //获取货币类型列表
+15 -8
View File
@@ -1,23 +1,30 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-3');
$program->name->range('父项目集1,子项目集1,子项目集2');
$program->parent->range('0,1,1');
$program->grade->range('1,2,2');
$program->type->range('program');
$program->path->range('`,1,`,`,1,2,`,`,1,3,`');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(3);
/**
title=测试 programModel:: getChildren();
cid=1
pid=1
通过id查找id=1的子项目集个数 >> 9
通过id查找id=22的子项目集个数 >> 7
通过id查找id=221的子项目集个数 >> 0
通过id查找id=1的子项目集个数 >> 2
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
r($tester->program->getChildren(1)) && p() && e('9'); // 通过id查找id=1的子项目集个数
r($tester->program->getChildren(22)) && p() && e('7'); // 通过id查找id=22的子项目集个数
r($tester->program->getChildren(221)) && p() && e('0'); // 通过id查找id=221的子项目集个数
r($programTester->getChildrenTest(1)) && p() && e('2'); // 通过id查找id=1的子项目集个数
+22 -11
View File
@@ -1,8 +1,20 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-3');
$program->name->range('1-3')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-3')->prefix(',')->postfix(',');
$program->grade->range('1');
$program->openedBy->range('admin,test1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(3);
/**
title=测试 programModel::getInvolvedPrograms();
@@ -10,18 +22,17 @@ cid=1
pid=1
获取admin参与的项目集数量 >> 2
获取test2参与的项目集数量 >> 1
获取admin参与的项目集ID >> 10
获取test2参与的项目集ID >> 1
获取test1参与的项目集数量 >> 1
获取admin参与的项目集ID >> 1
获取test1参与的项目集ID >> 2
*/
global $tester;
$tester->loadModel('program');
$adminPrograms = $tester->program->getInvolvedPrograms('admin');
$test2Programs = $tester->program->getInvolvedPrograms('test2');
$programTester = new programTest();
$adminPrograms = $programTester->getInvolvedProgramsTest('admin');
$test1Programs = $programTester->getInvolvedProgramsTest('test1');
r(count($adminPrograms)) && p() && e('2'); // 获取admin参与的项目集数量
r(count($test2Programs)) && p() && e('1'); // 获取test2参与的项目集数量
r($adminPrograms) && p('10') && e('10'); // 获取admin参与的项目集ID
r($test2Programs) && p('1') && e('1'); // 获取test2参与的项目集ID
r(count($adminPrograms)) && p() && e('2'); // 获取admin参与的项目集数量
r(count($test1Programs)) && p() && e('1'); // 获取test1参与的项目集数量
r($adminPrograms) && p('1') && e('1'); // 获取admin参与的项目集ID
r($test1Programs) && p('2') && e('2'); // 获取test1参与的项目集ID
+17 -5
View File
@@ -1,8 +1,21 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-3');
$program->name->range('1-3')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-3')->prefix(',')->postfix(',');
$program->grade->range('1');
$program->status->range('wait');
$program->openedBy->range('admin,test1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(3);
/**
title=测试 programModel::getKanbanGroup();
@@ -10,16 +23,15 @@ cid=1
pid=1
查看当前用户负责的项目集看板数量 >> 2
查看当前用户其他的项目集看板数量 >> 8
查看当前用户其他的项目集看板数量 >> 1
查看当前用户其他的项目集看板详情 >> 项目集2
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$kanbanGroup = $tester->program->getKanbanGroup();
$kanbanGroup = $programTester->getKanbanGroupTest();
r(count($kanbanGroup['my'])) && p('') && e('2'); //查看当前用户负责的项目集看板数量
r(count($kanbanGroup['others'])) && p('') && e('8'); //查看当前用户其他的项目集看板数量
r(count($kanbanGroup['others'])) && p('') && e('1'); //查看当前用户其他的项目集看板数量
r($kanbanGroup['others']) && p('0:name') && e('项目集2'); //查看当前用户其他的项目集看板详情
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
/**
title=测试 programModel::getLink();
cid=1
pid=1
项目集页面跳转项目集项目列表 >> project
非项目集页面跳转项目集列表 >> all
*/
global $tester;
$tester->loadModel('program');
$link1 = $tester->program->getLink('program', 'project', 1);
$result = '';
if(strpos($link1, 'project')) $result = 'project';
r($result) && p() && e('project'); // 项目集页面跳转项目集项目列表
$link2 = $tester->program->getLink('program', 'project', 1, '', 'product');
if(strpos($link2, 'all')) $result = 'all';
r($result) && p() && e('all'); // 非项目集页面跳转项目集列表
+36 -24
View File
@@ -4,45 +4,57 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-20');
$program->name->range('1-20')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-20')->prefix(',')->postfix(',');
$program->grade->range('1');
$program->status->range('wait,doing,suspended,closed');
$program->openedBy->range('admin,test1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(20);
/**
title=测试 programModel::getList();
cid=1
pid=1
查看所有项目和项目集的个数 >> 120
查看所有项目和项目集的个数 >> 20
查看分页后项目集和项目的个数 >> 10
查看所有'closed'的项目和项目集的个数 >> 11
查看所有'suspended'的项目和项目集的个数 >> 11
查看所有'closed'的项目和项目集的个数 >> 5
查看所有'suspended'的项目和项目集的个数 >> 5
按照项目和项目集名称倒序获取第一个ID >> 9
按照ID正序获取项目和项目集列表第一个ID >> 1
获取顶级项目集个数 >> 30
获取顶级项目集个数 >> 20
获取分页后顶级项目集个数 >> 10
获取分页后顶级项目集个数 >> 120
获取所有项目集个数 >> 20
*/
global $tester;
$program = new programTest();
$programTester = new programTest();
$tester->app->loadClass('pager', $static = true);
$pager = new pager(0, 10, 1);
$allPorgrams = $program->getList('all');
$pagerPrograms = $program->getList('all', 'id_asc', $pager);
$closedPrograms = $program->getList('closed');
$suspendedPrograms = $program->getList('closed');
$namedescPrograms = $program->getList('all', 'name_desc');
$idascPrograms = $program->getList('all', 'id_asc');
$topPrograms = $program->getList('all', 'id_asc', null, 'top');
$topPagePrograms = $program->getList('all', 'id_asc', $pager, 'top');
$childPrograms = $program->getList('all', 'id_asc', null, 'child', $topPrograms);
$allPorgrams = $programTester->getListTest('all');
$pagerPrograms = $programTester->getListTest('all', 'id_asc', $pager);
$closedPrograms = $programTester->getListTest('closed');
$suspendedPrograms = $programTester->getListTest('closed');
$namedescPrograms = $programTester->getListTest('all', 'name_desc');
$idascPrograms = $programTester->getListTest('all', 'id_asc');
$topPrograms = $programTester->getListTest('all', 'id_asc', null, 'top');
$topPagePrograms = $programTester->getListTest('all', 'id_asc', $pager, 'top');
$childPrograms = $programTester->getListTest('all', 'id_asc', null, 'child', $topPrograms);
r(count($allPorgrams)) && p() && e('120'); // 查看所有项目和项目集的个数
r(count($pagerPrograms)) && p() && e('10'); // 查看分页后项目集和项目的个数
r(count($closedPrograms)) && p() && e('11'); // 查看所有'closed'的项目和项目集的个数
r(count($suspendedPrograms)) && p() && e('11'); // 查看所有'suspended'的项目和项目集的个数
r(key($namedescPrograms)) && p() && e('9'); // 按照项目和项目集名称倒序获取第一个ID
r(key($idascPrograms)) && p() && e('1'); // 按照ID正序获取项目和项目集列表第一个ID
r(count($topPrograms)) && p() && e('30'); // 获取顶级项目集个数
r(count($topPagePrograms)) && p() && e('10'); // 获取分页后顶级项目集个数
r(count($childPrograms)) && p() && e('120'); // 获取分页后顶级项目集个数
r(count($allPorgrams)) && p() && e('20'); // 查看所有项目和项目集的个数
r(count($pagerPrograms)) && p() && e('10'); // 查看分页后项目集和项目的个数
r(count($closedPrograms)) && p() && e('5'); // 查看所有'closed'的项目和项目集的个数
r(count($suspendedPrograms)) && p() && e('5'); // 查看所有'suspended'的项目和项目集的个数
r(key($namedescPrograms)) && p() && e('9'); // 按照项目和项目集名称倒序获取第一个ID
r(key($idascPrograms)) && p() && e('1'); // 按照ID正序获取项目和项目集列表第一个ID
r(count($topPrograms)) && p() && e('20'); // 获取顶级项目集个数
r(count($topPagePrograms)) && p() && e('10'); // 获取分页后顶级项目集个数
r(count($childPrograms)) && p() && e('20'); // 获取所有项目集个数
+49
View File
@@ -0,0 +1,49 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
zdTable('user')->gen(5);
su('admin');
$program = zdTable('project');
$program->id->range('1-20');
$program->name->range('1-20')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-20')->prefix(',')->postfix(',');
$program->grade->range('1');
$program->status->range('wait,doing,suspended,closed');
$program->openedBy->range('admin,user1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(20);
$query = zdTable('userquery');
$query->id->range('1');
$query->account->range('admin');
$query->module->range('program');
$query->title->range('搜索条件1');
$query->form->range('`a:41:{s:9:"fieldname";s:0:"";s:11:"fieldstatus";s:0:"";s:9:"fielddesc";s:0:"";s:7:"fieldPM";s:0:"";s:15:"fieldopenedDate";s:0:"";s:10:"fieldbegin";s:0:"";s:8:"fieldend";s:0:"";s:13:"fieldopenedBy";s:0:"";s:19:"fieldlastEditedDate";s:0:"";s:14:"fieldrealBegan";s:0:"";s:12:"fieldrealEnd";s:0:"";s:15:"fieldclosedDate";s:0:"";s:6:"andOr1";s:3:"AND";s:6:"field1";s:4:"name";s:9:"operator1";s:7:"include";s:6:"value1";s:9:"项目集";s:6:"andOr2";s:3:"and";s:6:"field2";s:6:"status";s:9:"operator2";s:1:"=";s:6:"value2";s:0:"";s:6:"andOr3";s:3:"and";s:6:"field3";s:4:"desc";s:9:"operator3";s:7:"include";s:6:"value3";s:0:"";s:10:"groupAndOr";s:3:"and";s:6:"andOr4";s:3:"AND";s:6:"field4";s:6:"status";s:9:"operator4";s:1:"=";s:6:"value4";s:4:"wait";s:6:"andOr5";s:3:"and";s:6:"field5";s:10:"openedDate";s:9:"operator5";s:1:"=";s:6:"value5";s:0:"";s:6:"andOr6";s:3:"and";s:6:"field6";s:5:"begin";s:9:"operator6";s:1:"=";s:6:"value6";s:0:"";s:6:"module";s:7:"program";s:9:"actionURL";s:56:"/program-browse-bySearch-order_asc-0-10-1-myQueryID.html";s:10:"groupItems";s:1:"3";s:8:"formType";s:4:"lite";}`');
$query->sql->range("`(( 1 AND `name` LIKE '%项目集%' ) AND ( 1 AND `status` = 'wait' ))`");
$query->gen(1);
/**
title=测试 programModel::getListBySearch();
cid=1
pid=1
按照id倒序查看,所有名称包含项目集并且未开始的第一个项目集 >> 项目集17
按照id正序查看,所有名称包含项目集并且进行中的第一个项目集 >> 项目集1
按照id正序查看,符合搜索条件id=1,的第一个项目集 >> 项目集1
*/
global $tester;
$programTester = new programTest();
$sql1 = "(( 1 AND `name` LIKE '%项目集%' ) AND ( 1 AND `status` = 'wait' ))";
$sql2 = "(( 1 AND `name` LIKE '%项目集%' ) AND ( 1 AND `status` = 'doing' ))";
r($programTester->getListBySearchTest('id_desc', 0, $sql)) && p('17:name') && e('项目集17'); // 按照id倒序查看,所有名称包含项目集并且未开始的第一个项目集
r($programTester->getListBySearchTest('id_asc', 0, $sql)) && p('1:name') && e('项目集1'); // 按照id正序查看,所有名称包含项目集并且进行中的第一个项目集
r($programTester->getListBySearchTest('id_asc', 1)) && p('1:name') && e('项目集1'); // 按照id正序查看,符合搜索条件id=1,的第一个项目集
+26 -11
View File
@@ -1,6 +1,21 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-20');
$program->name->range('1-20')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-20')->prefix(',')->postfix(',');
$program->grade->range('1');
$program->status->range('wait,doing,suspended,closed');
$program->openedBy->range('admin,test1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->deleted->range('0{15},1{5}');
$program->gen(20);
/**
@@ -8,18 +23,18 @@ title=测试 programModel::getPairs();
cid=1
pid=1
获取项目集个数 >> 6
获取项目集个数 >> 10
获取项目集id为9的名称 >> 项目集9
获取项目集个数 >> 15
获取所有项目集个数 >> 15
获取按照id正序的第一个项目集名称 >> 项目集1
*/
global $tester;
$tester->loadModel('program');
$programs1 = $tester->program->getPairs();
$programs2 = $tester->program->getPairs('true');
$programTester = new programTest();
r(count($programs1)) && p() && e('6'); // 获取项目集个数
r(count($programs2)) && p() && e('10'); // 获取项目集个数
r($programs1) && p('9') && e('项目集9'); // 获取项目集id为9的名称
r($programs2) && p('11') && e(''); // 获取不存在的项目集
$programs1 = $programTester->getPairsTest();
$programs2 = $programTester->getPairsTest('true');
$programs3 = $programTester->getPairsTest('false', 'id_asc');
r(count($programs1)) && p() && e('15'); // 获取项目集个数
r(count($programs2)) && p() && e('15'); // 获取所有项目集个数
r(current($programs3)) && p('1') && e('项目集1'); // 获取按照id正序的第一个项目集名称
+24 -12
View File
@@ -2,6 +2,19 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-10');
$program->name->range('1-10')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-10')->prefix(',')->postfix(',');
$program->grade->range('1');
$program->status->range('wait,doing,suspended,closed');
$program->openedBy->range('admin,test1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(10);
/**
@@ -13,20 +26,19 @@ pid=1
通过字符串'1,2,3'获取项目集名称 >> 项目集1,项目集2,项目集3
通过数组array(1)获取项目集名称 >> 项目集1
通过数组array(1,2,3)获取项目集名称 >> 项目集1,项目集2,项目集3
通过id为空获取项目集名称 >> Not Found
通过id=0获取项目集名称 >> Not Found
通过id=11获取项目集名称 >> Not Found
通过id为空获取项目集名称 >> 0
通过id=0获取项目集名称 >> 0
通过id=11获取项目集名称 >> 0
*/
$program = new programTest();
$programTester = new programTest();
$programIdList = array('1', '1,2,3', array(1), array(1,2,3), '', '0', '11');
r($program->getPairsByList($programIdList[0])) && p('1') && e('项目集1'); // 通过字符串'1'获取项目集名称
r($program->getPairsByList($programIdList[1])) && p('1,2,3') && e('项目集1,项目集2,项目集3'); // 通过字符串'1,2,3'获取项目集名称
r($program->getPairsByList($programIdList[2])) && p('1') && e('项目集1'); // 通过数组array(1)获取项目集名称
r($program->getPairsByList($programIdList[3])) && p('1,2,3') && e('项目集1,项目集2,项目集3'); // 通过数组array(1,2,3)获取项目集名称
r($program->getPairsByList($programIdList[4])) && p('message') && e('Not Found'); // 通过id为空获取项目集名称
r($program->getPairsByList($programIdList[5])) && p('message') && e('Not Found'); // 通过id=0获取项目集名称
r($program->getPairsByList($programIdList[6])) && p('message') && e('Not Found'); // 通过id=11获取项目集名称
r($programTester->getPairsByListTest($programIdList[0])) && p('1') && e('项目集1'); // 通过字符串'1'获取项目集名称
r($programTester->getPairsByListTest($programIdList[1])) && p('1,2,3') && e('项目集1,项目集2,项目集3'); // 通过字符串'1,2,3'获取项目集名称
r($programTester->getPairsByListTest($programIdList[2])) && p('1') && e('项目集1'); // 通过数组array(1)获取项目集名称
r($programTester->getPairsByListTest($programIdList[3])) && p('1,2,3') && e('项目集1,项目集2,项目集3'); // 通过数组array(1,2,3)获取项目集名称
r($programTester->getPairsByListTest($programIdList[4])) && p('') && e('0'); // 通过id为空获取项目集名称
r($programTester->getPairsByListTest($programIdList[5])) && p('') && e('0'); // 通过id=0获取项目集名称
r($programTester->getPairsByListTest($programIdList[6])) && p('') && e('0'); // 通过id=11获取项目集名称
+30 -11
View File
@@ -2,6 +2,25 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-10');
$program->name->setFields(array(
array('field' => 'name1', 'range' => '项目集{5},项目{5}'),
array('field' => 'name2', 'range' => '1-5'),
));
$program->type->range('program{5},project{5}');
$program->path->range('1-5,`1,6`,`2,7`,`3,8`,`4,9`,`5,10`')->prefix(',')->postfix(',');
$program->grade->range('1{5},2{5}');
$program->parent->range('0{5},1-5');
$program->status->range('wait,doing,suspended,closed');
$program->model->range('[]{5},scrum{2},waterfall{2},kanban');
$program->openedBy->range('admin,test1');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->deleted->range('0{15},1{5}');
$program->gen(10);
/**
@@ -9,22 +28,22 @@ title=测试 programModel::getParentPairs();
cid=1
pid=1
获取所有父项目集的数量 >> 7
获取瀑布类型父项目集的数量 >> 1
获取ID为1的父项目集的名称 >> /项目集1
获取父项目集的名称显示根目录 >> /
获取所有父项目集的数量 >> 5
获取瀑布类型父项目集的数量 >> 1
获取ID为1的父项目集的名称 >> /项目集1
获取父项目集的名称显示根目录 >> 0
获取ID为1的父项目集的名称不显示根目录 >> 项目集1
*/
global $tester;
$tester->loadModel('program');
$program1 = $tester->program->getParentPairs();
$program2 = $tester->program->getParentPairs('waterfall');
$program3 = $tester->program->getParentPairs('', 'noclosed', false);
$programTester = new programTest();
r(count($program1)) && p() && e('7'); // 获取所有父项目集的数量
$program1 = $programTester->getParentPairsTest();
$program2 = $programTester->getParentPairsTest('waterfall');
$program3 = $programTester->getParentPairsTest('', 'noclosed', false);
r(count($program1)) && p() && e('5'); // 获取所有父项目集的数量
r(count($program2)) && p() && e('1'); // 获取瀑布类型父项目集的数量
r($program1) && p('1') && e('/项目集1'); // 获取ID为1的父项目集的名称
r($program1) && p('0') && e('/'); // 获取父项目集的名称显示根目录
r(key($program1)) && p('0') && e('0'); // 获取父项目集的名称显示根目录
r(array_shift($program3)) && p() && e('项目集1'); // 获取ID为1的父项目集的名称不显示根目录
+25 -9
View File
@@ -1,8 +1,25 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-10');
$program->name->range('1-10')->prefix('项目集');
$program->type->range('program');
$program->path->range('1-5,`1,6`,`2,7`,`3,8`,`4,9`,`5,10`')->prefix(',')->postfix(',');
$program->grade->range('1{5},2{5}');
$program->parent->range('0{5},1-5');
$program->status->range('wait,doing,suspended,closed');
$program->openedBy->range('admin,test1');
$program->pm->range('admin,test1');
$program->acl->range('private');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->deleted->range('0{15},1{5}');
$program->gen(10);
/**
title=测试 programModel::getParentPM();
@@ -10,17 +27,16 @@ cid=1
pid=1
获取父项目集的负责人数量 >> 2
获取父项目集的负责人account >> pm2
获取父项目集的负责人account >> pm3
获取父项目集的负责人account >> admin
获取父项目集的负责人account >> test1
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$programIdList = array(11, 12, 13);
$parentPM = $tester->program->getParentPM($programIdList);
$programIdList = array(5, 6, 7);
$parentPM = $programTester->getParentPMTest($programIdList);
r(count($parentPM)) && p() && e('2'); // 获取父项目集的负责人数量
r($parentPM) && p('12:pm2') && e('pm2'); // 获取父项目集的负责人account
r($parentPM) && p('13:pm3') && e('pm3'); // 获取父项目集的负责人account
r(count($parentPM)) && p() && e('2'); // 获取父项目集的负责人数量
r($parentPM) && p('6:admin') && e('admin'); // 获取父项目集的负责人account
r($parentPM) && p('7:test1') && e('test1'); // 获取父项目集的负责人account
+34 -13
View File
@@ -1,6 +1,29 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
/* Create program data. */
$program = zdTable('project');
$program->id->range('1');
$program->name->range('项目集1');
$program->type->range('program');
$program->grade->range('1');
$program->path->range('1')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(1);
/* Create product data. */
$product = zdTable('product');
$product->id->range('1-10');
$product->name->range('1-10')->prefix('产品');
$product->program->range('1');
$product->type->range('normal');
$product->status->range('normal,closed');
$product->vision->range('rnd');
$product->gen(10);
/**
@@ -8,21 +31,19 @@ title=测试 programModel::getProductPairs();
cid=1
pid=1
获取项目集1下的所有产品数量 >> 6
根据项目集ID获取关联产品名字 >> 已关闭的正常产品24
获取项目集1下的未关闭的产品数量 >> 4
根据项目或项目集ID获取关联产品详情 >> 已关闭的正常产品24
获取项目集1下的所有产品数量 >> 10
根据项目集ID获取关联产品名字 >> 产品2
获取项目集1下的未关闭的产品数量 >> 5
根据项目或项目集ID获取关联产品详情 >> 产品3
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$products1 = $tester->program->getProductPairs(1, 'assign', 'all');
$products2 = $tester->program->getProductPairs(1, 'assign', 'noclosed');
$products1 = $programTester->getProductPairsTest(1, 'assign', 'all');
$products2 = $programTester->getProductPairsTest(1, 'assign', 'noclosed');
r(count($products1)) && p() && e('6'); //获取项目集1下的所有产品数量
r($products1) && p('24') && e('已关闭的正常产品24'); //根据项目集ID获取关联产品名字
r(count($products2)) && p() && e('4'); //获取项目集1下的未关闭的产品数量
r($products2) && p('24') && e('已关闭的正常产品24'); //根据项目或项目集ID获取关联产品详情
r(count($products1)) && p() && e('10'); // 获取项目集1下的所有产品数量
r($products1) && p('2') && e('产品2'); // 根据项目集ID获取关联产品名字
r(count($products2)) && p() && e('5'); // 获取项目集1下的未关闭的产品数量
r($products2) && p('3') && e('产品3'); // 根据项目或项目集ID获取关联产品详情
+36 -9
View File
@@ -1,24 +1,51 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-8');
$program->name->setFields(array(
array('field' => 'name1', 'range' => '项目集{2},项目{3},迭代{3}'),
array('field' => 'name2', 'range' => '1-8')
));
$program->type->range('program{2},project{3},sprint{3}');
$program->status->range('doing');
$program->parent->range('0,0,1,1,2,3,4,5');
$program->grade->range('1{2},2{3},1{3}');
$program->project->range('0{5},3-5');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`,`3,6`,`4,7`,`5,8`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20230212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(8);
$task = zdTable('task');
$task->name->prefix('任务')->range('1-3');
$task->project->range('3-5');
$task->execution->range('6-8');
$task->estimate->range('6-8');
$task->consumed->range('1,3,2');
$task->left->range('5,4,6');
$task->status->range('doing');
$task->assignedTo->range('admin');
$task->gen(3);
/**
title=测试 programModee::getProgressList();
cid=1
pid=1
获取项目和项目集的个数 >> 120
获取id=1的项目的进度 >> 41
获取id=11的项目集的进度 >> 45
获取项目和项目集的个数 >> 5
获取id=2的项目的进度 >> 25
获取id=4的项目集的进度 >> 43
*/
global $tester;
$tester->loadModel('program');
$progressList = $tester->program->getProgressList();
$programTester = new programTest();
$progressList = $programTester->getProgressListTest();
r(count($progressList)) && p() && e('120'); // 获取项目和项目集的个数
r($progressList) && p('1') && e('41'); // 获取id=1的项目的进度
r($progressList) && p('11') && e('45'); // 获取id=11的项目集的进度
r(count($progressList)) && p() && e('5'); // 获取项目和项目集的个数
r($progressList) && p('2') && e('25'); // 获取id=2的项目的进度
r($progressList) && p('4') && e('43'); // 获取id=4的项目集的进度
+46 -20
View File
@@ -1,6 +1,33 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2,项目1,项目2,项目3');
$program->type->range('program{2},project{3}');
$program->status->range('doing{3},closed,doing');
$program->parent->range('0,0,1,1,2');
$program->grade->range('1{2},2{3}');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
$team = zdTable('team');
$team->id->range('1-5');
$team->root->range('3-5');
$team->type->range('project');
$team->account->range('admin');
$team->account->setFields(array(
array('field' => 'account1', 'range' => 'admin,user{4}'),
array('field' => 'account2', 'range' => '[],1-4'),
));
$team->gen(5);
zdTable('user')->gen(5);
su('admin');
/**
@@ -9,28 +36,27 @@ title=测试 programModel::getProjectList();
cid=1
pid=1
获取所有项目列表数量 >> 110
获取未完成项目列表数量 >> 88
带项目集名称的项目列表数量 >> 88
获取我参与的项目列表数量 >> 1
不带项目集名称的项目名称 >> 项目2
带项目集名称的项目名称 >> 项目集2/项目2
我参与的项目的名称 >> 项目集1/项目1
获取所有项目列表数量 >> 3
获取未完成项目列表数量 >> 2
带项目集名称的项目列表数量 >> 2
获取我参与的项目列表数量 >> 1
不带项目集名称的项目名称 >> 项目2
带项目集名称的项目名称 >> 项目集2/项目3
我参与的项目的名称 >> 项目集1/项目1
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$allProjects = $tester->program->getProjectList(0);
$undoneProjects = $tester->program->getProjectList(0, 'undone');
$withProgramProjects = $tester->program->getProjectList(0, 'undone', 0, 'id_desc', null, 1);
$involvedProjects = $tester->program->getProjectList(0, 'undone', 0, 'id_desc', null, 1, true);
$allProjects = $programTester->getProjectListTest(0);
$undoneProjects = $programTester->getProjectListTest(0, 'undone');
$withProgramProjects = $programTester->getProjectListTest(0, 'undone', 0, 'id_desc', null, 1);
$involvedProjects = $programTester->getProjectListTest(0, 'undone', 0, 'id_desc', null, 1, true);
r(count($allProjects)) && p() && e('110'); // 获取所有项目列表数量
r(count($undoneProjects)) && p() && e('88'); // 获取未完成项目列表数量
r(count($withProgramProjects)) && p() && e('88'); // 带项目集名称的项目列表数量
r(count($involvedProjects)) && p() && e('1'); // 获取我参与的项目列表数量
r($allProjects) && p('12:name') && e('项目2'); // 不带项目集名称的项目名称
r($withProgramProjects) && p('12:name') && e('项目集2/项目2'); // 带项目集名称的项目名称
r($involvedProjects) && p('11:name') && e('项目集1/项目1'); // 我参与的项目的名称
r(count($allProjects)) && p() && e('3'); // 获取所有项目列表数量
r(count($undoneProjects)) && p() && e('2'); // 获取未完成项目列表数量
r(count($withProgramProjects)) && p() && e('2'); // 带项目集名称的项目列表数量
r(count($involvedProjects)) && p() && e('1'); // 获取我参与的项目列表数量
r($allProjects) && p('4:name') && e('项目2'); // 不带项目集名称的项目名称
r($withProgramProjects) && p('5:name') && e('项目集2/项目3'); // 带项目集名称的项目名称
r($involvedProjects) && p('3:name') && e('项目集1/项目1'); // 我参与的项目的名称
+25 -12
View File
@@ -1,27 +1,40 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2,项目1,项目2,项目3');
$program->type->range('program{2},project{3}');
$program->status->range('doing{3},closed,doing');
$program->parent->range('0,0,1,1,2');
$program->grade->range('1{2},2{3}');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
/**
title=测试 programModel::getProjectStats();
cid=1
pid=1
查看当前项目集下所有未完成的项目的个数 >> 7
查看当前项目集下所有未完成的项目的个数 >> 7
查看当前项目集下所有未完成的项目按照id倒序排的第一个项目集信息 >> 91,项目81
查看当前项目集下所有未完成的项目按照id正序排的第一个项目集信息 >> 12,项目2
查看当前项目集下所有未完成的项目的个数 >> 1
查看当前项目集下所有未完成的项目的个数 >> 1
查看当前项目集下所有未完成的项目按照id倒序排的第一个项目集信息 >> 3,项目1
查看当前项目集下所有未完成的项目按照id正序排的第一个项目集信息 >> 5,项目3
*/
global $tester;
$tester->loadModel('program');
$stats1 = $tester->program->getProjectStats(1);
$stats2 = $tester->program->getProjectStats(2, 'undone', 0, 'id_asc', null);
$programTester = new programTest();
r(count($stats1)) && p() && e('7'); // 查看当前项目集下所有未完成的项目的个数
r(count($stats2)) && p() && e('7'); // 查看当前项目集下所有未完成的项目的个数
r(current($stats1)) && p('id,name') && e('91,项目81'); // 查看当前项目集下所有未完成的项目按照id倒序排的第一个项目集信息
r(current($stats2)) && p('id,name') && e('12,项目2'); // 查看当前项目集下所有未完成的项目按照id正序排的第一个项目集信息
$stats1 = $programTester->getProjectStatsTest(1);
$stats2 = $programTester->getProjectStatsTest(2, 'undone', 0, 'id_asc', null);
r(count($stats1)) && p() && e('1'); // 查看当前项目集下所有未完成的项目的个数
r(count($stats2)) && p() && e('1'); // 查看当前项目集下所有未完成的项目的个数
r(current($stats1)) && p('id,name') && e('3,项目1'); // 查看当前项目集下所有未完成的项目按照id倒序排的第一个项目集信息
r(current($stats2)) && p('id,name') && e('5,项目3'); // 查看当前项目集下所有未完成的项目按照id正序排的第一个项目集信息
+32 -13
View File
@@ -1,27 +1,46 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
su('admin');
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('父项目集1,父项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
zdTable('user')->gen(5);
$stakeholder = zdTable('stakeholder');
$stakeholder->objectID->range('1,2');
$stakeholder->objectType->range('program');
$stakeholder->type->range('inside');
$stakeholder->user->range('admin,user1,user2');
$stakeholder->gen(3);
su('admin');
/**
title=测试 programModel::getStakeholders();
cid=1
pid=1
获取干系人数量 >> 3
获取干系人数量 >> 3
id倒序排,获取第一个干系人真实姓名 >> 测试17
id正序排,获取第一个干系人真实姓名 >> 测试19
获取干系人数量 >> 2
获取干系人数量 >> 1
id倒序排,获取第一个干系人真实姓名 >> 用户2
id正序排,获取第一个干系人真实姓名 >> 用户1
*/
global $tester;
$tester->loadModel('program');
$stakeholders1 = $tester->program->getStakeholders(2, 'id_desc');
$stakeholders2 = $tester->program->getStakeholders(2, 'id_asc');
$programTester = new programTest();
$stakeholders1 = $programTester->getStakeholdersTest(1, 'id_desc');
$stakeholders2 = $programTester->getStakeholdersTest(2, 'id_asc');
r(count($stakeholders1)) && p() && e('3'); // 获取干系人数量
r(count($stakeholders2)) && p() && e('3'); // 获取干系人数量
r($stakeholders1) && p('0:realname') && e('测试17'); // id倒序排,获取第一个干系人真实姓名
r($stakeholders2) && p('0:realname') && e('测试19'); // id正序排,获取第一个干系人真实姓名
r(count($stakeholders1)) && p() && e('2'); // 获取干系人数量
r(count($stakeholders2)) && p() && e('1'); // 获取干系人数量
r($stakeholders1) && p('0:realname') && e('用户2'); // id倒序排,获取第一个干系人真实姓名
r($stakeholders2) && p('0:realname') && e('用户1'); // id正序排,获取第一个干系人真实姓名
@@ -1,6 +1,27 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('父项目集1,父项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
zdTable('user')->gen(5);
$stakeholder = zdTable('stakeholder');
$stakeholder->objectID->range('1,2');
$stakeholder->objectType->range('program');
$stakeholder->type->range('inside');
$stakeholder->user->range('admin,user1,user2');
$stakeholder->gen(3);
su('admin');
/**
@@ -9,25 +30,19 @@ title=测试 programModel::getStakeholdersByPrograms();
cid=1
pid=1
获取项目集2的干系人名单 >> user19
获取项目集2的干系人名单 >> user18
获取项目集2的干系人名单 >> user17
获取项目集2和项目集3的干系人名单 >> user19
获取项目集2和项目集3的干系人名单 >> user18
获取项目集2和项目集3的干系人名单 >> user17
获取项目集2的干系人个数 >> 3
获取项目集2、3的干系人个数 >> 6
获取项目集1的干系人名单 >> admin
获取项目集2的干系人名单 >> user1
获取项目集1和项目集2的干系人名单 >> admin
获取项目集1的干系人个数 >> 2
获取项目集1、2的干系人个数 >> 3
*/
global $tester;
$tester->loadModel('program');
r($tester->program->getStakeholdersByPrograms('2')) && p('0:account') && e('user19'); // 获取项目集2的干系人名单
r($tester->program->getStakeholdersByPrograms('2')) && p('1:account') && e('user18'); // 获取项目集2的干系人名单
r($tester->program->getStakeholdersByPrograms('2')) && p('2:account') && e('user17'); // 获取项目集2的干系人名单
r($tester->program->getStakeholdersByPrograms('2,3')) && p('0:account') && e('user19'); // 获取项目集2和项目集3的干系人名单
r($tester->program->getStakeholdersByPrograms('2,3')) && p('1:account') && e('user18'); // 获取项目集2和项目集3的干系人名单
r($tester->program->getStakeholdersByPrograms('2,3')) && p('2:account') && e('user17'); // 获取项目集2和项目集3的干系人名单
r(count($tester->program->getStakeholdersByPrograms('2'))) && p('') && e('3'); // 获取项目集2的干系人个数
r(count($tester->program->getStakeholdersByPrograms('2,3'))) && p('') && e('6'); // 获取项目集2、3的干系人个数
r($tester->program->getStakeholdersByPrograms('1')) && p('0:account') && e('admin'); // 获取项目集1的干系人名单
r($tester->program->getStakeholdersByPrograms('2')) && p('0:account') && e('user1'); // 获取项目集2的干系人名单
r($tester->program->getStakeholdersByPrograms('1,2')) && p('0:account') && e('admin'); // 获取项目集1和项目集2的干系人名单
r(count($tester->program->getStakeholdersByPrograms('1'))) && p('') && e('2'); // 获取项目集1的干系人个数
r(count($tester->program->getStakeholdersByPrograms('1,2'))) && p('') && e('3'); // 获取项目集1、2的干系人个数
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('父项目集1,父项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
su('admin');
/**
title=测试 programModel::saveState();
cid=1
pid=1
查看传入空项目集返回的下拉菜单 >> 所有项目集
查看传入id=1的项目集返回的下拉菜单 >> 父项目集1
*/
$programTester = new programTest();
$switcher1 = $programTester->getSwitcherTest(0);
$switcher2 = $programTester->getSwitcherTest(1);
r(strip_tags($switcher1)) && p() && e('所有项目集'); // 查看传入空项目集返回的下拉菜单
r(strip_tags($switcher2)) && p() && e('父项目集1'); // 查看传入id=1的项目集返回的下拉菜单
+38 -12
View File
@@ -1,6 +1,33 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2,项目1,项目2,项目3');
$program->type->range('program{2},project{3}');
$program->status->range('wait');
$program->parent->range('0,0,1,1,2');
$program->grade->range('1{2},2{3}');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
$team = zdTable('team');
$team->id->range('1-5');
$team->root->range('3-5');
$team->type->range('project');
$team->account->range('admin');
$team->account->setFields(array(
array('field' => 'account1', 'range' => 'admin,user{4}'),
array('field' => 'account2', 'range' => '[],1-4'),
));
$team->gen(5);
zdTable('user')->gen(5);
su('admin');
/**
@@ -9,19 +36,18 @@ title=测试 programModel::getTeamMemberPairs();
cid=1
pid=1
获取项目集1下所有团队成员数量 >> 19
获取项目集2下所有团队成员数量 >> 19
获取项目集1下所有团队成员真实姓名 >> P:产品经理92
获取项目集2下所有团队成员真实姓名 >> U:测试83
获取项目集1下所有团队成员数量 >> 5
获取项目集2下所有团队成员数量 >> 2
获取项目集1下所有团队成员真实姓名 >> A:admin
获取项目集2下所有团队成员真实姓名 >> U:用户2
*/
global $tester;
$tester->loadModel('program');
$teams1 = $tester->program->getTeamMemberPairs(1);
$teams2 = $tester->program->getTeamMemberPairs(2);
$programTester = new programTest();
$teams1 = $programTester->getTeamMemberPairsTest(1);
$teams2 = $programTester->getTeamMemberPairsTest(2);
r(count($teams1)) && p() && e('19'); // 获取项目集1下所有团队成员数量
r(count($teams2)) && p() && e('19'); // 获取项目集2下所有团队成员数量
r($teams1) && p('pm92') && e('P:产品经理92'); // 获取项目集1下所有团队成员真实姓名
r($teams2) && p('user83') && e('U:测试83'); // 获取项目集2下所有团队成员真实姓名
r(count($teams1)) && p() && e('5'); // 获取项目集1下所有团队成员数量
r(count($teams2)) && p() && e('2'); // 获取项目集2下所有团队成员数量
r($teams1) && p('admin') && e('A:admin'); // 获取项目集1下所有团队成员真实姓名
r($teams2) && p('user2') && e('U:用户2'); // 获取项目集2下所有团队成员真实姓名
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
/**
title=测试 programModel::getTopByPath();
cid=1
pid=1
获取顶级项目集的顶级id >> 1
获取子项目集的顶级父项目集 >> 2
*/
global $tester;
$tester->loadModel('program');
r($tester->program->getTopByPath(',1,')) && p() && e('1'); // 获取顶级项目集的顶级id
r($tester->program->getTopByPath(',2,3,')) && p() && e('2'); // 获取子项目集的顶级父项目集
+20 -8
View File
@@ -1,23 +1,35 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2');
$program->type->range('program');
$program->grade->range('1,1,0{3}');
$program->status->range('wait,closed,wait{3}');
$program->parent->range('0,0,1,1,2');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
/**
title=测试 programModel::getTopPairs();
cid=1
pid=1
获取系统中所有顶级项目集数量 >> 10
获取系统中所有未关闭的顶级项目集数量 >> 10
获取系统中所有顶级项目集数量 >> 10
获取系统中所有顶级项目集数量 >> 2
获取系统中所有未关闭的顶级项目集数量 >> 1
获取系统中所有顶级项目集数量 >> 2
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
r(count($tester->program->getTopPairs())) && p() && e('10'); // 获取系统中所有顶级项目集数量
r(count($tester->program->getTopPairs('', 'noclosed'))) && p() && e('10'); // 获取系统中所有未关闭的顶级项目集数量
r(count($tester->program->getTopPairs('', '', true))) && p() && e('10'); // 获取系统中所有顶级项目集数量
r(count($programTester->getTopPairsTest())) && p() && e('2'); // 获取系统中所有顶级项目集数量
r(count($programTester->getTopPairsTest('', 'noclosed'))) && p() && e('1'); // 获取系统中所有未关闭的顶级项目集数量
r(count($programTester->getTopPairsTest('', '', true))) && p() && e('2'); // 获取系统中所有顶级项目集数量
+18 -6
View File
@@ -1,6 +1,19 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2');
$program->type->range('program');
$program->status->range('wait');
$program->parent->range('0,0,1,1,2');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
/**
@@ -8,12 +21,11 @@ title=测试 programModel::getTreeMenu();
cid=1
pid=1
查看返回的字符个数 >> 789
查看返回的字符个数 >> 项目集1项目集2
*/
$programTester = new programTest();
$programs1 = $programTester->getTreeMenuTest(1);
$programs1 = preg_replace('/\s*/', '', strip_tags($programs1));
global $tester;
$tester->loadModel('program');
$programs1 = $tester->program->getTreeMenu(1);
r(strlen($programs1)) && p() && e('789'); // 查看返回的字符个数
r($programs1) && p() && e('项目集1项目集2'); // 查看返回的字符个数
+17 -8
View File
@@ -1,23 +1,32 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2');
$program->type->range('program');
$program->status->range('wait');
$program->parent->range('0,0,1,1,2');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
/**
title=测试 programModel::hasUnfinished();
cid=1
pid=1
获取项目集1下未完成的项目和项目集数量 >> 9
获取项目集2下未完成的项目和项目集数量 >> 7
获取项目集1下未完成的项目和项目集数量 >> 2
获取项目集2下未完成的项目和项目集数量 >> 1
*/
global $tester;
$tester->loadModel('program');
$program1 = $tester->program->getById(1);
$program2 = $tester->program->getById(2);
$programTester = new programTest();
r($tester->program->hasUnfinished($program1)) && p() && e('9'); // 获取项目集1下未完成的项目和项目集数量
r($tester->program->hasUnfinished($program2)) && p() && e('7'); // 获取项目集2下未完成的项目和项目集数量
r($programTester->hasUnfinishedTest(1)) && p() && e('2'); // 获取项目集1下未完成的项目和项目集数量
r($programTester->hasUnfinishedTest(2)) && p() && e('1'); // 获取项目集2下未完成的项目和项目集数量
+24 -13
View File
@@ -2,6 +2,18 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('项目集1,项目集2');
$program->type->range('program');
$program->status->range('wait');
$program->parent->range('0');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
/**
@@ -9,24 +21,23 @@ title=测试 programModel::createStakeholder();
cid=1
pid=1
传入项目集1,动作为closed,判断是否可点击 >> 1
传入项目集1,动作为closed,判断是否可点击 >> 1
传入项目集1,动作为activate,判断是否可点击 >> 0
传入项目集1,动作为suspend,判断是否可点击 >> 1
传入项目集2,动作为closed,判断是否可点击 >> 1
传入项目集1,动作为suspend,判断是否可点击 >> 1
传入项目集2,动作为closed,判断是否可点击 >> 1
传入项目集2,动作为activate,判断是否可点击 >> 0
传入项目集2,动作为activate,判断是否可点击 >> 1
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$program1 = $tester->program->getById(1);
$program2 = $tester->program->getById(2);
$program1 = $programTester->getByIDTest(1);
$program2 = $programTester->getByIDTest(2);
r($tester->program->isClickable($program1, 'close')) && p('') && e('1'); // 传入项目集1,动作为closed,判断是否可点击
r($tester->program->isClickable($program1, 'activate')) && p('') && e('0'); // 传入项目集1,动作为activate,判断是否可点击
r($tester->program->isClickable($program1, 'suspend')) && p('') && e('1'); // 传入项目集1,动作为suspend,判断是否可点击
r($tester->program->isClickable($program2, 'close')) && p('') && e('1'); // 传入项目集2,动作为closed,判断是否可点击
r($tester->program->isClickable($program2, 'activate')) && p('') && e('0'); // 传入项目集2,动作为activate,判断是否可点击
r($tester->program->isClickable($program2, 'suspend')) && p('') && e('1'); // 传入项目集2,动作为activate,判断是否可点击
r($programTester->isClickableTest($program1, 'close')) && p('') && e('1'); // 传入项目集1,动作为closed,判断是否可点击
r($programTester->isClickableTest($program1, 'activate')) && p('') && e('0'); // 传入项目集1,动作为activate,判断是否可点击
r($programTester->isClickableTest($program1, 'suspend')) && p('') && e('1'); // 传入项目集1,动作为suspend,判断是否可点击
r($programTester->isClickableTest($program2, 'close')) && p('') && e('1'); // 传入项目集2,动作为closed,判断是否可点击
r($programTester->isClickableTest($program2, 'activate')) && p('') && e('0'); // 传入项目集2,动作为activate,判断是否可点击
r($programTester->isClickableTest($program2, 'suspend')) && p('') && e('1'); // 传入项目集2,动作为activate,判断是否可点击
+17 -4
View File
@@ -1,7 +1,19 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1-5');
$program->name->range('项目集1,项目集2,项目1,项目2,项目3');
$program->type->range('program{2},project{3}');
$program->status->range('doing{3},closed,doing');
$program->parent->range('0,0,1,1,2');
$program->grade->range('1{2},2{3}');
$program->path->range('1,2,`1,3`,`1,4`,`2,5`')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(5);
/**
@@ -9,10 +21,11 @@ title=测试 programModel::processNode();
cid=1
pid=1
>> 1
更新项目集层级和路径 >> 1
*/
$program = new Program('admin');
global $tester;
$tester->loadModel('program');
r($program->processNode(1, 0, 1, 1)) && p() && e('1');
r($tester->program->processNode(1, 2, 1, 1)) && p() && e('1'); // 更新项目集层级和路径
+44
View File
@@ -0,0 +1,44 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('父项目集1,父项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
su('admin');
/**
title=测试 programModel::saveState();
cid=1
pid=1
项目集存在且正常访问 >> html
项目集不存在 >> 0
项目集存在,但不在可以查看的项目集列表 >> 1
项目集存在,且在可以查看的项目集列表 >> 2
项目集不存在,且有可以查看的项目集列表 >> 2
*/
$programTester = new programTest();
ob_start();
$programTester->saveStateTest(1);
$program1 = ob_get_clean();
$program2 = $programTester->saveStateTest(0);
$program3 = $programTester->saveStateTest(1, array(1 => ''));
$program4 = $programTester->saveStateTest(3, array(2 => ''));
$program5 = $programTester->saveStateTest(0, array(2 => ''));
r(substr($program1, 1, 4)) && p() && e('html'); // 项目集存在且正常访问
r($program2) && p() && e('0'); // 项目集不存在
r($program3) && p() && e('1'); // 项目集存在,但不在可以查看的项目集列表
r($program4) && p() && e('2'); // 项目集存在,且在可以查看的项目集列表
r($program5) && p() && e('2'); // 项目集不存在,且有可以查看的项目集列表
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$program = zdTable('project');
$program->id->range('1,2');
$program->name->range('项目集1,项目集2');
$program->type->range('program');
$program->budget->range('900000,899900');
$program->path->range('1,2')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
su('admin');
/**
title=测试 programModel::setMenu();
cid=1
pid=1
项目集存在的情况 >> 项目集1
项目集不存在的情况 >> 0
*/
$programTester = new programTest();
r($programTester->setMenuTest(1)) && p() && e('项目集1'); // 项目集存在的情况
r($programTester->setMenuTest(3)) && p() && e('0'); // 项目集不存在的情况
+18 -10
View File
@@ -1,26 +1,34 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
su('admin');
$program = zdTable('project');
$program->id->range('1,10');
$program->name->range('项目集1');
$program->type->range('program');
$program->parent->range('[],[1]');
$program->path->range('1,10')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(2);
/**
title=测试 programModel::setTreePath();
cid=1
pid=1
设置之前的项目集的path >> ,2,12,
设置之后的项目集的path >> ,2,12,
设置之前的项目集的path >> ,10,
设置之后的项目集的path >> ,1,10,
*/
global $tester;
$tester->loadModel('program');
$programTester = new programTest();
$before = $tester->program->getById(12);
$tester->program->setTreePath(12);
$after = $tester->program->getById(12);
$before = $programTester->getByIDTest(10);
$after = $programTester->setTreePathTest(10);
r($before) && p('path') && e(',2,12,'); // 设置之前的项目集的path
r($after) && p('path') && e(',2,12,'); // 设置之后的项目集的path
$db->restoreDB();
r($before) && p('path') && e(',10,'); // 设置之前的项目集的path
r($after) && p('path') && e(',1,10,'); // 设置之后的项目集的path
+26 -18
View File
@@ -2,16 +2,24 @@
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/program.class.php';
$db->switchDB();
su('admin');
$program = zdTable('project');
$program->id->range('1');
$program->name->range('项目集1');
$program->type->range('program');
$program->path->range('1')->prefix(',')->postfix(',');
$program->begin->range('20220112 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->end->range('20220212 000000:0')->type('timestamp')->format('YY/MM/DD');
$program->gen(1);
/**
title=测试 programModel::update();
cid=1
pid=1
正常更新项目集的情况 >> 测试更新项目集
正常更新项目集的情况 >> 测试更新项目集
更新项目集名称为空时 >> 『项目集名称』不能为空。
当计划开始为空时更新项目集信息 >> 『计划开始』不能为空。
当计划完成为空时更新项目集信息 >> 『计划完成』不能为空。
@@ -19,19 +27,20 @@ pid=1
*/
$program = new programTest();
$programTester = new programTest();
$data = array(
'parent' => '0',
'name' => '测试更新项目集',
'begin' => '2020-10-10',
'end' => '2022-09-03',
'acl' => 'private',
'budget' => '100',
'budgetUnit' => 'CNY',
'syncPRJUnit' => true,
'parent' => '0',
'name' => '测试更新项目集',
'begin' => '2020-10-10',
'end' => '2023-09-03',
'acl' => 'private',
'budget' => '100',
'status' => 'wait',
'budgetUnit' => 'CNY',
'syncPRJUnit' => true,
'exchangeRate' => '',
'whitelist' => array('dev10', 'dev12')
'whitelist' => array('dev10', 'dev12')
);
$normalProgram = $data;
@@ -48,9 +57,8 @@ $emptyEndProgram['end'] = '';
$realBeganProgram = $data;
$realBeganProgram['realBegan'] = '2020-11-10';
r($program->update(10, $normalProgram)) && p('name') && e('测试更新项目集'); // 正常更新项目集的情况
r($program->update(10, $emptyTitleProgram)) && p('message[name]:0') && e('『项目集名称』不能为空。'); // 更新项目集名称为空时
r($program->update(10, $emptyBeginProgram)) && p('message[begin]:0') && e('『计划开始』不能为空。'); // 当计划开始为空时更新项目集信息
r($program->update(10, $emptyEndProgram)) && p('message[end]:0') && e('『计划完成』不能为空。'); // 当计划完成为空时更新项目集信息
r($program->update(10, $realBeganProgram)) && p('status') && e('doing'); // 更新未开始的项目集实际开始时间
$db->restoreDB();
r($programTester->updateTest(1, $normalProgram)) && p('name') && e('测试更新项目集'); // 正常更新项目集的情况
r($programTester->updateTest(1, $emptyTitleProgram)) && p('message[name]:0') && e('『项目集名称』不能为空。'); // 更新项目集名称为空时
r($programTester->updateTest(1, $emptyBeginProgram)) && p('message[begin]:0') && e('『计划开始』不能为空。'); // 当计划开始为空时更新项目集信息
r($programTester->updateTest(1, $emptyEndProgram)) && p('message[end]:0') && e('『计划完成』不能为空。'); // 当计划完成为空时更新项目集信息
r($programTester->updateTest(1, $realBeganProgram)) && p('status') && e('doing'); // 更新未开始的项目集实际开始时间
+23 -4
View File
@@ -4,17 +4,36 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1005');
$user->account->range('1-5')->prefix("account");
$user->realname->range('1-5')->prefix("用户名");
$user->type->range('inside{4},ountside{1}');
$user->avatar->range('1-5')->prefix('/home/z/user/');
$user->deleted->range('0{4}, 1{1}');
$user->gen(5);
/**
title=测试 userModel->getPairs();
cid=1
pid=1
所有用户头像的数量 >> 999
查找account为"user99"用户头像路径 >> /home/z/user/15.png
未删除的用户头像的数量 >> 4
所有用户头像的数量 >> 5
在未删除用户中查找account为"account1"的用户的头像路径 >> /home/z/user/1
在未删除用户中查找account为"account2"的用户的头像路径 >> /home/z/user/2
在未删除用户中查找account为"account3"的用户的头像路径 >> /home/z/user/3
在未删除用户中查找account为"account4"的用户的头像路径 >> /home/z/user/4
在所有用户中查找account为"account5"的用户的头像路径 >> /home/z/user/5
*/
$user = new userTest();
r(count($user->getAvatarPairsTest())) && p() && e('999'); //所有用户头像的数量
r($user->getAvatarPairsTest()) && p('user99') && e('/home/z/user/15.png'); //查找account为"user99"的用户头像路径
r(count($user->getAvatarPairsTest())) && p() && e('4'); // 未删除的用户头像的数量
r(count($user->getAvatarPairsTest('all'))) && p() && e('5'); // 所有用户头像的数量
r($user->getAvatarPairsTest()) && p('account1') && e('/home/z/user/1'); // 在未删除用户中查找account为"account1"的用户的头像路径
r($user->getAvatarPairsTest()) && p('account2') && e('/home/z/user/2'); // 在未删除用户中查找account为"account2"的用户的头像路径
r($user->getAvatarPairsTest()) && p('account3') && e('/home/z/user/3'); // 在未删除用户中查找account为"account3"的用户的头像路径
r($user->getAvatarPairsTest()) && p('account4') && e('/home/z/user/4'); // 在未删除用户中查找account为"account4"的用户的头像路径
r($user->getAvatarPairsTest('all')) && p('account5') && e('/home/z/user/5'); // 在所有用户中查找account为"account5"的用户的头像路径
+9 -1
View File
@@ -4,9 +4,17 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1005');
$user->account->range('1-5')->prefix("account");
$user->realname->range('1-5')->prefix("用户名");
$user->type->range('inside{3},outside{2}');
$user->deleted->range('0-1');
$user->gen(5);
/**
title=测试 userModel->getPairs();
title=测试 userModel->getCommiters();
cid=1
pid=1
+6
View File
@@ -4,6 +4,12 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->gen(50);
$userGroup = zdTable('usergroup');
$userGroup->gen(500);
/**
title=测试 userModel::getGroups();
+4 -4
View File
@@ -10,15 +10,15 @@ title=测试 userModel::getGroupsByVisions();
cid=1
pid=1
获取系统中所有研发界面分组的数量 >> 14
获取系统中所有研发界面分组的数量 >> 13
获取系统中所有迅捷界面分组的数量 >> 3
传空Visions,返回空数组 >> 0
获取系统中所有用户分组的数量 >> 17
获取系统中所有用户分组的数量 >> 16
*/
$user = new userTest();
r(count($user->getGroupsByVisionsTest(array('rnd')))) && p() && e('14'); // 获取系统中所有研发界面分组的数量
r(count($user->getGroupsByVisionsTest(array('rnd')))) && p() && e('13'); // 获取系统中所有研发界面分组的数量
r(count($user->getGroupsByVisionsTest(array('lite')))) && p() && e('3'); // 获取系统中所有迅捷界面分组的数量
r($user->getGroupsByVisionsTest(array())) && p() && e('0'); // 传空Visions,返回空数组
r(count($user->getGroupsByVisionsTest(array('rnd','lite')))) && p() && e('17'); // 获取系统中所有用户分组的数量
r(count($user->getGroupsByVisionsTest(array('rnd','lite')))) && p() && e('16'); // 获取系统中所有用户分组的数量
+26 -8
View File
@@ -4,22 +4,40 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1005');
$user->account->range('1-5')->prefix("account");
$user->realname->range('1-5')->prefix("用户名");
$user->type->range('inside{3},outside{2}');
$user->deleted->range('0-1');
$user->gen(5);
/**
title=测试 userModel->getList();
cid=1
pid=1
查找系统中第个未删除的、内部用户真实姓名,根据account正序排 >> 开发1
查找系统中未删除的、根据account正序排的最后一个用户的姓名 >> 测试99
查找系统中所有未删除的、内部用户的数量 >> 999
查找系统中不存在的用户,输出错误提示 >> Error: Cannot get index 1000
查找系统中第个未删除的、内部用户真实姓名,根据account正序排 >> 用户名1
查找系统中第二个未删除的、内部用户真实姓名,根据account正序排 >> 用户名3
查找系统中所有未删除的、内部用户的数量 >> 2
查找系统中第一个用户的真实姓名 >> 用户名1
查找系统中第二个用户的真实姓名 >> 用户名2
查找系统中第三个用户的真实姓名 >> 用户名3
查找系统中第四个用户的真实姓名 >> 用户名4
查找系统中第五个用户的真实姓名 >> 用户名5
查找系统中所有用户数量 >> 5
*/
$user = new userTest();
r($user->getListTest()) && p('1:realname') && e('开发1'); //查找系统中第个未删除的、内部用户真实姓名,根据account正序排
r($user->getListTest()) && p('998:realname') && e('测试99'); //查找系统中未删除的、根据account正序排的最后一个用户的姓名
r($user->getListTest(true)) && p() && e('999'); //查找系统中所有未删除的、内部用户的数量
r($user->getListTest()) && p('1000:realname') && e('Error: Cannot get index 1000'); //查找系统中不存在的用户,输出错误提示
r($user->getListTest()) && p('0:realname') && e('用户名1'); // 查找系统中第个未删除的、内部用户真实姓名,根据account正序排
r($user->getListTest()) && p('1:realname') && e('用户名3'); // 查找系统中第二个未删除的、内部用户真实姓名,根据account正序排
r($user->getListTest('nodeleted', true)) && p() && e('2'); // 查找系统中所有未删除的、内部用户的数量
r($user->getListTest('all')) && p('0:realname') && e('用户名1'); // 查找系统中第一个用户的真实姓名
r($user->getListTest('all')) && p('1:realname') && e('用户名2'); // 查找系统中第二个用户的真实姓名
r($user->getListTest('all')) && p('2:realname') && e('用户名3'); // 查找系统中第三个用户的真实姓名
r($user->getListTest('all')) && p('3:realname') && e('用户名4'); // 查找系统中第四个用户的真实姓名
r($user->getListTest('all')) && p('4:realname') && e('用户名5'); // 查找系统中第五个用户的真实姓名
r($user->getListTest('all', true)) && p() && e('5'); // 查找系统中所有用户数量
+26 -7
View File
@@ -4,21 +4,40 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1005');
$user->account->range('1-5')->prefix("account");
$user->realname->range('1-5')->prefix("用户名");
$user->role->range('po,pd,qa,qd,pm');
$user->type->range('inside{3},outside{2}');
$user->deleted->range('0-1');
$user->gen(5);
/**
title=测试 userModel->getListByAccounts();
cid=1
pid=1
按照给定的用户名列表查询用户信息,获取用户ID为1的用户真实姓名和角色 >> admin,qa
按照给定的用户名列表查询用户信息,获取查询出的用户列表数量 >> 3
按照给定的用户名列表查询用户信息,获取用户ID为0的用户信息 >> Error: Cannot get index 0.
按照给定的用户名列表查询用户信息,获取用户ID为1001的用户真实姓名和角色 >> 用户名1,po
按照给定的用户名列表查询用户信息,获取用户ID为1002的用户真实姓名和角色 >> 用户名2,pd
按照给定的用户名列表查询用户信息,获取用户ID为1003的用户真实姓名和角色 >> 用户名3,qa
按照给定的用户名列表查询用户信息,获取用户ID为1004的用户真实姓名和角色 >> 用户名4,qd
按照给定的用户名列表查询用户信息,获取查询出的用户列表数量 >> 5
删除account4后,按照给定的用户名列表查询用户信息,获取用户account为account2的用户真实姓名和角色 >> 用户名2,pd
删除account4后,按照给定的用户名列表查询用户信息,获取查询出的用户列表数量 >> 4
*/
$accounts = array('admin', 'program1whitelist', 'user10', 'ccsdqq@!');
$accounts = array('account1', 'account2', 'account3', 'account4', 'account5');
$keyFiled = array('id', 'account');
$count = array(0 => false, 1 => true);
$user = new userTest();
r($user->getListByAccountsTest($accounts, $count[0])) && p('1:realname,role') && e('admin,qa'); //按照给定的用户名列表查询用户信息,获取用户ID为1的用户真实姓名和角色
r($user->getListByAccountsTest($accounts, $count[1])) && p() && e('3'); //按照给定的用户名列表查询用户信息,获取查询出的用户列表数量
r($user->getListByAccountsTest($accounts, $count[0])) && p('0:realname') && e('Error: Cannot get index 0.'); //按照给定的用户名列表查询用户信息,获取用户ID为0的用户信息
r($user->getListByAccountsTest($accounts, $keyFiled[0], $count[0])) && p('1001:realname,role') && e('用户名1,po'); // 按照给定的用户名列表查询用户信息,获取用户ID为1001的用户真实姓名和角色
r($user->getListByAccountsTest($accounts, $keyFiled[0], $count[0])) && p('1002:realname,role') && e('用户名2,pd'); // 按照给定的用户名列表查询用户信息,获取用户ID为1002的用户真实姓名和角色
r($user->getListByAccountsTest($accounts, $keyFiled[0], $count[0])) && p('1003:realname,role') && e('用户名3,qa'); // 按照给定的用户名列表查询用户信息,获取用户ID为1003的用户真实姓名和角色
r($user->getListByAccountsTest($accounts, $keyFiled[0], $count[0])) && p('1004:realname,role') && e('用户名4,qd'); // 按照给定的用户名列表查询用户信息,获取用户ID为1004的用户真实姓名和角色
r($user->getListByAccountsTest($accounts, $keyFiled[0], $count[1])) && p() && e('5'); // 按照给定的用户名列表查询用户信息,获取查询出的用户列表数量
unset($accounts[3]);
r($user->getListByAccountsTest($accounts, $keyFiled[1], $count[0])) && p('account2:realname,role') && e('用户名2,pd'); // 删除account4后,按照给定的用户名列表查询用户信息,获取用户account为account2的用户真实姓名和角色
r($user->getListByAccountsTest($accounts, $keyFiled[1], $count[1])) && p() && e('4'); // 删除account4后,按照给定的用户名列表查询用户信息,获取查询出的用户列表数量
+24 -14
View File
@@ -4,6 +4,16 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1006');
$user->account->range('1-6')->prefix("account");
$user->realname->range('1-6')->prefix("用户名");
$user->type->range('inside{3},outside{3}');
$user->role->range('po,pd,qa,qd,pm,dev');
$user->deleted->range('0{4}, 1{2}');
$user->visions->range('rnd');
$user->gen(5);
/**
title=测试 userModel->getPairs();
@@ -11,37 +21,37 @@ cid=1
pid=1
查找带有Closed用户的外部用户键值对 >> Closed
查找带有首字母的外部用户键值对 >> O:用户1
查找不带首字母的外部用户键值对 >> 用户1
查找带有首字母的外部用户键值对 >> A:用户名4
查找不带首字母的外部用户键值对 >> 用户名4
按照给定的用户名查找用户键值对,返回值中不带有Closed用户 >> 1
按照给定的用户名查找用户键值对,返回值中带有Closed用户 >> 2
使用limit参数来限制最多获取2个用户键值对 >> 2
使用limit参数来限制最多获取50个用户键值对 >> 50
使用pofirst参数来将系统中的产品经理用户放到返回值前列 >> P:测试主管58
使用pmfirst参数来将系统中的项目经理用户放到返回值前列 >> O:其他100
使用limit参数来限制最多获取50个用户键值对 >> 3
使用pofirst参数来将系统中的产品经理用户放到返回值前列 >> A:用户名1
使用pmfirst参数来将系统中的项目经理内部和外部用户放到返回值前列 >> A:用户名3
*/
$usersToAppended = array('account5', 'account1');
$user = new userTest();
$accounts = array('tesrasd1asd#@!#$', 'ASD123中文', 'user10', 'ccsdqq@!');
$outsideUsersWithClosed = $user->getPairsTest('outside');
$outsideUsersWithLetter = $user->getPairsTest('outside|noclosed');
$outsideUsersNoLetter = $user->getPairsTest('outside|noclosed|noletter');
$usersInAccountsNoclosed = $user->getPairsTest('noempty|noclosed', '', 0, $accounts);
$usersInAccountsWithclosed = $user->getPairsTest('noempty', '', 0, $accounts);
$usersInAccountsNoclosed = $user->getPairsTest('noempty|noclosed', '', 0, $usersToAppended);
$usersInAccountsWithclosed = $user->getPairsTest('noempty', '', 0, $usersToAppended);
$limit2Users = $user->getPairsTest('noempty|noclosed', '', 2);
$limit50Users = $user->getPairsTest('noempty|noclosed', '', 50);
$POFirstUsers = $user->getPairsTest('noempty|noclosed|pofirst');
$PMFirstUsers = $user->getPairsTest('noempty|noclosed|pmfirst');
$PMFirstUsers = $user->getPairsTest('noempty|noclosed|all|devfirst');
$firstPO = array_slice($POFirstUsers, 0, 1);
$firstPM = array_slice($PMFirstUsers, 0, 1);
r($outsideUsersWithClosed) && p('closed') && e('Closed'); //查找带有Closed用户的外部用户键值对
r($outsideUsersWithLetter) && p('outside1') && e('O:用户1'); //查找带有首字母的外部用户键值对
r($outsideUsersNoLetter) && p('outside1') && e('用户1'); //查找不带首字母的外部用户键值对
r($outsideUsersWithLetter) && p('account4') && e('A:用户名4'); //查找带有首字母的外部用户键值对
r($outsideUsersNoLetter) && p('account4') && e('用户名4'); //查找不带首字母的外部用户键值对
r(count($usersInAccountsNoclosed)) && p() && e('1'); //按照给定的用户名查找用户键值对,返回值中不带有Closed用户
r(count($usersInAccountsWithclosed)) && p() && e('2'); //按照给定的用户名查找用户键值对,返回值中带有Closed用户
r(count($limit2Users)) && p() && e('2'); //使用limit参数来限制最多获取2个用户键值对
r(count($limit50Users)) && p() && e('50'); //使用limit参数来限制最多获取50个用户键值对
r($firstPO) && p('pd58') && e('P:测试主管58'); //使用pofirst参数来将系统中的产品经理用户放到返回值前列
r($firstPM) && p('outside100') && e('O:其他100'); //使用pmfirst参数来将系统中的项目经理用户放到返回值前列
r(count($limit50Users)) && p() && e('3'); //使用limit参数来限制最多获取50个用户键值对
r($firstPO) && p('account1') && e('A:用户名1'); //使用pofirst参数来将系统中的产品经理用户放到返回值前列
r($firstPM) && p('account3') && e('A:用户名3'); //使用pmfirst参数来将系统中的项目经理内部和外部用户放到返回值前列
+21 -5
View File
@@ -4,20 +4,36 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1005');
$user->account->range('1-5')->prefix("account");
$user->realname->range('1-5')->prefix("用户名");
$user->email->range('account1@qq.com,account2@qq.com,account3@qq.com,account4@qq.com,account5@qq.com');
$user->deleted->range('0{5}');
$user->gen(5);
/**
title=测试 userModel->getPairs();
cid=1
pid=1
获取admin的邮箱 >> 833482@qq.com
accounts中获取到的用户邮箱数量 >> 2
获取account1的邮箱和真实姓名 >> account1@qq.com,用户名1
获取account2的邮箱和真实姓名 >> account2@qq.com,用户名2
获取account3的邮箱和真实姓名 >> account3@qq.com,用户名3
获取account4的邮箱和真实姓名 >> account4@qq.com,用户名4
获取account5的邮箱和真实姓名 >> account5@qq.com,用户名5
从accounts中获取到的用户邮箱数量 >> 5
*/
$accounts = array('tesrasd1asd#@!#$', 'ASD123中文', 'user10', 'ccsdqq@!', 'admin');
$accounts = array('account1', 'account2', 'account3', 'account4', 'account5');
$user = new userTest();
$emails = $user->getRealNameAndEmailsTest($accounts);
r($emails['admin']) && p('email') && e('833482@qq.com'); //获取admin的邮箱
r(count($emails)) && p() && e('2'); //accounts中获取到的用户邮箱数量
r($emails['account1']) && p('email,realname') && e('account1@qq.com,用户名1'); //获取account1的邮箱和真实姓名
r($emails['account2']) && p('email,realname') && e('account2@qq.com,用户名2'); //获取account2的邮箱和真实姓名
r($emails['account3']) && p('email,realname') && e('account3@qq.com,用户名3'); //获取account3的邮箱和真实姓名
r($emails['account4']) && p('email,realname') && e('account4@qq.com,用户名4'); //获取account4的邮箱和真实姓名
r($emails['account5']) && p('email,realname') && e('account5@qq.com,用户名5'); //获取account5的邮箱和真实姓名
r(count($emails)) && p() && e('5'); //从accounts中获取到的用户邮箱数量
+9 -2
View File
@@ -4,13 +4,20 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1-100');
$user->account->range('1-100')->prefix('dev');
$user->password->range('f8e41d6c31824c01e5d67c61a8ae49e9,e10adc3949ba59abbe56e057f20f883e');
$user->realname->range('1-100')->prefix("开发");
$user->gen(50);
/**
title=测试 userModel->identify();
cid=1
pid=1
用户名密码皆正确,返回验证登录的用户 >> admin
用户名密码皆正确,返回验证登录的用户真实姓名 >> 开发1
验证一个不存在的用户,返回空 >> 0
验证一个不传用户名和密码的用户,返回空 >> 0
@@ -18,6 +25,6 @@ pid=1
$user = new userTest();
r($user->identifyTest('admin', '78302615c8b79cac8df6d2607f8a83ee')) && p('realname') && e('admin'); //用户名密码皆正确,返回验证登录的用户
r($user->identifyTest('dev1', 'f8e41d6c31824c01e5d67c61a8ae49e9')) && p('realname') && e('开发1'); //用户名密码皆正确,返回验证登录的用户真实姓名
r($user->identifyTest('asdjaf12', '78302615c8b79cac8df6d2607f8a83ee')) && p() && e('0'); //验证一个不存在的用户,返回空
r($user->identifyTest('', '')) && p() && e('0'); //验证一个不传用户名和密码的用户,返回空
+12 -4
View File
@@ -4,6 +4,9 @@ include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->gen(50);
/**
title=测试 userModel->login();
@@ -11,7 +14,7 @@ cid=1
pid=1
使用admin登录,返回此用户为超级管理员 >> 1
使用Admin登录,返回权限列表的数量 >> 3
使用user3登录,返回权限列表的数量 >> 6
使用空账号登录,返回权限列表数量为0 >> 0
*/
@@ -23,11 +26,16 @@ $admin->id = 1;
$admin->account = 'admin';
$admin = $userClass->loginTest($admin);
$normalAccount = new stdclass();
$normalAccount->id = 4;
$normalAccount->account = 'user3';
$normalAccount = $userClass->loginTest($normalAccount);
$emptyAccount = new stdclass();
$emptyAccount->id = 0;
$emptyAccount->account = '';
$emptyAccount = $userClass->loginTest($emptyAccount);
r($admin) && p('admin') && e('1'); //使用admin登录,返回此用户为超级管理员
r(count($admin->rights)) && p() && e('3'); //使用Admin登录,返回权限列表的数量
r(count($emptyAccount->group)) && p() && e('0'); //使用空账号登录,返回权限列表数量为0
r($admin) && p('admin') && e('1'); //使用admin登录,返回此用户为超级管理员
r(count($normalAccount->rights)) && p() && e('6'); //使用admin登录,返回权限列表的数量
r(count($emptyAccount->group)) && p() && e('0'); //使用空账号登录,返回权限列表数量为0
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/user.class.php';
su('admin');
$user = zdTable('user');
$user->id->range('1001-1005');
$user->account->range('1-5')->prefix("account");
$user->realname->range('1-5')->prefix("用户名");
$user->deleted->range('0-1');
$user->gen(5);
/**
title=测试 userModel::setUserList();
cid=1
pid=1
测试获取account1的是否在列表中 >> 1
测试获取account2的是否在列表中 >> 1
测试获取account3的是否在列表中 >> 1
测试获取account4的是否在列表中 >> 1
测试获取account5的是否在列表中 >> 0
*/
$users = array('account1' => '用户名1', 'account2' => '用户名2', 'account3' => '用户名3', 'account4' => '用户名4');
$user = new userTest();
r($user->setUserListTest($users, 'account1')) && p() && e('1'); // 测试获取account1的是否在列表中
r($user->setUserListTest($users, 'account2')) && p() && e('1'); // 测试获取account2的是否在列表中
r($user->setUserListTest($users, 'account3')) && p() && e('1'); // 测试获取account3的是否在列表中
r($user->setUserListTest($users, 'account4')) && p() && e('1'); // 测试获取account4的是否在列表中
r($user->setUserListTest($users, 'account5')) && p() && e('0'); // 测试获取account5的是否在列表中