- session->revisionList != false ? $app->session->revisionList : $this->repo->createLink('browse', "repoID={$repoID}&branchID=" . base64_encode($branchID) . "&objectID=$objectID{$preDir}");?>
+ session->revisionList != false ? $app->session->revisionList : $this->repo->createLink('browse', "repoID={$repoID}&branchID=" . helper::safe64Encode(base64_encode($branchID)) . "&objectID=$objectID{$preDir}");?>
" . $lang->goback, '', "class='btn btn-link'");?>
diff --git a/module/repo/view/view.html.php b/module/repo/view/view.html.php
index eaf3c11af9..9b61b93c80 100644
--- a/module/repo/view/view.html.php
+++ b/module/repo/view/view.html.php
@@ -25,7 +25,7 @@ $version = " $revisionName";
repo->createLink('browse', "repoID=$repoID&branchID=$base64BranchID&objectID=$objectID"), $repo->name, '', "data-app='{$app->tab}'");
$paths= explode('/', $entry);
$fileName = array_pop($paths);
diff --git a/module/testcase/control.php b/module/testcase/control.php
index e49be79c71..720a73746e 100644
--- a/module/testcase/control.php
+++ b/module/testcase/control.php
@@ -1100,6 +1100,7 @@ class testcase extends control
$this->view->forceNotReview = $this->testcase->forceNotReview();
$this->view->modulePairs = $modulePairs;
$this->view->testtasks = $testtasks;
+ $this->view->isLibCase = $type == 'lib' ? true : false;
$this->display();
}
diff --git a/module/testcase/js/batchedit.js b/module/testcase/js/batchedit.js
index d5de22e04f..94f8c09890 100644
--- a/module/testcase/js/batchedit.js
+++ b/module/testcase/js/batchedit.js
@@ -77,6 +77,16 @@ function loadBranches(product, branch, caseID, oldBranch)
}
}
+$(document).ready(function()
+{
+ /* Set secondary menu highlighting. */
+ if(isLibCase)
+ {
+ $('#navbar li[data-id=caselib]').addClass('active');
+ $('#navbar li[data-id=testcase]').removeClass('active');
+ }
+})
+
$(function()
{
removeDitto(); //Remove 'ditto' in first row.
diff --git a/module/testcase/view/batchedit.html.php b/module/testcase/view/batchedit.html.php
index c3f7dfd5cf..76f55c3eac 100644
--- a/module/testcase/view/batchedit.html.php
+++ b/module/testcase/view/batchedit.html.php
@@ -15,6 +15,7 @@
testcase->confirmUnlinkTesttask);?>
+
user->accountInfo;?>
user->account;?>
- account, "class='form-control' disabled");?>
+ account, "class='form-control' readonly");?>
user->email;?>
email, "class='form-control'");?>
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");