From b29c31785bfd4968d08b61041bddd413bec71270 Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 11 Nov 2025 11:05:16 +0800 Subject: [PATCH] + [misc] Add unit tests for projectZen::prepareProject() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- module/project/test/lib/zen.class.php | 15 ++ module/project/test/zen/prepareproject.php | 158 +++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100755 module/project/test/zen/prepareproject.php diff --git a/module/project/test/lib/zen.class.php b/module/project/test/lib/zen.class.php index fde6005b8b..e7650422f0 100644 --- a/module/project/test/lib/zen.class.php +++ b/module/project/test/lib/zen.class.php @@ -104,4 +104,19 @@ class projectZenTest extends baseTest if(dao::isError()) return dao::getError(); return $result; } + + /** + * Test prepareProject method. + * + * @param object $postData POST数据对象 + * @param int $hasProduct 是否有产品 + * @access public + * @return object|array + */ + public function prepareProjectTest($postData = null, $hasProduct = 1) + { + $result = $this->invokeArgs('prepareProject', [$postData, $hasProduct]); + if(dao::isError()) return dao::getError(); + return $result; + } } diff --git a/module/project/test/zen/prepareproject.php b/module/project/test/zen/prepareproject.php new file mode 100755 index 0000000000..81840d769c --- /dev/null +++ b/module/project/test/zen/prepareproject.php @@ -0,0 +1,158 @@ +#!/usr/bin/env php +gen(5); +zenData('product')->gen(5); +zenData('branch')->gen(5); + +su('admin'); + +global $tester, $app; +$app->rawModule = 'project'; +$app->rawMethod = 'edit'; + +$projectTest = new projectZenTest(); + +// 步骤1:正常情况-有产品的项目 +$_POST = array(); +$_POST['name'] = 'Test Project 1'; +$_POST['begin'] = '2024-01-01'; +$_POST['end'] = '2024-12-31'; +$_POST['days'] = 200; +$_POST['parent'] = 1; +$_POST['products'] = array(1); +$_POST['branch'] = array(array(0)); +$_POST['longTime'] = false; +$_POST['delta'] = '100'; +$_POST['future'] = false; +$_POST['budget'] = 1000; +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData1 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData1, 1)) && p('team') && e('Test Project 1'); // 步骤1 + +// 步骤2:无产品的项目 +$_POST = array(); +$_POST['name'] = 'Test Project 2'; +$_POST['begin'] = '2024-01-01'; +$_POST['end'] = '2024-06-30'; +$_POST['days'] = 100; +$_POST['parent'] = 1; +$_POST['longTime'] = false; +$_POST['delta'] = '50'; +$_POST['future'] = false; +$_POST['budget'] = 500; +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData2 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData2, 0)) && p('team') && e('Test Project 2'); // 步骤2 + +// 步骤3:长期项目 +$_POST = array(); +$_POST['name'] = 'Test Project 3'; +$_POST['begin'] = '2024-01-01'; +$_POST['end'] = '2024-12-31'; +$_POST['days'] = 200; +$_POST['parent'] = 1; +$_POST['longTime'] = true; +$_POST['delta'] = '999'; +$_POST['future'] = false; +$_POST['budget'] = 0; +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData3 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData3, 0)) && p('end,days') && e('2059-12-31,0'); // 步骤3 + +// 步骤4:预算为0时保持0 +$_POST = array(); +$_POST['name'] = 'Test Project 4'; +$_POST['begin'] = '2025-01-01'; +$_POST['end'] = '2025-12-31'; +$_POST['days'] = 200; +$_POST['parent'] = 1; +$_POST['longTime'] = false; +$_POST['delta'] = '100'; +$_POST['future'] = false; +$_POST['budget'] = 0; +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData4 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData4, 0)) && p('budget') && e('0'); // 步骤4 + +// 步骤5:产品为空时返回错误 +$_POST = array(); +$_POST['name'] = 'Test Project 5'; +$_POST['begin'] = '2024-01-01'; +$_POST['end'] = '2024-12-31'; +$_POST['days'] = 200; +$_POST['parent'] = 1; +$_POST['longTime'] = false; +$_POST['delta'] = '100'; +$_POST['future'] = false; +$_POST['budget'] = 0; +$_POST['products'] = array(); +$_POST['branch'] = array(); +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData5 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData5, 1)) && p('products[0]') && e('最少关联一个产品'); // 步骤5 + +// 步骤6:工作日超出范围 +$_POST = array(); +$_POST['name'] = 'Test Project 6'; +$_POST['begin'] = '2024-01-01'; +$_POST['end'] = '2024-01-10'; +$_POST['days'] = 50; +$_POST['parent'] = 1; +$_POST['longTime'] = false; +$_POST['delta'] = '50'; +$_POST['future'] = false; +$_POST['budget'] = 0; +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData6 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData6, 0)) && p('days') && e('可用工作日不能超过『10』天'); // 步骤6 + +// 步骤7:预算四舍五入 +$_POST = array(); +$_POST['name'] = 'Test Project 7'; +$_POST['begin'] = '2024-01-01'; +$_POST['end'] = '2024-12-31'; +$_POST['days'] = 200; +$_POST['parent'] = 1; +$_POST['longTime'] = false; +$_POST['delta'] = '100'; +$_POST['future'] = false; +$_POST['budget'] = 1234.567; +$_POST['whitelist'] = array(); +$_POST['auth'] = array(); +$_POST['storyType'] = array(); +$formData7 = form::data($tester->config->project->form->edit); +r($projectTest->prepareProjectTest($formData7, 0)) && p('budget') && e('1234.57'); // 步骤7 \ No newline at end of file