From 7684fc3c7d3a90b69da93953ef9ec5cd1a85a329 Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 28 Dec 2023 08:32:20 +0800 Subject: [PATCH] * Adjust for unit test. --- module/programplan/model.php | 15 +-- module/programplan/tao.php | 107 +++++++++--------- module/programplan/test/model/create.php | 34 ++++++ module/programplan/test/model/getbyid.php | 20 ++-- .../test/model/getdataforgantt.php | 21 ++-- .../getdataforganttgroupbyassignedto.php | 21 ++-- module/programplan/test/model/getduration.php | 17 +-- module/programplan/test/model/getpairs.php | 22 ++-- module/programplan/test/model/getplans.php | 19 ++-- module/programplan/test/model/getstage.php | 41 ++++--- module/programplan/test/model/processplan.php | 16 ++- .../programplan/test/model/processplans.php | 15 +-- .../test/model/yaml/getpairs/getpairs.yaml | 4 + module/programplan/test/programplan.class.php | 70 +++++++----- module/programplan/test/tao/getstagelist.php | 13 +-- 15 files changed, 221 insertions(+), 214 deletions(-) create mode 100755 module/programplan/test/model/create.php diff --git a/module/programplan/model.php b/module/programplan/model.php index d042eb6ec1..836ded69db 100755 --- a/module/programplan/model.php +++ b/module/programplan/model.php @@ -163,14 +163,7 @@ class programplanModel extends model if($project->model == 'ipd' and $datas) $datas = $this->programplanTao->buildGanttData4IPD($datas, $projectID, $productID, $selectCustom, $reviewDeadline); /* Calculate the progress of the phase. */ - foreach($stageIndex as $index => $stage) - { - $progress = empty($stage['progress']['totalConsumed']) ? 0 : round($stage['progress']['totalConsumed'] / $stage['progress']['totalReal'], 3); - $datas['data'][$index]->progress = $progress; - $datas['data'][$index]->taskProgress = ($progress * 100) . '%'; - $datas['data'][$index]->estimate = $stage['progress']['totalEstimate']; - $datas['data'][$index]->consumed = $stage['progress']['totalConsumed']; - } + $datas = $this->programplanTao->setStageSummary($datas, $stageIndex); /* Set relation task data. */ $datas['links'] = $this->programplanTao->buildGanttLinks($planIdList); @@ -327,7 +320,6 @@ class programplanModel extends model /* Get linked product by projectID. */ $this->loadModel('action'); $this->loadModel('execution'); - $project = $this->fetchById($projectID, 'project'); $linkProducts = $this->programplanTao->getLinkProductsForCreate($projectID, $productID); /* Set each plans. */ @@ -353,10 +345,11 @@ class programplanModel extends model } else { - $stageID = $this->programplanTao->insertStage($plan, $project, $productID, $parentID); + $stageID = $this->programplanTao->insertStage($plan, $projectID, $productID, $parentID); if(dao::isError()) return false; - $extra = ($project->hasProduct and !empty($linkProducts['products'])) ? implode(',', $linkProducts['products']) : ''; + $project = $this->fetchByID($projectID, 'project'); + $extra = ($project && $project->hasProduct and !empty($linkProducts['products'])) ? implode(',', $linkProducts['products']) : ''; $this->action->create('execution', $stageID, 'opened', '', $extra); $this->execution->updateProducts($stageID, $linkProducts); diff --git a/module/programplan/tao.php b/module/programplan/tao.php index 96e00463f7..e876db1c72 100644 --- a/module/programplan/tao.php +++ b/module/programplan/tao.php @@ -10,6 +10,35 @@ declare(strict_types=1); */ class programplanTao extends programplanModel { + /** + * 获取阶段信息。 + * Get stage list. + * + * @param int $executionID + * @param int $productID + * @param string $browseType + * @param string $orderBy + * @access protected + * @return array + */ + protected function getStageList(int $executionID, int $productID, string $browseType, string $orderBy = 'id_asc'): array + { + if(empty($executionID)) return array(); + $projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('model'); + + return $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1') + ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project') + ->where('1 = 1') + ->beginIF(!in_array($projectModel, array('waterfallplus', 'ipd')))->andWhere('t1.type')->eq('stage')->fi() + ->beginIF($productID)->andWhere('t2.product')->eq($productID)->fi() + ->beginIF($browseType == 'all' || $browseType == 'leaf')->andWhere('t1.project')->eq($executionID)->fi() + ->beginIF($browseType == 'parent')->andWhere('t1.parent')->eq($executionID)->fi() + ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi() + ->andWhere('t1.deleted')->eq('0') + ->orderBy($orderBy) + ->fetchAll('id'); + } + /** * 更新项目阶段。 * update program plan. @@ -184,17 +213,17 @@ class programplanTao extends programplanModel /* Determines if the object is delay. */ $data->delay = $this->lang->programplan->delayList[0]; $data->delayDays = 0; - if($today > $end and $plan->status != 'closed') + if($today > $data->endDate and $plan->status != 'closed') { $data->delay = $this->lang->programplan->delayList[1]; - $data->delayDays = helper::diffDate($today, substr($end, 0, 10)); + $data->delayDays = helper::diffDate($today, $data->endDate); } - if($data->endDate > $data->start_date) $data->duration = helper::diffDate(substr($data->endDate, 0, 10), substr($data->start_date, 0, 10)) + 1; - if($data->start_date == '' or $data->endDate == '') $data->duration = 1; + if($data->endDate > $data->start_date) $data->duration = helper::diffDate($data->endDate, $data->start_date) + 1; + if(empty($data->start_date) or empty($data->endDate)) $data->duration = 1; $datas['data'][$plan->id] = $data; - $stageIndex[$plan->id] = array('planID' => $plan->id, 'parent' => $plan->parent, 'progress' => array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalReal' => 0)); + $stageIndex[$plan->id] = array('planID' => $plan->id, 'parent' => $plan->parent, 'totalEstimate' => 0, 'totalConsumed' => 0, 'totalReal' => 0); } } @@ -242,49 +271,20 @@ class programplanTao extends programplanModel if($stage['planID'] != $task->execution) continue; if(!isset($stageIndex[$index])) continue; - $stageIndex[$index]['progress']['totalEstimate'] += $task->estimate; - $stageIndex[$index]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed; - $stageIndex[$index]['progress']['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed); - - if(!isset($stageIndex[$parent])) continue; + $stageIndex[$index]['totalEstimate'] += $task->estimate; + $stageIndex[$index]['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed; + $stageIndex[$index]['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed); $parent = $stage['parent']; - $stageIndex[$parent]['progress']['totalEstimate'] += $task->estimate; - $stageIndex[$parent]['progress']['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed; - $stageIndex[$parent]['progress']['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed); + if(!isset($stageIndex[$parent])) continue; + + $stageIndex[$parent]['totalEstimate'] += $task->estimate; + $stageIndex[$parent]['totalConsumed'] += $task->parent == '-1' ? 0 : $task->consumed; + $stageIndex[$parent]['totalReal'] += ((($task->status == 'closed' || $task->status == 'cancel') ? 0 : $task->left) + $task->consumed); } } } - /** - * 获取阶段信息。 - * Get stage list. - * - * @param int $executionID - * @param int $productID - * @param string $browseType - * @param string $orderBy - * @access protected - * @return array - */ - protected function getStageList(int $executionID, int $productID, string $browseType, string $orderBy = 'id_asc'): array - { - if(empty($executionID)) return array(); - $projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('model'); - - return $this->dao->select('t1.*')->from(TABLE_EXECUTION)->alias('t1') - ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.project') - ->where('1 = 1') - ->beginIF(!in_array($projectModel, array('waterfallplus', 'ipd')))->andWhere('t1.type')->eq('stage')->fi() - ->beginIF($productID)->andWhere('t2.product')->eq($productID)->fi() - ->beginIF($browseType == 'all' || $browseType == 'leaf')->andWhere('t1.project')->eq($executionID)->fi() - ->beginIF($browseType == 'parent')->andWhere('t1.parent')->eq($executionID)->fi() - ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->sprints)->fi() - ->andWhere('t1.deleted')->eq('0') - ->orderBy($orderBy) - ->fetchAll('id'); - } - /** * 获取子阶段数量。 * Get stage count. @@ -461,7 +461,7 @@ class programplanTao extends programplanModel $linkProducts = array(); $linkBranches = array(); $productList = $this->loadModel('product')->getProducts($projectID); - if($project->stageBy) + if($project && $project->stageBy) { $linkProducts = array(0 => $productID); if(!empty($productList)) $linkBranches = array(0 => $productList[$productID]->branches); @@ -482,19 +482,20 @@ class programplanTao extends programplanModel * 插入阶段数据。 * Insert stage. * @param object $plan - * @param object $project + * @param int $projectID * @param int $productID * @param int $parentID * @access protected * @return int|false */ - protected function insertStage(object $plan, object $project, int $productID, int $parentID): int|false + protected function insertStage(object $plan, int $projectID, int $productID, int $parentID): int|false { + $project = $this->fetchById($projectID, 'project'); $account = $this->app->user->account; unset($plan->id); $plan->status = 'wait'; - $plan->stageBy = $project->stageBy; + $plan->stageBy = zget($project, 'stageBy', ''); $plan->version = 1; $plan->parentVersion = $plan->parent == 0 ? 0 : $this->dao->findByID($plan->parent)->from(TABLE_PROJECT)->fetch('version'); $plan->team = substr($plan->name,0, 30); @@ -510,7 +511,7 @@ class programplanTao extends programplanModel $this->insertProjectSpec($stageID, $plan); /* Ipd project create default review points. */ - if($project->model == 'ipd' && $this->config->edition == 'ipd' && !$parentID) $this->loadModel('review')->createDefaultPoint($project->id, $productID, $plan->attribute); + if($project && $project->model == 'ipd' && $this->config->edition == 'ipd' && !$parentID) $this->loadModel('review')->createDefaultPoint($project->id, $productID, $plan->attribute); if($plan->type == 'kanban') { @@ -518,7 +519,7 @@ class programplanTao extends programplanModel $this->loadModel('kanban')->createRDKanban($execution); } - $this->loadModel('execution')->createMainLib($project->id, $stageID); + if($project) $this->loadModel('execution')->createMainLib($project->id, $stageID); $this->execution->addExecutionMembers($stageID, array($account, $plan->PM)); $this->setTreePath($stageID); @@ -787,13 +788,13 @@ class programplanTao extends programplanModel */ protected function setStageSummary(array $ganttData, array $stages): array { - foreach($stages as $groupKey => $stage) + foreach($stages as $index => $stage) { $progress = empty($stage['totalReal']) ? 0 : round($stage['totalConsumed'] / $stage['totalReal'], 3); - $ganttData['data'][$groupKey]->progress = $progress; - $ganttData['data'][$groupKey]->taskProgress = ($progress * 100) . '%'; - $ganttData['data'][$groupKey]->estimate = $stage['totalEstimate']; - $ganttData['data'][$groupKey]->consumed = $stage['totalConsumed']; + $ganttData['data'][$index]->progress = $progress; + $ganttData['data'][$index]->taskProgress = ($progress * 100) . '%'; + $ganttData['data'][$index]->estimate = $stage['totalEstimate']; + $ganttData['data'][$index]->consumed = $stage['totalConsumed']; } return $ganttData; } diff --git a/module/programplan/test/model/create.php b/module/programplan/test/model/create.php new file mode 100755 index 0000000000..a080a613f0 --- /dev/null +++ b/module/programplan/test/model/create.php @@ -0,0 +1,34 @@ +#!/usr/bin/env php +create(); +cid=0 + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/programplan.class.php'; +su('admin'); + +zdTable('project')->gen(10); +zdTable('task')->gen(10); + + +$names = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571', '新增的阶段', '', '', '', ''); +$percents = array('0', '0', '0', '0', '0', '0', '0', '0', '', '', '', ''); +$begin = array(); +$end = array(); +$idList = array(11, 12); +$create = array('name' => $names, 'percent' => $percents, 'begin' => $begin, 'end' => $end, 'id' => $idList); + +$programplan = new programplanTest(); + +$programplan->objectModel->create(array()); +r(dao::getError()) && p('message:0') && e('『阶段名称』不能为空。'); // 测试创建用例 工作量占比非数字 + +r($programplan->createTest(array(), 0, 0, 1000)) && p('message:0') && e('『阶段名称』不能为空。'); // 测试创建用例 工作量占比非数字 +exit; + +r($programplan->createTest()) && p() && e('7'); // 测试正常更新阶段信息 获取阶段数量 +r($programplan->createTest($create)) && p() && e('8'); // 测试正常创建一条阶段信息 获取阶段数量 diff --git a/module/programplan/test/model/getbyid.php b/module/programplan/test/model/getbyid.php index c9b0f9cc41..b70b61709b 100755 --- a/module/programplan/test/model/getbyid.php +++ b/module/programplan/test/model/getbyid.php @@ -1,25 +1,21 @@ #!/usr/bin/env php config('project')->gen(10); -} /** title=测试 programplanModel->getByID(); -timeout=0 -cid=1 +cid=0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +su('admin'); -initData(); +zdTable('project')->config('project')->gen(10); global $tester; $tester->loadModel('programplan'); -r($tester->programplan->getByID(2)) && p('name,code') && e('执行1-1,sprint1-1'); // 判断项目阶段id=2的name -r($tester->programplan->getByID(1)) && p('milestone,setMilestone') && e('0,~~'); // 判断项目id=1走else的milestone,setMilestone +r($tester->programplan->getByID(0)) && p() && e('0'); // 传入0参数。 +r($tester->programplan->getByID(20)) && p() && e('0'); // 传入不存在的ID。 +r($tester->programplan->getByID(2)) && p('name,code') && e('执行1-1,sprint1-1'); // 判断项目阶段id=2的name +r($tester->programplan->getByID(1)) && p('milestone,setMilestone') && e('0,``'); // 判断项目id=1走else的milestone,setMilestone diff --git a/module/programplan/test/model/getdataforgantt.php b/module/programplan/test/model/getdataforgantt.php index 3439159e12..716fdc24e0 100755 --- a/module/programplan/test/model/getdataforgantt.php +++ b/module/programplan/test/model/getdataforgantt.php @@ -1,25 +1,20 @@ #!/usr/bin/env php config('project')->gen(5); - zdTable('task')->config('task')->gen(8); - zdTable('projectproduct')->config('projectproduct')->gen(5); -} /** title=测试 programplanModel->getDataForGantt(); -timeout=0 -cid=1 +cid=0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/programplan.class.php'; +su('admin'); + +zdTable('project')->config('project')->gen(5); +zdTable('task')->config('task')->gen(8); +zdTable('projectproduct')->config('projectproduct')->gen(5); -initData(); $programplan = new programplanTest(); $selectCustom = 'date,task'; diff --git a/module/programplan/test/model/getdataforganttgroupbyassignedto.php b/module/programplan/test/model/getdataforganttgroupbyassignedto.php index 841f2cfa5f..455df9b127 100755 --- a/module/programplan/test/model/getdataforganttgroupbyassignedto.php +++ b/module/programplan/test/model/getdataforganttgroupbyassignedto.php @@ -1,25 +1,20 @@ #!/usr/bin/env php config('project')->gen(5); - zdTable('task')->config('task')->gen(8); - zdTable('projectproduct')->config('projectproduct')->gen(5); -} /** title=测试 programplanModel->getDataForGanttGroupByAssignedTo(); -timeout=0 -cid=1 +cid=0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/programplan.class.php'; +su('admin'); + +zdTable('project')->config('project')->gen(5); +zdTable('task')->config('task')->gen(8); +zdTable('projectproduct')->config('projectproduct')->gen(5); -initData(); $programplan = new programplanTest(); $selectCustom = 'date,task'; diff --git a/module/programplan/test/model/getduration.php b/module/programplan/test/model/getduration.php index 1cc3deafc2..fa84470eed 100755 --- a/module/programplan/test/model/getduration.php +++ b/module/programplan/test/model/getduration.php @@ -1,22 +1,15 @@ #!/usr/bin/env php getDuration(); -cid=1 -pid=1 - -测试获取2022-04-01 ~ 2022-05-01持续时间 >> 21 -测试获取2022-04-02 ~ 2022-05-06持续时间 >> 25 -测试获取2022-04-03 ~ 2022-05-11持续时间 >> 28 -测试获取2022-04-04 ~ 2022-05-16持续时间 >> 31 -测试获取2022-04-05 ~ 2022-05-21持续时间 >> 34 +cid=0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/programplan.class.php'; +su('admin'); $beginList = array('2022-04-01', '2022-04-02', '2022-04-03', '2022-04-04', '2022-04-05'); $endList = array('2022-05-01', '2022-05-06', '2022-05-11', '2022-05-16', '2022-05-21'); @@ -27,4 +20,4 @@ r($programplan->getDurationTest($beginList[0], $endList[0])) && p() && e('21'); r($programplan->getDurationTest($beginList[1], $endList[1])) && p() && e('25'); // 测试获取2022-04-02 ~ 2022-05-06持续时间 r($programplan->getDurationTest($beginList[2], $endList[2])) && p() && e('28'); // 测试获取2022-04-03 ~ 2022-05-11持续时间 r($programplan->getDurationTest($beginList[3], $endList[3])) && p() && e('31'); // 测试获取2022-04-04 ~ 2022-05-16持续时间 -r($programplan->getDurationTest($beginList[4], $endList[4])) && p() && e('34'); // 测试获取2022-04-05 ~ 2022-05-21持续时间 \ No newline at end of file +r($programplan->getDurationTest($beginList[4], $endList[4])) && p() && e('34'); // 测试获取2022-04-05 ~ 2022-05-21持续时间 diff --git a/module/programplan/test/model/getpairs.php b/module/programplan/test/model/getpairs.php index ea02791b11..347a38950b 100755 --- a/module/programplan/test/model/getpairs.php +++ b/module/programplan/test/model/getpairs.php @@ -1,27 +1,23 @@ #!/usr/bin/env php config('getpairs')->gen(10); -zdTable('projectproduct')->config('getprojectproduct')->gen(20); -su('admin'); /** title=测试 programplanModel->getPairs(); -timeout=0 -cid=1 - -- 测试获取执行11 产品11的计划键值对 @,/项目11 - -- 测试获取执行12 产品12的计划键值对 @,/项目12 +cid=0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/programplan.class.php'; +su('admin'); + +zdTable('project')->config('getpairs')->gen(10); +zdTable('projectproduct')->config('getprojectproduct')->gen(20); $executionIDList = array(11, 12, 13, 14, 15); $productIDList = array(11, 12, 13, 14, 15); $programplan = new programplanTest(); -r($programplan->getPairsTest($executionIDList[0], $productIDList[0])) && p() && e(',/项目11'); // 测试获取执行11 产品11的计划键值对 -r($programplan->getPairsTest($executionIDList[1], $productIDList[1], 'leaf')) && p() && e(',/项目12'); // 测试获取执行12 产品12的计划键值对 +r($programplan->getPairsTest($executionIDList[0], $productIDList[0])) && p() && e(';/项目11'); // 测试获取执行11 产品11的计划键值对 +r($programplan->getPairsTest($executionIDList[1], $productIDList[1], 'leaf')) && p() && e(';/项目12'); // 测试获取执行12 产品12的计划键值对 diff --git a/module/programplan/test/model/getplans.php b/module/programplan/test/model/getplans.php index 5c7968e1c2..933a28e2ec 100755 --- a/module/programplan/test/model/getplans.php +++ b/module/programplan/test/model/getplans.php @@ -1,26 +1,21 @@ #!/usr/bin/env php config('project')->gen(5); - zdTable('projectproduct')->config('projectproduct')->gen(5); -} - /** title=测试 programplanModel->getPlans(); -cid=1 -pid=1 +cid=0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +su('admin'); -initData(); +zdTable('project')->config('project')->gen(5); +zdTable('product')->gen(5); +zdTable('projectproduct')->config('projectproduct')->gen(5); global $tester; $tester->loadModel('programplan'); +$tester->programplan->app->user->admin = true; r($tester->programplan->getPlans(2, 2)[2]) && p('type,name') && e('stage,阶段a'); // 测试获取执行2 产品2的阶段 r($tester->programplan->getPlans(3, 2)[3]) && p('type,name') && e('stage,阶段a子1'); // 测试获取执行3 产品2的阶段 diff --git a/module/programplan/test/model/getstage.php b/module/programplan/test/model/getstage.php index 9c5f5a7087..a8cc772f7c 100755 --- a/module/programplan/test/model/getstage.php +++ b/module/programplan/test/model/getstage.php @@ -1,33 +1,32 @@ #!/usr/bin/env php getStage(); +cid=0 + +*/ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/programplan.class.php'; su('admin'); zdTable('project')->config('project')->gen(10); +zdTable('product')->gen(5); zdTable('projectproduct')->config('projectproduct')->gen(10); - -/** - -title=测试 programplanModel->getStage(); -cid=1 -pid=1 - -*/ -$IDList = array(2, 3, 5); -$productIDList = array(2, 2, 2, 2); -$typeList = array('all', 'parent'); -$order = 'id_desc'; +$executionIDList = array(2, 3, 5); +$productIDList = array(2, 2, 2, 2); +$typeList = array('all', 'parent'); +$order = 'id_desc'; $programplan = new programplanTest(); +$programplan->objectModel->app->user->admin = true; -r($programplan->getStageTest($IDList[0], $productIDList[0], $typeList[0])) && p() && e(',新阶段a子1,新阶段a子2,新阶段a子3'); // 测试获取阶段2 产品2 all的名称 -r($programplan->getStageTest($IDList[0], $productIDList[0], $typeList[1])) && p() && e(',新阶段a子1,新阶段a子3'); // 测试获取阶段2 产品2 parent的名称 -r($programplan->getStageTest($IDList[0], $productIDList[0], $typeList[0], $order)) && p() && e(',新阶段a子3,新阶段a子2,新阶段a子1'); // 测试获取阶段2 产品2 parent id倒叙的名称 -r($programplan->getStageTest($IDList[1], $productIDList[1], $typeList[0])) && p() && e(',新阶段a子1子1'); // 测试获取阶段3 产品2 all的名称 -r($programplan->getStageTest($IDList[1], $productIDList[1], $typeList[1])) && p() && e(',新阶段a子1子2'); // 测试获取阶段3 产品2 parent的名称 -r($programplan->getStageTest($IDList[2], $productIDList[2], $typeList[0])) && p() && e(',新阶段b子1,新阶段b子2'); // 测试获取阶段5 产品2 all的名称 -r($programplan->getStageTest($IDList[2], $productIDList[2], $typeList[1])) && p() && e(',新阶段b子1'); // 测试获取阶段5 产品2 parent的名称 -r($programplan->getStageTest($IDList[2], $productIDList[2], $typeList[0], $order)) && p() && e(',新阶段b子2,新阶段b子1'); // 测试获取阶段2 产品2 all id倒叙的名称 +r($programplan->getStageTest($executionIDList[0], $productIDList[0], $typeList[0])) && p('0,1') && e('新阶段a子1;新阶段a子2;新阶段a子3,2;2;2'); // 测试获取阶段2 产品2 all的名称 +r($programplan->getStageTest($executionIDList[0], $productIDList[0], $typeList[0], $order)) && p('0,1') && e('新阶段a子3;新阶段a子2;新阶段a子1,2;2;2'); // 测试获取阶段2 产品2 parent id倒叙的名称 +r($programplan->getStageTest($executionIDList[0], $productIDList[0], $typeList[1])) && p('0,1') && e('新阶段a子1;新阶段a子3,2;2'); // 测试获取阶段2 产品2 parent的名称 +r($programplan->getStageTest($executionIDList[1], $productIDList[1], $typeList[0])) && p('0,1') && e('新阶段a子1子1,2'); // 测试获取阶段3 产品2 all的名称 +r($programplan->getStageTest($executionIDList[1], $productIDList[1], $typeList[1])) && p('0,1') && e('新阶段a子1子2,2'); // 测试获取阶段3 产品2 parent的名称 +r($programplan->getStageTest($executionIDList[2], $productIDList[2], $typeList[0])) && p('0,1') && e('新阶段b子1;新阶段b子2,2;2'); // 测试获取阶段5 产品2 all的名称 +r($programplan->getStageTest($executionIDList[2], $productIDList[2], $typeList[1])) && p('0,1') && e('新阶段b子1,2'); // 测试获取阶段5 产品2 parent的名称 +r($programplan->getStageTest($executionIDList[2], $productIDList[2], $typeList[0], $order)) && p('0,1') && e('新阶段b子2;新阶段b子1,2;2'); // 测试获取阶段2 产品2 all id倒叙的名称 diff --git a/module/programplan/test/model/processplan.php b/module/programplan/test/model/processplan.php index 5401989639..c56523fbc7 100755 --- a/module/programplan/test/model/processplan.php +++ b/module/programplan/test/model/processplan.php @@ -1,6 +1,12 @@ #!/usr/bin/env php processPlan(); +cid=0 + +*/ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/programplan.class.php'; @@ -9,14 +15,6 @@ su('admin'); zdTable('project')->config('project')->gen(5); zdTable('projectproduct')->config('projectproduct')->gen(5); zdTable('product')->config('product')->gen(2); - -/** - -title=测试 programplanModel->processPlan(); -cid=1 -pid=1 - -*/ $planIDList = array(1, 2, 3); $programplan = new programplanTest(); diff --git a/module/programplan/test/model/processplans.php b/module/programplan/test/model/processplans.php index 211e1ffdb0..f2d0e20660 100755 --- a/module/programplan/test/model/processplans.php +++ b/module/programplan/test/model/processplans.php @@ -1,6 +1,11 @@ #!/usr/bin/env php processPlans(); +cid=0 + +*/ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/programplan.class.php'; @@ -9,14 +14,6 @@ su('admin'); zdTable('project')->config('project')->gen(6); zdTable('projectproduct')->config('projectproduct')->gen(6); zdTable('product')->config('product')->gen(2); - -/** - -title=测试 programplanModel->processPlans(); -cid=1 -pid=1 - -*/ $planIDList = array(array(1, 2), array(3, 4), array(5, 6, 7)); $programplan = new programplanTest(); diff --git a/module/programplan/test/model/yaml/getpairs/getpairs.yaml b/module/programplan/test/model/yaml/getpairs/getpairs.yaml index 691bf7b7ce..c6079887a9 100644 --- a/module/programplan/test/model/yaml/getpairs/getpairs.yaml +++ b/module/programplan/test/model/yaml/getpairs/getpairs.yaml @@ -27,6 +27,10 @@ fields: range: 'stage,project' - field: grade range: 1 + - field: path + range: 11-20 + prefix: ',1,' + postfix: ',' - field: days range: 1 - field: status diff --git a/module/programplan/test/programplan.class.php b/module/programplan/test/programplan.class.php index b810cac110..a5619264ae 100644 --- a/module/programplan/test/programplan.class.php +++ b/module/programplan/test/programplan.class.php @@ -8,6 +8,8 @@ class programplanTest global $tester; $this->objectModel = $tester->loadModel('programplan'); $tester->dao->delete()->from(TABLE_PROJECTSPEC)->exec(); + + $this->objectModel->app->user->admin = true; } /** @@ -37,17 +39,20 @@ class programplanTest * @param string $browseType * @param string $orderBy * @access public - * @return string + * @return array */ - public function getStageTest(int $executionID = 0, int $productID = 0, string $browseType = 'all', string $orderBy = 'id_asc'): string + public function getStageTest(int $executionID = 0, int $productID = 0, string $browseType = 'all', string $orderBy = 'id_asc'): array { $objects = $this->objectModel->getStage($executionID, $productID, $browseType, $orderBy); - if(dao::isError()) return dao::getError(); - - $title = ''; - foreach($objects as $object) $title .= ',' . $object->name; - return $title; + $titles = array(); + $products = array(); + foreach($objects as $object) + { + $titles[] = $object->name; + $products[] = $object->product; + } + return array(implode(';', $titles), implode(';', $products)); } /** @@ -102,7 +107,7 @@ class programplanTest if(dao::isError()) return dao::getError(); - return implode(',', $objects); + return implode(';', $objects); } /** @@ -183,40 +188,47 @@ class programplanTest * @access public * @return array */ - public function createTest($param = array()) + public function createTest($param = array(), $projectID = 0, $productID = 0, $parentID = 0) { - $_POST['planIDList'] = array('131', '221', '311', '401', '491', '581', '671'); - - global $tester; - $plans = $tester->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($_POST['planIDList'])->fetchAll(); - - - $_POST['names'] = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571', '', '', '', '', ''); + $date = date('Y-m-d'); + $_POST['names'] = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571'); $_POST['PM'] = array('', '', '', '', '', '', '', '', '', '', '', ''); $_POST['percents'] = array('0', '0', '0', '0', '0', '0', '0', '', '', '', '', ''); $_POST['attributes'] = array('request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request', 'request'); $_POST['acl'] = array('private', 'open', 'open', 'private', 'private', 'open', 'open', 'open', 'open', 'open', 'open', 'open'); $_POST['milestone'] = array('0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'); - $_POST['begin'] = (isset($param['begin']) and isset($param['end'])) ? array($plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, '', '', '', '') : array($plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, $plans[0]->begin, '', '', '', '', ''); - $_POST['end'] = (isset($param['begin']) and isset($param['end'])) ? array($plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, '', '', '', '') : array($plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, $plans[0]->end, '', '', '', '', ''); - $_POST['realBegan'] = array('', '', '', '', '', '', '', '', '', '', '', ''); - $_POST['realEnd'] = array('', '', '', '', '', '', '', '', '', '', '', ''); - foreach($param as $field => $value) + $plans = array(); + foreach($_POST['names'] as $i => $name) { - if(count($param) == 1 or ($field != 'begin' and $field != 'end')) $_POST[$field] = $value; + $plan = new stdclass(); + $plan->id = 0; + $plan->type = 'stage'; + $plan->name = $name; + $plan->parent = 1; + $plan->PM = $_POST['PM'][$i]; + $plan->percent = $_POST['percents'][$i]; + $plan->attribute = $_POST['attributes'][$i]; + $plan->milestone = $_POST['milestone'][$i]; + $plan->begin = $date; + $plan->end = $date; + $plan->realBegan = null; + $plan->realEnd = null; + $plan->acl = $_POST['acl'][$i]; + + $plans[] = $plan; } - $objects = $this->objectModel->create(41, 0, 0); + foreach($param as $field => $values) + { + foreach($values as $i => $value) $plans[$i]->{$field} = $value; + } + + $objects = $this->objectModel->create($plans, $projectID, $productID, $parentID); unset($_POST); - if(dao::isError()) - { - $error = dao::getError()['message'][0]; - $error = strpos($error, '所属项目的') > 0 ? preg_replace('/\d{4}-\d{2}-\d{2}/', '', $error) : $error; - return $error; - } + if(dao::isError()) return dao::getError(); $objects = $tester->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($plans[0]->parent)->andWhere('type')->eq('stage')->fetchAll(); return count($objects); diff --git a/module/programplan/test/tao/getstagelist.php b/module/programplan/test/tao/getstagelist.php index 1f95d4ad81..285b922a44 100755 --- a/module/programplan/test/tao/getstagelist.php +++ b/module/programplan/test/tao/getstagelist.php @@ -1,23 +1,22 @@ #!/usr/bin/env php getStageList() -cid=1 -pid=1 +cid=0 */ +include dirname(__FILE__, 5). '/test/lib/init.php'; +su('admin'); + zdTable('project')->config('project')->gen(5); zdTable('projectproduct')->config('projectproduct')->gen(5); global $tester; -$tester->loadModel('programplan')->programplanTao; +$tester->loadModel('programplan'); +$tester->programplan->app->user->admin = true; $browseType = 'parent'; $IDList = array(1, 2, 3, 4, 5, 100);