diff --git a/module/programplan/test/lib/programplan.unittest.class.php b/module/programplan/test/lib/programplan.unittest.class.php index 49cac6f786..924e223168 100644 --- a/module/programplan/test/lib/programplan.unittest.class.php +++ b/module/programplan/test/lib/programplan.unittest.class.php @@ -602,4 +602,23 @@ class programplanTest return array('success' => '1'); } + + /** + * Test prepareEditPlan method. + * + * @param int $planID + * @param int $projectID + * @param object $plan + * @param object|null $parentStage + * @access public + * @return object|false + */ + public function prepareEditPlanTest(int $planID, int $projectID, object $plan, ?object $parentStage = null): object|false + { + $result = $this->zenInstance->prepareEditPlan($planID, $projectID, $plan, $parentStage); + + if(dao::isError()) return dao::getError(); + + return $result; + } } diff --git a/module/programplan/test/zen/prepareeditplan.php b/module/programplan/test/zen/prepareeditplan.php new file mode 100755 index 0000000000..5d2c446e00 --- /dev/null +++ b/module/programplan/test/zen/prepareeditplan.php @@ -0,0 +1,103 @@ +#!/usr/bin/env php +id->range('1-3'); +$table->name->range('测试项目,调研项目,阶段1'); +$table->type->range('project{2},stage'); +$table->begin->range('2024-01-01{3}'); +$table->end->range('2024-12-31{3}'); +$table->model->range('scrum,research,scrum'); +$table->acl->range('open{3}'); +$table->attribute->range('mix{2},request'); +$table->milestone->range('0{3}'); +$table->percent->range('0{3}'); +$table->parent->range('0{3}'); +$table->status->range('doing{3}'); +$table->gen(3); + +global $tester; +$zen = initReference('programplan', 'zen'); +$func = $zen->getMethod('prepareEditPlan'); +$instance = $zen->newInstance(); + +// 初始化所需的模型 +$instance->programplan = $tester->loadModel('programplan'); + +// 测试步骤1: 正常情况 - 编辑一个有效的计划 +$plan = new stdclass(); +$plan->parent = 1; +$plan->begin = '2024-01-10'; +$plan->end = '2024-01-20'; +$plan->percent = 15; + +$parentStage = new stdclass(); +$parentStage->begin = '2024-01-01'; +$parentStage->end = '2024-01-31'; + +r($func->invokeArgs($instance, [3, 1, $plan, $parentStage]) ? 'success' : 'fail') && p() && e('success'); + +dao::$errors = array(); + +// 测试步骤2: 结束时间早于开始时间 +$invalidPlan = new stdclass(); +$invalidPlan->parent = 1; +$invalidPlan->begin = '2024-01-20'; +$invalidPlan->end = '2024-01-10'; +$invalidPlan->percent = 10; + +$func->invokeArgs($instance, [3, 1, $invalidPlan, $parentStage]); +r(dao::getError()) && p('end') && e('完成时间不能小于开始时间'); + +dao::$errors = array(); + +// 测试步骤3: 开始时间早于父阶段开始时间 +$earlyPlan = new stdclass(); +$earlyPlan->parent = 1; +$earlyPlan->begin = '2023-12-15'; +$earlyPlan->end = '2024-01-20'; +$earlyPlan->percent = 10; + +$func->invokeArgs($instance, [3, 1, $earlyPlan, $parentStage]); +r(dao::getError()) && p('begin') && e('子阶段计划开始不能小于父阶段的计划开始时间 2024-01-01'); + +dao::$errors = array(); + +// 测试步骤4: 结束时间晚于父阶段结束时间 +$latePlan = new stdclass(); +$latePlan->parent = 1; +$latePlan->begin = '2024-01-10'; +$latePlan->end = '2024-02-15'; +$latePlan->percent = 10; + +$func->invokeArgs($instance, [3, 1, $latePlan, $parentStage]); +r(dao::getError()) && p('end') && e('子阶段计划完成不能超过父阶段的计划完成时间 2024-01-31'); + +dao::$errors = array(); + +// 测试步骤5: 调研模式项目保持原有属性 +$researchPlan = new stdclass(); +$researchPlan->parent = 0; +$researchPlan->begin = '2024-01-10'; +$researchPlan->end = '2024-01-20'; +$researchPlan->percent = 10; + +r($func->invokeArgs($instance, [3, 2, $researchPlan, null]) ? 'success' : 'fail') && p() && e('success'); \ No newline at end of file diff --git a/module/programplan/test/zen/yaml/project_prepareeditplan.yaml b/module/programplan/test/zen/yaml/project_prepareeditplan.yaml new file mode 100644 index 0000000000..ac7bc249fe --- /dev/null +++ b/module/programplan/test/zen/yaml/project_prepareeditplan.yaml @@ -0,0 +1,28 @@ +title: 项目计划编辑测试数据 +desc: 为prepareEditPlan方法提供测试数据 + +fields: +- field: id + range: 1-5 +- field: name + range: 测试项目1,调研项目,阶段1,阶段2,父阶段 +- field: type + range: project{2},stage{3} +- field: begin + range: 2024-01-01{5} +- field: end + range: 2024-12-31{5} +- field: model + range: scrum,research,scrum{3} +- field: acl + range: open{5} +- field: attribute + range: mix{4},request +- field: milestone + range: 0{5} +- field: percent + range: 0{5} +- field: parent + range: 0{5} +- field: status + range: doing{5} \ No newline at end of file