diff --git a/module/programplan/test/lib/programplan.unittest.class.php b/module/programplan/test/lib/programplan.unittest.class.php index a345e34e6d..a4ffb8376b 100644 --- a/module/programplan/test/lib/programplan.unittest.class.php +++ b/module/programplan/test/lib/programplan.unittest.class.php @@ -878,4 +878,35 @@ class programplanTest return $result; } + + /** + * Test buildPointDataForGantt method. + * + * @param int $planID + * @param object $point + * @param array $reviewDeadline + * @access public + * @return object|array + */ + public function buildPointDataForGanttTest(int $planID, ?object $point, array $reviewDeadline): object|array + { + if($point === null) return array('error' => 'Point object is null'); + + try + { + $reflection = new ReflectionClass($this->objectTao); + $method = $reflection->getMethod('buildPointDataForGantt'); + $method->setAccessible(true); + + $result = $method->invoke($this->objectTao, $planID, $point, $reviewDeadline); + + if(dao::isError()) return dao::getError(); + + return $result; + } + catch(Throwable $e) + { + return array('error' => $e->getMessage()); + } + } } diff --git a/module/programplan/test/tao/buildpointdataforgantt.php b/module/programplan/test/tao/buildpointdataforgantt.php old mode 100644 new mode 100755 index c97a4a065b..4fcf6e4658 --- a/module/programplan/test/tao/buildpointdataforgantt.php +++ b/module/programplan/test/tao/buildpointdataforgantt.php @@ -3,42 +3,89 @@ /** -title=测试 loadModel->buildPointDataForGantt() +title=测试 programplanTao::buildPointDataForGantt(); +timeout=0 cid=0 -- 禅道版本为IPD。 - - 属性id @1-PP-1 - - 属性reviewID @1 - - 属性type @point - - 属性text @ 这个是评审或基线的标题1 +- 步骤1:正常评审点数据构建属性id @1-PP-1 +- 步骤2:验证数据类型属性type @point +- 步骤3:验证评审状态属性rawStatus @pass +- 步骤4:DCP类别评审点处理属性id @2-DCP-2 +- 步骤5:TR类别评审点处理属性id @3-TR4-3 */ -include dirname(__FILE__, 5). '/test/lib/init.php'; -su('admin'); +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/lib/programplan.unittest.class.php'; + +// 1. 准备测试数据 +zendata('object')->loadYaml('object_buildpointdataforgantt', false, 2)->gen(5); +zendata('review')->loadYaml('review_buildpointdataforgantt', false, 2)->gen(5); -zenData('review')->gen(20); -zenData('object')->gen(20); $project = zenData('project'); $project->type->range('stage'); $project->attribute->range('devel'); -$project->begin->range('`2023-09-28`'); -$project->end->range('`2024-04-02`'); -$project->gen(10); +$project->begin->range('`2023-09-01`'); +$project->end->range('`2023-12-31`'); +$project->gen(3); -global $tester; -$tester->loadModel('programplan'); +// 2. 用户登录 +su('admin'); -$point = $tester->programplan->dao->select('t1.*, t2.status, t2.lastReviewedDate,t2.id as reviewID')->from(TABLE_OBJECT)->alias('t1') - ->leftJoin(TABLE_REVIEW)->alias('t2')->on('t1.id = t2.object') - ->where('t1.deleted')->eq('0') - ->andWhere('t1.project')->eq(1) - ->andWhere('t1.product')->eq(1) - ->fetch(); +// 3. 创建测试实例 +$programplanTest = new programplanTest(); -$plans = $tester->programplan->dao->select('*')->from(TABLE_PROJECT)->where('type')->eq('stage')->fetchAll('id'); -$plans = $tester->programplan->processPlans($plans); +// 4. 构建测试评审点对象 +$normalPoint = new stdclass(); +$normalPoint->id = 1; +$normalPoint->category = 'PP'; +$normalPoint->title = '评审点标题1'; +$normalPoint->status = 'pass'; +$normalPoint->reviewID = 1; +$normalPoint->lastReviewedDate = '2023-06-01 14:00:00'; +$normalPoint->createdDate = '2023-01-01 09:00:00'; +$normalPoint->end = '2023-12-31'; -$normalResult = $tester->programplan->initGanttPlans($plans); +$pointWithoutEnd = new stdclass(); +$pointWithoutEnd->id = 2; +$pointWithoutEnd->category = 'DCP'; +$pointWithoutEnd->title = '基线评审点2'; +$pointWithoutEnd->status = 'reviewing'; +$pointWithoutEnd->reviewID = 2; +$pointWithoutEnd->lastReviewedDate = ''; +$pointWithoutEnd->createdDate = '2023-02-01 10:00:00'; +$pointWithoutEnd->end = ''; -r($tester->programplan->buildPointDataForGantt(1, $point, $normalResult['reviewDeadline'])) && p('id,reviewID,type,text') && e("1-PP-1,1,point, 这个是评审或基线的标题1"); //禅道版本为IPD。 +$trPoint = new stdclass(); +$trPoint->id = 3; +$trPoint->category = 'TR4'; +$trPoint->title = '测试评审点3'; +$trPoint->status = 'wait'; +$trPoint->reviewID = 3; +$trPoint->lastReviewedDate = ''; +$trPoint->createdDate = '2023-03-01 11:00:00'; +$trPoint->end = ''; + +$dcpPoint = new stdclass(); +$dcpPoint->id = 4; +$dcpPoint->category = 'PDCP'; +$dcpPoint->title = '设计评审点4'; +$dcpPoint->status = 'fail'; +$dcpPoint->reviewID = 4; +$dcpPoint->lastReviewedDate = '2023-07-01 15:00:00'; +$dcpPoint->createdDate = '2023-01-15 09:30:00'; +$dcpPoint->end = ''; + +// 5. 准备reviewDeadline数据 +$reviewDeadline = array( + 1 => array('stageEnd' => '2023-12-31', 'stageBegin' => '2023-01-01'), + 2 => array('stageEnd' => '2024-01-31', 'stageBegin' => '2023-02-01'), + 3 => array('stageEnd' => '2024-02-28', 'stageBegin' => '2023-03-01', 'taskEnd' => '2023-11-30') +); + +// 6. 执行测试步骤 +r($programplanTest->buildPointDataForGanttTest(1, $normalPoint, $reviewDeadline)) && p('id') && e('1-PP-1'); // 步骤1:正常评审点数据构建 +r($programplanTest->buildPointDataForGanttTest(1, $normalPoint, $reviewDeadline)) && p('type') && e('point'); // 步骤2:验证数据类型 +r($programplanTest->buildPointDataForGanttTest(1, $normalPoint, $reviewDeadline)) && p('rawStatus') && e('pass'); // 步骤3:验证评审状态 +r($programplanTest->buildPointDataForGanttTest(2, $pointWithoutEnd, $reviewDeadline)) && p('id') && e('2-DCP-2'); // 步骤4:DCP类别评审点处理 +r($programplanTest->buildPointDataForGanttTest(3, $trPoint, $reviewDeadline)) && p('id') && e('3-TR4-3'); // 步骤5:TR类别评审点处理 \ No newline at end of file diff --git a/module/programplan/test/tao/yaml/object_buildpointdataforgantt.yaml b/module/programplan/test/tao/yaml/object_buildpointdataforgantt.yaml new file mode 100644 index 0000000000..b9ede36522 --- /dev/null +++ b/module/programplan/test/tao/yaml/object_buildpointdataforgantt.yaml @@ -0,0 +1,37 @@ +--- +title: buildPointDataForGantt方法测试数据 +desc: 用于测试programplanTao::buildPointDataForGantt方法的评审点数据 + +fields: +- field: id + note: 评审点ID + range: 1-10 + prefix: "" + postfix: "" +- field: project + note: 项目ID + range: 1-3 +- field: product + note: 产品ID + range: 1-2 +- field: category + note: 评审点类别 + range: [PP,DCP,TR4,PDCP,CDCP] +- field: title + note: 评审点标题 + range: [评审点标题1,评审点标题2,基线评审点3,设计评审点4,测试评审点5] +- field: begin + note: 计划开始时间 + range: ['2023-01-01','2023-02-01','2023-03-01','','0000-00-00'] +- field: end + note: 计划结束时间 + range: ['2023-12-31','2024-01-31','2024-02-28','','0000-00-00'] +- field: createdDate + note: 创建时间 + range: ['2023-01-01 09:00:00','2023-02-01 10:00:00','2023-03-01 11:00:00'] +- field: deleted + note: 是否删除 + range: ['0'] +- field: enabled + note: 是否启用 + range: [1] \ No newline at end of file diff --git a/module/programplan/test/tao/yaml/review_buildpointdataforgantt.yaml b/module/programplan/test/tao/yaml/review_buildpointdataforgantt.yaml new file mode 100644 index 0000000000..49292d791c --- /dev/null +++ b/module/programplan/test/tao/yaml/review_buildpointdataforgantt.yaml @@ -0,0 +1,20 @@ +--- +title: buildPointDataForGantt方法评审测试数据 +desc: 用于测试programplanTao::buildPointDataForGantt方法的评审状态数据 + +fields: +- field: id + note: 评审ID + range: 1-10 +- field: object + note: 评审对象ID + range: 1-5 +- field: status + note: 评审状态 + range: [pass,fail,reviewing,wait,''] +- field: lastReviewedDate + note: 最后评审时间 + range: ['2023-06-01 14:00:00','2023-07-01 15:00:00','','0000-00-00 00:00:00'] +- field: createdDate + note: 创建时间 + range: ['2023-01-01 09:00:00','2023-02-01 10:00:00','2023-03-01 11:00:00'] \ No newline at end of file