From 14c6b4b9dece8b13fa99c3b4300d215777080c8e Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 12 Apr 2022 14:29:29 +0800 Subject: [PATCH] * Add unit test of programplan. --- test/class/programplan.class.php | 133 +++++++++++++----- test/data/execution.yaml | 2 +- test/model/programplan/create.php | 45 ++++++ .../programplan/getmilestonebyproduct.php | 2 +- test/model/programplan/getpairs.php | 23 +++ test/model/programplan/gettotalpercent.php | 24 ++++ test/model/programplan/iscreatetask.php | 22 +++ test/model/programplan/processplan.php | 22 +++ test/model/programplan/processplans.php | 22 +++ test/model/programplan/settreepath.php | 22 +++ test/model/programplan/update.php | 38 +++++ 11 files changed, 319 insertions(+), 36 deletions(-) create mode 100755 test/model/programplan/create.php create mode 100755 test/model/programplan/getpairs.php create mode 100755 test/model/programplan/gettotalpercent.php create mode 100755 test/model/programplan/iscreatetask.php create mode 100755 test/model/programplan/processplan.php create mode 100755 test/model/programplan/processplans.php create mode 100755 test/model/programplan/settreepath.php create mode 100755 test/model/programplan/update.php diff --git a/test/class/programplan.class.php b/test/class/programplan.class.php index 6fe72f5a32..93cc06401d 100644 --- a/test/class/programplan.class.php +++ b/test/class/programplan.class.php @@ -98,27 +98,36 @@ class programplanTest return implode(',', $objects); } - public function getDataForGanttTest($executionID, $productID, $baselineID = 0, $selectCustom = '', $returnJson = false) + /** + * Test get total percent. + * + * @param int $stageID + * @param bool $parent + * @access public + * @return int + */ + public function getTotalPercentTest($stageID, $parent = false) { - $objects = $this->objectModel->getDataForGantt($executionID, $productID, $baselineID, $selectCustom, $returnJson); + $stage = $this->objectModel->getByID($stageID); + + $int = $this->objectModel->getTotalPercent($stage, $parent); if(dao::isError()) return dao::getError(); - $objects = is_string($objects) ? json_decode($objects) : $objects; - return $objects; + return $int; } - public function getTotalPercentTest($stage, $parent = false) + /** + * Test process plans. + * + * @param array $planIDList + * @access public + * @return array + */ + public function processPlansTest($planIDList) { - $objects = $this->objectModel->getTotalPercent($stage, $parent = false); + $plans = $this->objectModel->getByList($planIDList); - if(dao::isError()) return dao::getError(); - - return $objects; - } - - public function processPlansTest($plans) - { $objects = $this->objectModel->processPlans($plans); if(dao::isError()) return dao::getError(); @@ -126,13 +135,22 @@ class programplanTest return $objects; } - public function processPlanTest($plan) + /** + * Test process plan. + * + * @param int $planID + * @access public + * @return object + */ + public function processPlanTest($planID) { - $objects = $this->objectModel->processPlan($plan); + $plan = $this->objectModel->getByID($planID); + + $object = $this->objectModel->processPlan($plan); if(dao::isError()) return dao::getError(); - return $objects; + return $object; } /** @@ -162,62 +180,109 @@ class programplanTest public function createTest($param = array()) { $_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', '', '', '', '', ''); $_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'] = array('2022-03-13', '2022-03-13', '2022-03-16', '2022-03-16', '2022-03-19', '2022-03-19', '2022-03-22', '', '', '', '', ''); - $_POST['end'] = array('2022-05-18', '2022-04-30', '2022-05-18', '2022-05-18', '2022-04-30', '2022-05-18', '2022-05-18', '', '', '', '', ''); + $_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) $_POST[$field] = $value; + foreach($param as $field => $value) + { + if(count($param) == 1 or ($field != 'begin' and $field != 'end')) $_POST[$field] = $value; + } $objects = $this->objectModel->create(41, 0, 0); unset($_POST); - if(dao::isError()) return dao::getError(); + if(dao::isError()) + { + $error = dao::getError()['message'][0]; + $error = strpos($error, '所属项目的') > 0 ? preg_replace('/\d{4}-\d{2}-\d{2}/', '', $error) : $error; + return $error; + } - return $objects; + $objects = $tester->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($plans[0]->parent)->andWhere('type')->eq('stage')->fetchAll(); + return count($objects); } + /** + * Test set stage tree path. + * + * @param int $planID + * @access public + * @return object + */ public function setTreePathTest($planID) { - $objects = $this->objectModel->setTreePath($planID); + $this->objectModel->setTreePath($planID); if(dao::isError()) return dao::getError(); - return $objects; + $object = $this->objectModel->getByID($planID); + return $object; } - public function updateTest($planID = 0, $projectID = 0) + /** + * updateTest + * + * @param int $planID + * @param int $projectID + * @param array $param + * @param string $index + * @access public + * @return array + */ + public function updateTest($planID, $projectID, $param = array(), $index = '') { - $objects = $this->objectModel->update($planID = 0, $projectID = 0); + $plan = $this->objectModel->getByID($planID); - if(dao::isError()) return dao::getError(); + $_POST['parent'] = $plan->parent; + $_POST['name'] = $plan->name; + $_POST['percent'] = $plan->percent; + $_POST['attribute'] = $plan->attribute; + $_POST['milestone'] = $plan->milestone; + $_POST['acl'] = $plan->acl; + $_POST['begin'] = $plan->begin; + $_POST['end'] = $plan->end; + $_POST['realBegan'] = $plan->realBegan; + $_POST['realEnd'] = $plan->realEnd; - return $objects; - } + foreach($param as $key => $value) $_POST[$key] = $value; - public function printCellTest($col, $plan, $users, $projectID) - { - $objects = $this->objectModel->printCell($col, $plan, $users, $projectID); + $objects = $this->objectModel->update($planID, $projectID); - if(dao::isError()) return dao::getError(); + unset($_POST); + + if(dao::isError()) return $index == 'end' ? preg_replace('/『\d{4}-\d{2}-\d{2}』/', '', dao::getError()[$index][0]) : dao::getError()[$index][0]; return $objects; } + /** + * Test is create task. + * + * @param int $planID + * @access public + * @return int + */ public function isCreateTaskTest($planID) { - $objects = $this->objectModel->isCreateTask($planID); + $object = $this->objectModel->isCreateTask($planID); if(dao::isError()) return dao::getError(); - return $objects; + return $object ? 2 : 1; } /** diff --git a/test/data/execution.yaml b/test/data/execution.yaml index f4f51a8c51..977d864988 100644 --- a/test/data/execution.yaml +++ b/test/data/execution.yaml @@ -22,7 +22,7 @@ fields: - field: status range: wait,doing - field: percent - range: 0 + range: 0{30},10{30},0{30} - field: milestone range: 0{30},1{10},0{10},1{10},0{30} - field: auth diff --git a/test/model/programplan/create.php b/test/model/programplan/create.php new file mode 100755 index 0000000000..470f8156d4 --- /dev/null +++ b/test/model/programplan/create.php @@ -0,0 +1,45 @@ +#!/usr/bin/env php +create(); +cid=1 +pid=1 + +*/ + +$percentNumber = array('percents' => array('a', '0', '0', '0', '0', '0', '0', '', '', '', '', '')); +$emptyBegin = array('begin' => array('', '2022-03-13', '2022-03-16', '2022-03-16', '2022-03-19', '2022-03-19', '2022-03-22', '', '', '', '', '')); +$checkBegin = array('begin' => array('a', '2022-03-13', '2022-03-16', '2022-03-16', '2022-03-19', '2022-03-19', '2022-03-22', '', '', '', '', '')); +$emptyEnd = array('end' => array('', '2022-04-30', '2022-05-18', '2022-05-18', '2022-04-30', '2022-05-18', '2022-05-18', '', '', '', '', '')); +$checkEnd = array('end' => array('a', '2022-04-30', '2022-05-18', '2022-05-18', '2022-04-30', '2022-05-18', '2022-05-18', '', '', '', '', '')); +$planFinishSmall = array('end' => array('2022-03-12', '2022-04-30', '2022-05-18', '2022-05-18', '2022-04-30', '2022-05-18', '2022-05-18', '', '', '', '', '')); +$errorBegin = array('begin' => array('2022-01-01', '2022-03-13', '2022-03-16', '2022-03-16', '2022-03-19', '2022-03-19', '2022-03-22', '', '', '', '', '')); +$errorEnd = array('end' => array('2100-06-18', '2022-04-30', '2022-05-18', '2022-05-18', '2022-04-30', '2022-05-18', '2022-05-18', '', '', '', '', '')); +$percentOver = array('percents' => array('50', '51', '0', '0', '0', '0', '0', '', '', '', '', '')); + +$names = array('阶段31', '阶段121', '阶段211', '阶段301', '阶段391', '阶段481', '阶段571', '新增的阶段', '', '', '', ''); +$percents = array('0', '0', '0', '0', '0', '0', '0', '0', '', '', '', ''); +$begin = array(); +$end = array(); +$create = array('names' => $names, 'percents' => $percents, 'begin' => $begin, 'end' => $end); + + +$programplan = new programplanTest(); + +r($programplan->createTest($percentNumber)) && p() && e('"工作量比例"必须为数字'); // 测试创建用例 工作量占比非数字 +r($programplan->createTest($emptyBegin)) && p() && e('『计划开始』日期不能为空'); // 测试创建用例 计划开始为空 +r($programplan->createTest($checkBegin)) && p() && e('『计划开始』应当为合法的日期'); // 测试创建用例 计划开始非日期 +r($programplan->createTest($emptyEnd)) && p() && e('『计划完成』日期不能为空'); // 测试创建用例 计划完成为空 +r($programplan->createTest($checkEnd)) && p() && e('『计划完成』应当为合法的日期'); // 测试创建用例 计划完成非日期 +r($programplan->createTest($planFinishSmall)) && p() && e('"计划完成时间"必须大于"计划开始时间"'); // 测试创建用例 计划完成小于计划开始 +r($programplan->createTest($errorBegin)) && p() && e("阶段的开始时间不能小于所属项目的开始时间"); // 测试创建用例 计划开始小于项目开始日期 +r($programplan->createTest($errorEnd)) && p() && e("阶段的结束时间不能大于所属项目的结束时间"); // 测试创建用例 计划完成大于项目计划完成 +r($programplan->createTest($percentOver)) && p() && e('工作量占比累计不应当超过100%'); // 测试创建用例 工作量占比之和大于100 +r($programplan->createTest()) && p() && e('7'); // 测试正常更新阶段信息 获取阶段数量 +r($programplan->createTest($create)) && p() && e('8'); // 测试正常创建一条阶段信息 获取阶段数量 +system("./ztest init"); diff --git a/test/model/programplan/getmilestonebyproduct.php b/test/model/programplan/getmilestonebyproduct.php index 617e402db8..0ef6126ebc 100755 --- a/test/model/programplan/getmilestonebyproduct.php +++ b/test/model/programplan/getmilestonebyproduct.php @@ -16,7 +16,7 @@ $productIDList = array(21, 32, 23, 34, 25); $programplan = new programplanTest(); -r($programplan->getMilestoneByProductTest($productIDList[0], $projectIDList[0])) && p() && e('阶段301,阶段481,阶段211,阶段391,阶段571'); // 测试获取产品21 项目41的里程碑 +r($programplan->getMilestoneByProductTest($productIDList[0], $projectIDList[0])) && p() && e('阶段121,阶段301,阶段481,阶段31,阶段211,阶段391,阶段571'); // 测试获取产品21 项目41的里程碑 r($programplan->getMilestoneByProductTest($productIDList[1], $projectIDList[1])) && p() && e('0'); // 测试获取产品32 项目52的里程碑 r($programplan->getMilestoneByProductTest($productIDList[2], $projectIDList[2])) && p() && e('阶段123,阶段303,阶段483,阶段33,阶段213,阶段393,阶段573'); // 测试获取产品23 项目43的里程碑 r($programplan->getMilestoneByProductTest($productIDList[3], $projectIDList[3])) && p() && e('0'); // 测试获取产品34 项目54的里程碑 diff --git a/test/model/programplan/getpairs.php b/test/model/programplan/getpairs.php new file mode 100755 index 0000000000..3feaa421db --- /dev/null +++ b/test/model/programplan/getpairs.php @@ -0,0 +1,23 @@ +#!/usr/bin/env php +getPairs(); +cid=1 +pid=1 + +*/ +$executionIDList = array(41, 42, 43, 44, 45); +$productIDList = array(21, 22, 23, 24, 25); + +$programplan = new programplanTest(); + +r($programplan->getPairsTest($executionIDList[0], $productIDList[0])) && p() && e(',阶段31,阶段31/子阶段1,阶段121,阶段211,阶段301,阶段391,阶段481,阶段571'); // 测试获取执行41 产品21的计划键值对 +r($programplan->getPairsTest($executionIDList[1], $productIDList[1])) && p() && e(',阶段32,阶段32/子阶段2,阶段122,阶段212,阶段302,阶段392,阶段482,阶段572'); // 测试获取执行42 产品22的计划键值对 +r($programplan->getPairsTest($executionIDList[2], $productIDList[2])) && p() && e(',阶段33,阶段33/子阶段3,阶段123,阶段213,阶段303,阶段393,阶段483,阶段573'); // 测试获取执行43 产品23的计划键值对 +r($programplan->getPairsTest($executionIDList[3], $productIDList[3])) && p() && e(',阶段34,阶段34/子阶段4,阶段124,阶段214,阶段304,阶段394,阶段484,阶段574'); // 测试获取执行44 产品24的计划键值对 +r($programplan->getPairsTest($executionIDList[4], $productIDList[4])) && p() && e(',阶段35,阶段35/子阶段5,阶段125,阶段215,阶段305,阶段395,阶段485,阶段575'); // 测试获取执行45 产品25的计划键值对 diff --git a/test/model/programplan/gettotalpercent.php b/test/model/programplan/gettotalpercent.php new file mode 100755 index 0000000000..0b5f8d1ca7 --- /dev/null +++ b/test/model/programplan/gettotalpercent.php @@ -0,0 +1,24 @@ +#!/usr/bin/env php +getTotalPercent(); +cid=1 +pid=1 + +*/ + +$stageIDList = array(131, 132, 133, 134, 135); + +$programplan = new programplanTest(); + +r($programplan->getTotalPercentTest($stageIDList[0])) && p() && e('60'); // 测试获取阶段131的总进度 +r($programplan->getTotalPercentTest($stageIDList[0], true)) && p() && e('0'); // 测试获取阶段131是父阶段的总进度 +r($programplan->getTotalPercentTest($stageIDList[1])) && p() && e('60'); // 测试获取阶段132的总进度 +r($programplan->getTotalPercentTest($stageIDList[2])) && p() && e('60'); // 测试获取阶段133的总进度 +r($programplan->getTotalPercentTest($stageIDList[3])) && p() && e('60'); // 测试获取阶段134的总进度 +r($programplan->getTotalPercentTest($stageIDList[4])) && p() && e('60'); // 测试获取阶段135的总进度 diff --git a/test/model/programplan/iscreatetask.php b/test/model/programplan/iscreatetask.php new file mode 100755 index 0000000000..ff13b8cf8a --- /dev/null +++ b/test/model/programplan/iscreatetask.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +isCreateTask(); +cid=1 +pid=1 + +*/ +$stageIDList = array(131, 132, 133, 134, 135); + +$programplan = new programplanTest(); + +r($programplan->isCreateTaskTest($stageIDList[0])) && p() && e('1'); // 测试阶段131下有没有任务 +r($programplan->isCreateTaskTest($stageIDList[1])) && p() && e('1'); // 测试阶段132下有没有任务 +r($programplan->isCreateTaskTest($stageIDList[2])) && p() && e('1'); // 测试阶段133下有没有任务 +r($programplan->isCreateTaskTest($stageIDList[3])) && p() && e('1'); // 测试阶段134下有没有任务 +r($programplan->isCreateTaskTest($stageIDList[4])) && p() && e('1'); // 测试阶段135下有没有任务 diff --git a/test/model/programplan/processplan.php b/test/model/programplan/processplan.php new file mode 100755 index 0000000000..12b020bd7b --- /dev/null +++ b/test/model/programplan/processplan.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +processPlan(); +cid=1 +pid=1 + +*/ +$planIDList = array(131, 132, 133, 134, 135); + +$programplan = new programplanTest(); + +r($programplan->processPlanTest($planIDList[0])) && p('id,name,productName') && e('131,阶段31,已关闭的正常产品21'); // 测试计算计划131 +r($programplan->processPlanTest($planIDList[1])) && p('id,name,productName') && e('132,阶段32,已关闭的正常产品22'); // 测试计算计划132 +r($programplan->processPlanTest($planIDList[2])) && p('id,name,productName') && e('133,阶段33,已关闭的正常产品23'); // 测试计算计划133 +r($programplan->processPlanTest($planIDList[3])) && p('id,name,productName') && e('134,阶段34,已关闭的正常产品24'); // 测试计算计划134 +r($programplan->processPlanTest($planIDList[4])) && p('id,name,productName') && e('135,阶段35,已关闭的正常产品25'); // 测试计算计划135 diff --git a/test/model/programplan/processplans.php b/test/model/programplan/processplans.php new file mode 100755 index 0000000000..1d8448c233 --- /dev/null +++ b/test/model/programplan/processplans.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +processPlans(); +cid=1 +pid=1 + +*/ +$planIDList = array(array(11, 12), array(13, 14), array(15, 16, 17), array(18, 19, 20), array(21, 22, 23, 24)); + +$programplan = new programplanTest(); + +r($programplan->processPlansTest($planIDList[0])) && p('11:name,productName;12:name,productName') && e('项目1,正常产品1;项目2,正常产品2'); // 测试获取计划 11 12的信息 +r($programplan->processPlansTest($planIDList[1])) && p('13:name,productName;14:name,productName') && e('项目3,正常产品3;项目4,正常产品4'); // 测试获取计划 13 14的信息 +r($programplan->processPlansTest($planIDList[2])) && p('15:name,productName;16:name,productName;17:name,productName') && e('项目5,正常产品5;项目6,正常产品6;项目7,正常产品7'); // 测试获取计划 15 16 17的信息 +r($programplan->processPlansTest($planIDList[3])) && p('18:name,productName;19:name,productName;20:name,productName') && e('项目8,正常产品8;项目9,正常产品9;项目10,正常产品10'); // 测试获取计划 18 19 20的信息 +r($programplan->processPlansTest($planIDList[4])) && p('21:name,productName;22:name,productName;23:name,productName;24:name,productName') && e('项目11,正常产品1;项目12,正常产品2;项目13,正常产品3;项目14,正常产品4'); // 测试获取计划 21 22 23 24的信息 diff --git a/test/model/programplan/settreepath.php b/test/model/programplan/settreepath.php new file mode 100755 index 0000000000..d9e4892a30 --- /dev/null +++ b/test/model/programplan/settreepath.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +setTreePath(); +cid=1 +pid=1 + +*/ +$planIDList = array(131, 132, 133, 134, 135); + +$programplan = new programplanTest(); + +r($programplan->setTreePathTest($planIDList[0])) && p('name;path') && e('阶段31;,41,131,'); // 测试更新计划131的路径 +r($programplan->setTreePathTest($planIDList[1])) && p('name;path') && e('阶段32;,42,132,'); // 测试更新计划132的路径 +r($programplan->setTreePathTest($planIDList[2])) && p('name;path') && e('阶段33;,43,133,'); // 测试更新计划133的路径 +r($programplan->setTreePathTest($planIDList[3])) && p('name;path') && e('阶段34;,44,134,'); // 测试更新计划134的路径 +r($programplan->setTreePathTest($planIDList[4])) && p('name;path') && e('阶段35;,45,135,'); // 测试更新计划135的路径 diff --git a/test/model/programplan/update.php b/test/model/programplan/update.php new file mode 100755 index 0000000000..7312bd196a --- /dev/null +++ b/test/model/programplan/update.php @@ -0,0 +1,38 @@ +#!/usr/bin/env php +update(); +cid=1 +pid=1 + +*/ +$planID = 131; +$projectID = 41; + +$beginNotempty = array('begin' => ''); +$endNotempty = array('end' => ''); +$percentOver = array('percent' => 90); +$endLeBegin = array('end' => '2022-01-01'); +$nameNotempty = array('name' => ''); +$changeName = array('name' => '修改后的阶段'); +$changePercent = array('percent' => '15'); +$changeBegin = array('begin' => '2022-04-01'); +$changeEnd = array('end' => '2022-04-30'); + +$programplan = new programplanTest(); + +//r($programplan->updateTest($planID, $projectID, $beginNotempty, 'begin')) && p() && e(''); // 测试修改plan的 begin 值 计划开始为空 +//r($programplan->updateTest($planID, $projectID, $endNotempty, 'end')) && p() && e(''); // 测试修改plan的 end 值 计划完成为空 +r($programplan->updateTest($planID, $projectID, $percentOver, 'percent')) && p() && e('工作量占比累计不应当超过100%'); // 测试修改plan的 percent 值 工作占比和超过100 +r($programplan->updateTest($planID, $projectID, $endLeBegin, 'end')) && p() && e('『end』应当不小于。'); // 测试修改plan的 end 值 计划完成小于计划开始 +r($programplan->updateTest($planID, $projectID, $nameNotempty, 'name')) && p() && e('『name』不能为空。'); // 测试修改plan的 name 值 名称为空 +r($programplan->updateTest($planID, $projectID, $changeName)) && p('0:field,new') && e('name,修改后的阶段'); // 测试修改plan的 name 值 +r($programplan->updateTest($planID, $projectID, $changePercent)) && p('0:field,new') && e('percent,15'); // 测试修改plan的 percent 值 +r($programplan->updateTest($planID, $projectID, $changeBegin)) && p('0:field,new') && e('begin,2022-04-01'); // 测试修改plan的 begin 值 +r($programplan->updateTest($planID, $projectID, $changeEnd)) && p('0:field,new') && e('end,2022-04-30'); // 测试修改plan的 end 值 +system("./ztest init");