diff --git a/module/action/test/model/printaction.php b/module/action/test/model/printaction.php deleted file mode 100755 index 40700313df..0000000000 --- a/module/action/test/model/printaction.php +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env php -admin 创建。 - -- 步骤2:objectType未设置 @~~ -- 步骤3:action字段未设置 @0 -- 步骤4:自定义desc @0 -- 步骤5:无效objectType仍会有输出 @自定义描述 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/action.unittest.class.php'; - -zenData('action')->loadYaml('action', false, 4)->gen(10); -zenData('user')->loadYaml('user', false, 4)->gen(10); - -su('admin'); - -$actionTest = new actionTest(); - -// 创建基础action对象模板 -function createBaseAction() { - $action = new stdclass(); - $action->id = 1; - $action->objectType = 'task'; - $action->objectID = 1; - $action->action = 'created'; - $action->actor = 'admin'; - $action->date = '2023-01-01 12:00:00'; - $action->comment = '测试注释'; - $action->extra = ''; - $action->read = '0'; - $action->vision = 'rnd'; - $action->efforted = 0; - return $action; -} - -// 创建正常的action对象 -$normalAction = createBaseAction(); - -// 创建objectType未设置的action对象 -$emptyObjectTypeAction = createBaseAction(); -unset($emptyObjectTypeAction->objectType); - -// 创建action字段未设置的action对象 -$emptyActionAction = createBaseAction(); -unset($emptyActionAction->action); - -// 创建用于测试自定义desc的action对象 -$customDescAction = createBaseAction(); - -// 创建objectType不存在的action对象 -$invalidAction = createBaseAction(); -$invalidAction->objectType = 'invalid_type'; - -r($actionTest->printActionTest($normalAction)) && p() && e('2023-01-01 12:00:00, 由 admin 创建。'); // 步骤1:正常情况,实际输出内容由renderAction决定 -r($actionTest->printActionTest($emptyObjectTypeAction)) && p() && e('~~'); // 步骤2:objectType未设置 -r($actionTest->printActionTest($emptyActionAction)) && p() && e('0'); // 步骤3:action字段未设置 -r($actionTest->printActionTest($customDescAction, '自定义描述')) && p() && e('0'); // 步骤4:自定义desc -r($actionTest->printActionTest($invalidAction)) && p() && e('自定义描述'); // 步骤5:无效objectType仍会有输出 \ No newline at end of file diff --git a/module/action/test/model/renderaction.php b/module/action/test/model/renderaction.php deleted file mode 100755 index 99504ffe8b..0000000000 --- a/module/action/test/model/renderaction.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -gen(1); -zenData('user')->gen(5); -zenData('action')->gen(0); -zenData('story')->gen(1); -zenData('task')->gen(1); -zenData('bug')->gen(1); -zenData('project')->loadYaml('execution')->gen(1); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$actionTest = new actionTest(); - -// 5. 执行测试步骤 -r($actionTest->renderActionTest((object)array('objectType' => 'story', 'objectID' => 1, 'action' => 'created', 'actor' => 'admin', 'date' => '2024-01-01 10:00:00', 'extra' => ''))) && p() && e('*'); // 步骤1:正常渲染 -r($actionTest->renderActionTest((object)array('id' => 999, 'actor' => 'admin'))) && p() && e(false); // 步骤2:缺少必要属性 -r($actionTest->renderActionTest((object)array('objectType' => 'task', 'action' => 'created', 'actor' => 'user1'), '自定义操作描述')) && p() && e('自定义操作描述'); // 步骤3:自定义描述 -r($actionTest->renderActionTest((object)array('objectType' => 'story', 'action' => 'reviewed', 'actor' => 'reviewer', 'extra' => 'pass'), array('main' => '审核通过'))) && p() && e('审核通过'); // 步骤4:数组描述 -r($actionTest->renderActionTest((object)array('objectType' => '', 'action' => 'created', 'actor' => 'admin'))) && p() && e(false); // 步骤5:空objectType \ No newline at end of file diff --git a/module/action/test/tao/processcreatechildrenactionextra.php b/module/action/test/tao/processcreatechildrenactionextra.php deleted file mode 100755 index d272c6e649..0000000000 --- a/module/action/test/tao/processcreatechildrenactionextra.php +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env php -> 生成包含链接的子任务信息 -- 测试多个有效任务ID >> 生成多个子任务链接 -- 测试空字符串 >> 返回空结果 -- 测试不存在的任务ID >> 返回空结果 -- 测试混合有效和无效任务ID >> 只生成有效任务的链接 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/action.unittest.class.php'; - -$task = zenData('task'); -$task->id->range('1-10'); -$task->name->range('子任务1,子任务2,子任务3,子任务4,子任务5,子任务6,子任务7,子任务8,子任务9,子任务10'); -$task->project->range('1'); -$task->execution->range('1'); -$task->assignedTo->range('admin'); -$task->status->range('wait'); -$task->deleted->range('0'); -$task->gen(10); - -su('admin'); - -$actionTest = new actionTest(); - -r($actionTest->processCreateChildrenActionExtraTest('1')) && p('extra') && e('#1 子任务1'); -r($actionTest->processCreateChildrenActionExtraTest('1,2,3')) && p('extra') && e('#1 子任务1, #2 子任务2, #3 子任务3'); -r($actionTest->processCreateChildrenActionExtraTest('')) && p('extra') && e(''); -r($actionTest->processCreateChildrenActionExtraTest('999')) && p('extra') && e(''); -r($actionTest->processCreateChildrenActionExtraTest('1,999,2')) && p('extra') && e('#1 子任务1, #2 子任务2'); \ No newline at end of file diff --git a/module/action/test/tao/processcreaterequirementsactionextra.php b/module/action/test/tao/processcreaterequirementsactionextra.php deleted file mode 100755 index 5dc64115fc..0000000000 --- a/module/action/test/tao/processcreaterequirementsactionextra.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php - -timeout=0 -cid=1 - -- 步骤1:正常单个需求属性extra @#1 需求标题1 -- 步骤2:多个需求 - - 属性extra @#1 需求标题1 -- 步骤3:单个需求ID2属性extra @#2 需求标题2 -- 步骤4:单个需求ID3属性extra @#3 需求标题3 -- 步骤5:混合有效无效ID - - 属性extra @#1 需求标题1 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/action.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -$story = zenData('story'); -$story->id->range('1-10'); -$story->title->range('需求标题1,需求标题2,需求标题3,需求标题4,需求标题5{5}'); -$story->product->range('1{10}'); -$story->type->range('requirement{10}'); -$story->status->range('active{10}'); -$story->openedBy->range('admin{10}'); -$story->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$actionTest = new actionTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($actionTest->processCreateRequirementsActionExtraTest('1')) && p('extra') && e("#1 需求标题1"); // 步骤1:正常单个需求 -r($actionTest->processCreateRequirementsActionExtraTest('1,2,3')) && p('extra') && e("#1 需求标题1, #2 需求标题2, #3 需求标题3"); // 步骤2:多个需求 -r($actionTest->processCreateRequirementsActionExtraTest('2')) && p('extra') && e("#2 需求标题2"); // 步骤3:单个需求ID2 -r($actionTest->processCreateRequirementsActionExtraTest('3')) && p('extra') && e("#3 需求标题3"); // 步骤4:单个需求ID3 -r($actionTest->processCreateRequirementsActionExtraTest('1,,2')) && p('extra') && e("#1 需求标题1, #2 需求标题2"); // 步骤5:混合有效无效ID \ No newline at end of file diff --git a/module/action/test/tao/processlinkstoryandbugactionextra.php b/module/action/test/tao/processlinkstoryandbugactionextra.php deleted file mode 100755 index 50bd369417..0000000000 --- a/module/action/test/tao/processlinkstoryandbugactionextra.php +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env php -> 期望生成带链接的HTML -- 测试步骤2:多个ID逗号分隔处理 >> 期望生成多个链接的HTML -- 测试步骤3:空字符串处理 >> 期望返回空字符串 -- 测试步骤4:单个ID带空格处理 >> 期望正确处理空格 -- 测试步骤5:多个ID包含空格处理 >> 期望正确处理所有ID - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/action.unittest.class.php'; - -$actionTest = new actionTest(); - -r($actionTest->processLinkStoryAndBugActionExtraTest('1', 'story', 'view')) && p('extra') && e("#1 "); -r($actionTest->processLinkStoryAndBugActionExtraTest('1,2', 'bug', 'view')) && p('extra') && e("#1 , #2 "); -r($actionTest->processLinkStoryAndBugActionExtraTest('', 'story', 'view')) && p('extra') && e(''); -r($actionTest->processLinkStoryAndBugActionExtraTest(' 1 ', 'story', 'view')) && p('extra') && e("#1 "); -r($actionTest->processLinkStoryAndBugActionExtraTest('1, 2, 3', 'story', 'view')) && p('extra') && e("#1 , #2 , #3 "); \ No newline at end of file diff --git a/module/action/test/tao/processtostoryactionextra.php b/module/action/test/tao/processtostoryactionextra.php deleted file mode 100755 index 9d4e41e8ec..0000000000 --- a/module/action/test/tao/processtostoryactionextra.php +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,影子产品4,影子产品5'); -$product->shadow->range('0{3},1{2}'); -$product->status->range('normal{5}'); -$product->type->range('normal{5}'); -$product->gen(5); - -// 准备故事数据 -$story = zenData('story'); -$story->id->range('1-5'); -$story->title->range('登录功能,用户管理,代码查看,测试故事,'); -$story->product->range('1-5'); -$story->status->range('active{5}'); -$story->type->range('story{5}'); -$story->version->range('1{5}'); -$story->gen(5); - -// 准备项目故事关联数据 -$projectStory = zenData('projectstory'); -$projectStory->project->range('1-3'); -$projectStory->story->range('1-3'); -$projectStory->product->range('1-3'); -$projectStory->version->range('1{3}'); -$projectStory->gen(3); - -su('admin'); - -$actionTest = new actionTest(); - -// 步骤1:测试普通产品(shadow=0)的故事链接处理 -$action1 = new stdClass(); -$action1->product = '1'; -$action1->extra = '1'; -r($actionTest->processToStoryActionExtraTest($action1)) && p('extra') && e('#1 登录功能'); - -// 步骤2:测试影子产品(shadow=1)的故事链接处理 -$action2 = new stdClass(); -$action2->product = '4'; -$action2->extra = '2'; -r($actionTest->processToStoryActionExtraTest($action2)) && p('extra') && e('#2 用户管理'); - -// 步骤3:测试不存在故事ID的处理 -$action3 = new stdClass(); -$action3->product = '1'; -$action3->extra = '999'; -r($actionTest->processToStoryActionExtraTest($action3)) && p('extra') && e('999'); - -// 步骤4:测试空extra值的处理 -$action4 = new stdClass(); -$action4->product = '1'; -$action4->extra = ''; -r($actionTest->processToStoryActionExtraTest($action4)) && p('extra') && e(''); - -// 步骤5:测试故事标题为空的处理 -$action5 = new stdClass(); -$action5->product = '1'; -$action5->extra = '5'; -r($actionTest->processToStoryActionExtraTest($action5)) && p('extra') && e('#5 '); \ No newline at end of file diff --git a/module/admin/test/model/checkprivmenu.php b/module/admin/test/model/checkprivmenu.php deleted file mode 100755 index c6d33b6864..0000000000 --- a/module/admin/test/model/checkprivmenu.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -checkPrivMenuTest()) && p('hasMenuList') && e('1'); // 步骤1:检查是否有菜单列表 -r($adminTest->checkPrivMenuTest()) && p('menuCount') && e('11'); // 步骤2:检查菜单数量 -r($adminTest->checkPrivMenuTest()) && p('hasLinkedMenu') && e('1'); // 步骤3:检查是否有已链接菜单 -r($adminTest->checkPrivMenuTest()) && p('hasDisabledMenu') && e('1'); // 步骤4:检查是否有已禁用菜单 -r($adminTest->checkPrivMenuTest()) && p('hasMenuList,menuCount') && e('1,11'); // 步骤5:验证菜单列表结构 \ No newline at end of file diff --git a/module/admin/test/model/getsecretkey.php b/module/admin/test/model/getsecretkey.php deleted file mode 100755 index eec0bab2d2..0000000000 --- a/module/admin/test/model/getsecretkey.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -global->ztPrivateKey = 'testkey123'; -$config->global->community = 'test_community'; - -// 5. 执行测试步骤(必须包含至少7个测试步骤) - -// 步骤1:测试getSecretKey方法的API配置依赖 -r($adminTest->getApiConfigTest()) && p() && e('fail'); // 网络调用失败时返回fail - -// 步骤2:测试getSecretKey方法在无网络环境下的错误处理 -r($adminTest->getSecretKeyErrorTest()) && p() && e('fail'); // 网络调用失败时返回fail - -// 步骤3:测试getSecretKey方法的类型错误处理 -r($adminTest->getSecretKeyTest()) && p() && e('type_error'); // 捕获类型错误或网络错误 - -// 步骤4:测试getApiConfig方法在无网络环境下的行为 -r($adminTest->getApiConfigTest()) && p() && e('fail'); // 返回fail表示无法获取配置 - -// 步骤5:测试getSecretKey方法的完整流程 -r($adminTest->getSecretKeyErrorTest()) && p() && e('fail'); // 在测试环境中应该失败 - -// 步骤6:测试getSignature方法验证密钥签名功能 -$params = array('HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest', 'zentaosid' => 'testsession123'); -r($adminTest->getSignatureTest($params)) && p() && e('b89e9fe7327b8add60ce82c4e817e076'); // 验证签名算法正确性 - -// 步骤7:测试getSignature方法的参数处理 -$emptyParams = array('u' => 'test'); -r($adminTest->getSignatureTest($emptyParams)) && p() && e('02912d25701e8ff2b92737a791a7f99c'); // 验证参数过滤和签名生成 \ No newline at end of file diff --git a/module/admin/test/zen/certifybyapi.php b/module/admin/test/zen/certifybyapi.php deleted file mode 100755 index a97c2b3c74..0000000000 --- a/module/admin/test/zen/certifybyapi.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -certifyByAPITest('mobile')) && p() && e('1'); // 步骤1:正常mobile类型认证 -r($adminTest->certifyByAPITest('email')) && p() && e('1'); // 步骤2:正常email类型认证 -r($adminTest->certifyByAPITest('')) && p() && e('1'); // 步骤3:空字符串类型 -r($adminTest->certifyByAPITest('invalid')) && p() && e('1'); // 步骤4:非法类型参数 -r($adminTest->certifyByAPITest('mobile')) && p() && e('1'); // 步骤5:再次测试mobile类型 \ No newline at end of file diff --git a/module/admin/test/zen/fetchapi.php b/module/admin/test/zen/fetchapi.php deleted file mode 100755 index de458a13dc..0000000000 --- a/module/admin/test/zen/fetchapi.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -fetchAPITest('http://example.com/api/test')) && p() && e('0'); -r($adminTest->fetchAPITest('http://example.com/api?param=value')) && p() && e('0'); -r($adminTest->fetchAPITest('')) && p() && e('0'); -r($adminTest->fetchAPITest('invalid-url')) && p() && e('0'); -r($adminTest->fetchAPITest('http://example.com/api?param=中文')) && p() && e('0'); \ No newline at end of file diff --git a/module/admin/test/zen/getzentaodata.php b/module/admin/test/zen/getzentaodata.php deleted file mode 100755 index 1ae8302b02..0000000000 --- a/module/admin/test/zen/getzentaodata.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -getZentaoDataTest(null, 'open', false)) && p('hasData') && e('0'); - -// 测试步骤2:无zentaoWebsite配置且为非open版本 -r($adminTest->getZentaoDataTest(null, 'biz', false)) && p('hasData') && e('0'); - -// 测试步骤3:有完整zentaoWebsite配置数据 -$fullConfig = new stdClass(); -$fullConfig->dynamic = '{"1":{"id":"1","title":"动态1","addedDate":"2023-01-01","link":"http://test.com/1"}}'; -$fullConfig->publicClass = '{"1":{"name":"公开课1","image":"http://test.com/image1.jpg","viewLink":"http://test.com/class1"}}'; -$fullConfig->plugin = '{"1":{"id":"1","name":"插件1","viewLink":"http://test.com/plugin1"}}'; -$fullConfig->patch = '{"1":{"id":"1","name":"补丁1","viewLink":"http://test.com/patch1"}}'; -r($adminTest->getZentaoDataTest($fullConfig, 'open', false)) && p('hasData') && e('1'); - -// 测试步骤4:zentaoWebsite配置为空对象 -$emptyConfig = new stdClass(); -r($adminTest->getZentaoDataTest($emptyConfig, 'open', false)) && p('hasData') && e('1'); - -// 测试步骤5:有部分zentaoWebsite配置数据 -$partialConfig = new stdClass(); -$partialConfig->plugin = '{"1":{"id":"1","name":"插件1","viewLink":"http://test.com/plugin1"}}'; -r($adminTest->getZentaoDataTest($partialConfig, 'open', false)) && p('hasData') && e('1'); - -// 测试步骤6:非中国地区用户有插件数据(模拟行为) -r($adminTest->getZentaoDataTest($partialConfig, 'open', true)) && p('hasData') && e('1'); \ No newline at end of file diff --git a/module/admin/test/zen/sendcodebyapi.php b/module/admin/test/zen/sendcodebyapi.php deleted file mode 100755 index b36a5b46cd..0000000000 --- a/module/admin/test/zen/sendcodebyapi.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -sendCodeByAPITest('mobile')) && p() && e('1'); // 步骤1:mobile类型 -r($adminTest->sendCodeByAPITest('email')) && p() && e('1'); // 步骤2:email类型 -r($adminTest->sendCodeByAPITest('')) && p() && e('1'); // 步骤3:空字符串 -r($adminTest->sendCodeByAPITest('invalid')) && p() && e('1'); // 步骤4:无效类型 -r($adminTest->sendCodeByAPITest('sms')) && p() && e('1'); // 步骤5:sms类型 \ No newline at end of file diff --git a/module/admin/test/zen/setcompanybyapi.php b/module/admin/test/zen/setcompanybyapi.php deleted file mode 100755 index 8c7cedff96..0000000000 --- a/module/admin/test/zen/setcompanybyapi.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -setCompanyByAPITest()) && p() && e('1'); // 步骤1:正常调用setCompanyByAPI方法 -r($adminTest->setCompanyByAPITest()) && p() && e('1'); // 步骤2:重复调用验证一致性 -r($adminTest->setCompanyByAPITest()) && p() && e('1'); // 步骤3:测试异常处理机制 -r($adminTest->setCompanyByAPITest()) && p() && e('1'); // 步骤4:测试参数构建过程 -r($adminTest->setCompanyByAPITest()) && p() && e('1'); // 步骤5:测试HTTP请求执行 \ No newline at end of file diff --git a/module/admin/test/zen/syncdynamics.php b/module/admin/test/zen/syncdynamics.php deleted file mode 100755 index b8ccf9b38d..0000000000 --- a/module/admin/test/zen/syncdynamics.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -syncDynamicsTest(2)) && p() && e('1'); -r($adminTest->syncDynamicsTest(1)) && p() && e('1'); -r($adminTest->syncDynamicsTest(0)) && p() && e('1'); -r($adminTest->syncDynamicsTest(10)) && p() && e('1'); -r($adminTest->syncDynamicsTest(-1)) && p() && e('1'); \ No newline at end of file diff --git a/module/admin/test/zen/syncextensions.php b/module/admin/test/zen/syncextensions.php deleted file mode 100755 index 93d2af28c7..0000000000 --- a/module/admin/test/zen/syncextensions.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -syncExtensionsTest('plugin', 5)) && p() && e('1'); -r($adminTest->syncExtensionsTest('patch', 5)) && p() && e('1'); -r($adminTest->syncExtensionsTest('plugin', 10)) && p() && e('1'); -r($adminTest->syncExtensionsTest('patch', 1)) && p() && e('1'); -r($adminTest->syncExtensionsTest('plugin', 0)) && p() && e('1'); \ No newline at end of file diff --git a/module/admin/test/zen/syncpublicclasses.php b/module/admin/test/zen/syncpublicclasses.php deleted file mode 100755 index 54e7c408d4..0000000000 --- a/module/admin/test/zen/syncpublicclasses.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -syncPublicClassesTest(3)) && p() && e('1'); -r($adminTest->syncPublicClassesTest(1)) && p() && e('1'); -r($adminTest->syncPublicClassesTest(0)) && p() && e('1'); -r($adminTest->syncPublicClassesTest(10)) && p() && e('1'); -r($adminTest->syncPublicClassesTest(-1)) && p() && e('1'); \ No newline at end of file diff --git a/module/ai/test/model/getdefaultlanguagemodel.php b/module/ai/test/model/getdefaultlanguagemodel.php deleted file mode 100755 index cbef705e87..0000000000 --- a/module/ai/test/model/getdefaultlanguagemodel.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getDefaultLanguageModelTest()) && p('id') && e('1'); // 步骤1:有启用模型时返回ID最小的启用模型 -r($aiTest->getDefaultLanguageModelTest()) && p('name') && e('GPT-4'); // 步骤2:验证返回的是第一个启用模型的名称 -r($aiTest->getDefaultLanguageModelTest()) && p('type') && e('gpt'); // 步骤3:验证返回的模型类型 -r($aiTest->getDefaultLanguageModelTest()) && p('enabled') && e('1'); // 步骤4:验证返回的模型是启用状态 -r($aiTest->getDefaultLanguageModelTest()) && p('deleted') && e('0'); // 步骤5:验证返回的模型未被删除 \ No newline at end of file diff --git a/module/ai/test/model/togglemodel.php b/module/ai/test/model/togglemodel.php deleted file mode 100755 index 426076fea8..0000000000 --- a/module/ai/test/model/togglemodel.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$aiModelTable->type->range('chat{5}, code{3}, translate{2}'); -$aiModelTable->vendor->range('openai{4}, zhipu{3}, baidu{2}, aliyun{1}'); -$aiModelTable->credentials->range('test-credentials{10}'); -$aiModelTable->name->range('GPT-4{2}, GPT-3.5{2}, ChatGLM{2}, ERNIE{2}, Qwen{2}'); -$aiModelTable->desc->range('模型描述信息{10}'); -$aiModelTable->createdBy->range('admin'); -$aiModelTable->createdDate->range('`2024-08-01 10:00:00`'); -$aiModelTable->enabled->range('0{3}, 1{7}'); -$aiModelTable->deleted->range('0'); -$aiModelTable->gen(10); - -$imChatTable = zenData('im_chat'); -$imChatTable->id->range('1-15'); -$imChatTable->gid->range('&ai-1{3}, &ai-2{3}, &ai-3{2}, &ai-5{2}, &normal-group{5}'); -$imChatTable->name->range('AI助手聊天{8}, 普通群聊{5}, 项目讨论{2}'); -$imChatTable->type->range('group{10}, one2one{5}'); -$imChatTable->admins->range('admin'); -$imChatTable->subject->range('0'); -$imChatTable->public->range('0{8}, 1{7}'); -$imChatTable->createdBy->range('admin'); -$imChatTable->createdDate->range('`2024-07-01 09:00:00`'); -$imChatTable->adminInvite->range('0'); -$imChatTable->gen(15); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$aiTest = new aiTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($aiTest->toggleModelTest(1, true)) && p() && e('1'); // 步骤1:正常启用模型ID为1的AI模型 -r($aiTest->toggleModelTest(2, false)) && p() && e('1'); // 步骤2:正常禁用模型ID为2的AI模型 -r($aiTest->toggleModelTest(999, true)) && p() && e('1'); // 步骤3:切换不存在的模型ID为999 -r($aiTest->toggleModelTest(3, false)) && p() && e('1'); // 步骤4:使用false值禁用模型ID为3的模型 -r($aiTest->toggleModelTest(4, null)) && p() && e('1'); // 步骤5:使用null值对模型ID为4切换 \ No newline at end of file diff --git a/module/aiapp/test/model/__construct.php b/module/aiapp/test/model/__construct.php deleted file mode 100755 index ff2635cb63..0000000000 --- a/module/aiapp/test/model/__construct.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -__constructTest())) && p() && e('aiappModel'); // 步骤1:正常实例化验证类名 -r($aiappTest->__constructTest() instanceof model) && p() && e('1'); // 步骤2:验证继承基类 -r(get_class($aiappTest->__constructTest()->ai)) && p() && e('aiModel'); // 步骤3:验证加载ai模型 -r(get_class($aiappTest->__constructTest()->dao)) && p() && e('mysql'); // 步骤4:验证dao对象 -r(isset($aiappTest->__constructTest()->config)) && p() && e('1'); // 步骤5:验证config属性存在 \ No newline at end of file diff --git a/module/api/test/zen/generatelibsdropmenu.php b/module/api/test/zen/generatelibsdropmenu.php deleted file mode 100755 index de51782812..0000000000 --- a/module/api/test/zen/generatelibsdropmenu.php +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env php -loadYaml('doclib_generatelibsdropmenu', false, 2)->gen(10); - -$productTable = zenData('product'); -$productTable->loadYaml('product_generatelibsdropmenu', false, 2)->gen(3); - -$projectTable = zenData('project'); -$projectTable->loadYaml('project_generatelibsdropmenu', false, 2)->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$apiTest = new apiTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 创建测试用的库对象 -$emptyLib = new stdClass(); -$emptyLib->id = null; -$emptyLib->product = null; -$emptyLib->project = null; - -$productLib = new stdClass(); -$productLib->id = 1; -$productLib->product = 1; -$productLib->project = 0; - -$projectLib = new stdClass(); -$projectLib->id = 2; -$projectLib->product = 0; -$projectLib->project = 1; - -$nolinkLib = new stdClass(); -$nolinkLib->id = 3; -$nolinkLib->product = 0; -$nolinkLib->project = 0; - -$versionLib = new stdClass(); -$versionLib->id = 4; -$versionLib->product = 1; -$versionLib->project = 0; - -r($apiTest->generateLibsDropMenuTest($emptyLib)) && p('text') && e('独立接口'); // 步骤1:空库对象返回默认文本 -r($apiTest->generateLibsDropMenuTest($productLib)) && p('text') && e('正常产品1'); // 步骤2:关联产品的库返回产品名称 -r($apiTest->generateLibsDropMenuTest($projectLib)) && p('text') && e('项目集1'); // 步骤3:关联项目的库返回项目名称 -r($apiTest->generateLibsDropMenuTest($nolinkLib)) && p('text') && e('独立接口'); // 步骤4:无关联的库显示默认文本 -r($apiTest->generateLibsDropMenuTest($versionLib, 2)) && p('link') && e('/home/z/rzto/module/api/test/zen/generatelibsdropmenu.php?m=api&f=ajaxGetDropMenu&objectType=product&objectID=1&libID=4&version=2'); // 步骤5:版本参数测试 \ No newline at end of file diff --git a/module/api/test/zen/getmethod.php b/module/api/test/zen/getmethod.php deleted file mode 100755 index f5bb49e3a5..0000000000 --- a/module/api/test/zen/getmethod.php +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env php -getMethodTest('/repo/zentaopms/module/api/model.php/create')) && p('className,methodName') && e('api,create'); -r($apiTest->getMethodTest('/repo/zentaopms/module/api/model.php/publishLib', 'Model')) && p('className,methodName') && e('api,publishLib'); -r($apiTest->getMethodTest('/repo/zentaopms/module/api/model.php/deleteRelease')) && p('className,methodName') && e('api,deleteRelease'); -r($apiTest->getMethodTest('/repo/zentaopms/module/api/model.php/nonExistentMethod')) && p('error') && e('Method api::nonExistentMethod() does not exist'); -r($apiTest->getMethodTest('/repo/zentaopms/module/api/model.php/create')) && p('startLine,endLine,post') && e('695,726,~~'); \ No newline at end of file diff --git a/module/backup/test/zen/backupcode.php b/module/backup/test/zen/backupcode.php deleted file mode 100755 index 5e38ab1f69..0000000000 --- a/module/backup/test/zen/backupcode.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -backupCodeZenTest('normal_test', 'no')) && p('result') && e('success'); // 步骤1:正常文件名备份 -r($backupTest->backupCodeZenTest('nofile_test', 'no')) && p('result') && e('success'); // 步骤2:正常情况处理 -r($backupTest->backupCodeZenTest('', 'no')) && p('result') && e('success'); // 步骤3:空文件名默认处理 -r($backupTest->backupCodeZenTest('fail_test', 'yes')) && p('result') && e('fail'); // 步骤4:reload为yes的失败情况 -r($backupTest->backupCodeZenTest('fail_test', 'no')) && p('result') && e('fail'); // 步骤5:reload为no的失败情况 \ No newline at end of file diff --git a/module/backup/test/zen/backupfile.php b/module/backup/test/zen/backupfile.php deleted file mode 100755 index 0722d6d0b1..0000000000 --- a/module/backup/test/zen/backupfile.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -backupFileTest('test_backup_file')) && p('result') && e('success'); -r($backupTest->backupFileTest('backup_with_reload', 'yes')) && p('result') && e('success'); -r($backupTest->backupFileTest('')) && p('result') && e('success'); -r($backupTest->backupFileTest('fail_test', 'no')) && p('result') && e('fail'); -r($backupTest->backupFileTest('fail_test', 'yes')) && p('result') && e('fail'); \ No newline at end of file diff --git a/module/backup/test/zen/backupsql.php b/module/backup/test/zen/backupsql.php deleted file mode 100755 index b7dd8d9609..0000000000 --- a/module/backup/test/zen/backupsql.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -backupSQLTest('test_backup_1', 'no')) && p('result') && e('success'); // 步骤1:正常情况 -r($backupTest->backupSQLTest('test_backup_2', 'yes')) && p('result') && e('success'); // 步骤2:reload为yes -r($backupTest->backupSQLTest('', 'no')) && p('result') && e('success'); // 步骤3:空文件名 -r($backupTest->backupSQLTest('test-backup_3@special', 'no')) && p('result') && e('success'); // 步骤4:特殊字符 -r($backupTest->backupSQLTest('测试备份_4', 'yes')) && p('result') && e('success'); // 步骤5:中文文件名 \ No newline at end of file diff --git a/module/backup/test/zen/getbackuplist.php b/module/backup/test/zen/getbackuplist.php deleted file mode 100755 index f56e999e57..0000000000 --- a/module/backup/test/zen/getbackuplist.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -name @20240102 -- 执行$result @2 -- 执行$result['20240101']->files @3 -- 执行$backupNames - - @20240102 - - 属性1 @20240101 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/backup.unittest.class.php'; - -// 备份原始配置 -global $config, $app; -if(!isset($config->backup)) $config->backup = new stdClass(); -$originalBackupPath = isset($config->backup->settingDir) ? $config->backup->settingDir : ''; - -// 模拟用户登录 -su('admin'); - -// 创建测试实例 -$backupTest = new backupTest(); - -// 测试步骤1: 测试空备份目录情况 -$config->backup->settingDir = '/tmp/empty_backup/'; -r($backupTest->getBackupListTest()) && p() && e('0'); - -// 准备测试数据 - 设置包含测试文件的目录 -$config->backup->settingDir = '/tmp/test_backup_files/'; - -// 测试步骤2: 测试包含SQL文件的备份目录 -$result = $backupTest->getBackupListTest(); -r($result['20240102']->name) && p() && e('20240102'); - -// 测试步骤3: 测试返回结果数量 -$result = $backupTest->getBackupListTest(); -r(count($result)) && p() && e('2'); - -// 测试步骤4: 测试20240101的文件数量(应该包含sql、file、code三个文件) -$result = $backupTest->getBackupListTest(); -r(count($result['20240101']->files)) && p() && e('3'); - -// 测试步骤5: 测试结果按时间倒序排列 -$result = $backupTest->getBackupListTest(); -$backupNames = array_keys($result); -r($backupNames) && p('0,1') && e('20240102,20240101'); - -// 恢复原始配置 -$config->backup->settingDir = $originalBackupPath; \ No newline at end of file diff --git a/module/backup/test/zen/removeexpiredfiles.php b/module/backup/test/zen/removeexpiredfiles.php deleted file mode 100755 index 8f6dd76883..0000000000 --- a/module/backup/test/zen/removeexpiredfiles.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -removeExpiredFilesTest(null, 14)) && p('removed,kept') && e('2,2'); // 步骤1:正常情况,默认14天保留期 -r($backupTest->removeExpiredFilesTest(array('20240101.sql' => time() - (5 * 24 * 3600), '20240110.file' => time() - (3 * 24 * 3600), '20240115.code' => time() - (1 * 24 * 3600)), 7)) && p('removed,kept') && e('0,3'); // 步骤2:所有文件都未过期 -r($backupTest->removeExpiredFilesTest(array('20240101.sql' => time() - (30 * 24 * 3600), '20240110.file' => time() - (25 * 24 * 3600), '20240115.code' => time() - (16 * 24 * 3600)), 14)) && p('removed,kept') && e('3,0'); // 步骤3:所有文件都过期 -r($backupTest->removeExpiredFilesTest(array(), 14)) && p('removed,kept') && e('0,0'); // 步骤4:空目录 -r($backupTest->removeExpiredFilesTest(array('20240101.sql' => time() - (20 * 24 * 3600), '20240110.file' => time() - (10 * 24 * 3600), 'other.txt' => time() - (20 * 24 * 3600)), 14)) && p('removed,kept') && e('1,1'); // 步骤5:包含非备份文件 \ No newline at end of file diff --git a/module/backup/test/zen/restorefile.php b/module/backup/test/zen/restorefile.php deleted file mode 100755 index 0520d271b5..0000000000 --- a/module/backup/test/zen/restorefile.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -restoreFileZenTest('test_backup')) && p('result') && e('success'); // 步骤1:正常传入有效的备份文件名 -r($backupTest->restoreFileZenTest('')) && p('result') && e('success'); // 步骤2:传入空字符串参数 -r($backupTest->restoreFileZenTest(null)) && p('result') && e('fail'); // 步骤3:传入null参数 -r($backupTest->restoreFileZenTest('nonexistent_backup')) && p('result') && e('success'); // 步骤4:传入不存在的备份文件名 -r($backupTest->restoreFileZenTest('restore_fail_test')) && p('result') && e('fail'); // 步骤5:模拟附件还原失败情况 \ No newline at end of file diff --git a/module/backup/test/zen/restoresql.php b/module/backup/test/zen/restoresql.php deleted file mode 100755 index 455a33d3b2..0000000000 --- a/module/backup/test/zen/restoresql.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -restoreSQLZenTest('test_backup')) && p('result') && e('success'); // 步骤1:正常文件名 -r($backupTest->restoreSQLZenTest('')) && p('result') && e('success'); // 步骤2:空文件名参数 -r($backupTest->restoreSQLZenTest('nonexistent')) && p('result') && e('fail'); // 步骤3:不存在的备份文件 -r($backupTest->restoreSQLZenTest('corrupted')) && p('result') && e('fail'); // 步骤4:损坏的备份文件 -r($backupTest->restoreSQLZenTest('permission_denied')) && p('result') && e('fail'); // 步骤5:权限不足 -r($backupTest->restoreSQLZenTest('invalid_format')) && p('result') && e('fail'); // 步骤6:无效格式 -r($backupTest->restoreSQLZenTest('restore_fail_test')) && p('result') && e('fail'); // 步骤7:还原失败测试 \ No newline at end of file diff --git a/module/backup/test/zen/setholddays.php b/module/backup/test/zen/setholddays.php deleted file mode 100755 index 7d111dcae3..0000000000 --- a/module/backup/test/zen/setholddays.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -holdDays = 30; -r($backupTest->setHoldDaysTest($data1)) && p() && e('1'); // 步骤1:正常情况 - -// 步骤2:空值验证 -$data2 = new stdClass(); -$data2->holdDays = ''; -r($backupTest->setHoldDaysTest($data2)) && p('holdDays') && e('『保留天数』不能为空。'); // 步骤2:空值验证 - -// 步骤3:非数字验证 -$data3 = new stdClass(); -$data3->holdDays = 'abc'; -r($backupTest->setHoldDaysTest($data3)) && p('holdDays') && e('『保留天数』应当是正整数。'); // 步骤3:非数字验证 - -// 步骤4:负数验证 -$data4 = new stdClass(); -$data4->holdDays = -5; -r($backupTest->setHoldDaysTest($data4)) && p('holdDays') && e('『保留天数』应当是正整数。'); // 步骤4:负数验证 - -// 步骤5:零值验证 -$data5 = new stdClass(); -$data5->holdDays = 0; -r($backupTest->setHoldDaysTest($data5)) && p('holdDays') && e('『保留天数』应当是正整数。'); // 步骤5:零值验证 \ No newline at end of file diff --git a/module/bi/test/model/downloadfile.php b/module/bi/test/model/downloadfile.php deleted file mode 100755 index bbb62267f2..0000000000 --- a/module/bi/test/model/downloadfile.php +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env php -downloadFileTest('', '', '')) && p() && e('0'); // 步骤1:空参数测试 -r($biTest->downloadFileTest('invalid-url', '/tmp/claude/', 'test.file')) && p() && e('0'); // 步骤2:无效URL格式测试 -r($biTest->downloadFileTest('http://invalid-domain.test/file.txt', '/tmp/claude/', 'test.txt')) && p() && e('0'); // 步骤3:不可达域名测试 -r($biTest->downloadFileTest('http://httpbin.org/json', '/nonexistent/', 'test.json')) && p() && e('0'); // 步骤4:不存在目录测试 -r($biTest->downloadFileTest('https://httpbin.org/status/404', '/tmp/claude/', 'nonexistent.file')) && p() && e('0'); // 步骤5:HTTP 404错误测试 -r($biTest->downloadFileTest('https://httpbin.org/json-error', '/tmp/claude/', 'error.json')) && p() && e('0'); // 步骤6:JSON格式错误测试 -r($biTest->downloadFileTest('https://httpbin.org/json', '/readonly/', 'readonly.json')) && p() && e('0'); // 步骤7:文件保存失败测试 -r($biTest->downloadFileTest('https://valid-test.com/file.zip', '/tmp/claude/', 'test.zip')) && p() && e('1'); // 步骤8:ZIP文件下载测试 -r($biTest->downloadFileTest('https://httpbin.org/json', '/tmp/claude/', 'test.json')) && p() && e('1'); // 步骤9:正常文件下载测试 \ No newline at end of file diff --git a/module/bi/test/model/getcorrectgroup.php b/module/bi/test/model/getcorrectgroup.php deleted file mode 100755 index 6b4bc39bf5..0000000000 --- a/module/bi/test/model/getcorrectgroup.php +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env php - array("root" => 1, "name" => "产品", "grade" => 1), - '33' => array("root" => 1, "name" => "项目", "grade" => 1), - '34' => array("root" => 1, "name" => "测试", "grade" => 1), - '35' => array("root" => 1, "name" => "组织", "grade" => 1), - '36' => array("root" => 1, "name" => "需求", "grade" => 2) - ); - - $pivots = array( - '59' => array("root" => 1, "name" => "产品", "grade" => 1), - '60' => array("root" => 1, "name" => "项目", "grade" => 1), - '61' => array("root" => 1, "name" => "测试", "grade" => 1), - '62' => array("root" => 1, "name" => "组织", "grade" => 1) - ); - - $builtinModules = $type == 'chart' ? $charts : $pivots; - - if(!isset($builtinModules[$id])) return '0'; - - // 模拟数据库查询结果 - 根据配置模拟对应的数据库ID - $moduleMapping = array( - 'chart' => array( - '32' => '1', // 产品,grade=1 -> id=1 - '33' => '2', // 项目,grade=1 -> id=2 - '34' => '3', // 测试,grade=1 -> id=3 - '35' => '4', // 组织,grade=1 -> id=4 - '36' => '5' // 需求,grade=2 -> id=5 - ), - 'pivot' => array( - '59' => '9', // 产品,grade=1 -> id=9 - '60' => '10', // 项目,grade=1 -> id=10 - '61' => '11', // 测试,grade=1 -> id=11 - '62' => '12' // 组织,grade=1 -> id=12 - ) - ); - - return isset($moduleMapping[$type][$id]) ? $moduleMapping[$type][$id] : '0'; -} - -// 模拟测试类 -class MockBiTest { - public function getCorrectGroupTest($id, $type) { - return mockGetCorrectGroup($id, $type); - } -} - -// 尝试正常初始化,如果失败则使用模拟版本 -try { - include dirname(__FILE__, 5) . '/test/lib/init.php'; - include dirname(__FILE__, 2) . '/lib/bi.unittest.class.php'; - - $table = zenData('module'); - $table->id->range('1-15'); - $table->root->range('1{15}'); - $table->name->range('产品{3},项目{3},测试{3},组织{3},需求{3}'); - $table->type->range('chart{8},pivot{7}'); - $table->grade->range('1{4},2{1},1{4},2{1},1{3},2{2}'); - $table->gen(15); - - su('admin'); - $biTest = new biTest(); -} catch (Exception $e) { - $biTest = new MockBiTest(); - // 如果框架加载失败,定义测试框架函数 - if (!function_exists('r')) { - function r($actual) { - global $currentActual; - $currentActual = $actual; - return true; - } - } - - if (!function_exists('p')) { - function p($property = '') { - global $currentActual, $checkProperty; - $checkProperty = $property; - return true; - } - } - - if (!function_exists('e')) { - function e($expected) { - global $currentActual, $checkProperty; - - if (empty($checkProperty)) { - $actual = $currentActual; - } else { - $actual = getValue($currentActual, $checkProperty); - } - - return $actual == $expected; - } - } - - if (!function_exists('getValue')) { - function getValue($data, $property) { - if (empty($property)) return $data; - - if (is_object($data)) { - if (strpos($property, ',') !== false) { - $parts = explode(',', $property); - $result = array(); - foreach ($parts as $part) { - $result[] = isset($data->$part) ? $data->$part : ''; - } - return implode(',', $result); - } else { - return isset($data->$property) ? $data->$property : ''; - } - } - - $parts = explode(':', $property); - $result = $data; - - foreach ($parts as $part) { - if (is_numeric($part)) { - $result = $result[$part]; - } else { - $result = $result[$part]; - } - } - - return $result; - } - } - - if (!function_exists('su')) { - function su($user) { - // 模拟用户登录,实际不做任何操作 - return true; - } - } -} - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($biTest->getCorrectGroupTest('32', 'chart')) && p() && e('1'); // 步骤1:测试chart类型中存在的模块ID 32 -r($biTest->getCorrectGroupTest('59', 'pivot')) && p() && e('9'); // 步骤2:测试pivot类型中存在的模块ID 59 -r($biTest->getCorrectGroupTest('999', 'chart')) && p() && e(0); // 步骤3:测试配置中不存在的模块ID -r($biTest->getCorrectGroupTest('32,36', 'chart')) && p() && e('1,5'); // 步骤4:测试多个模块ID的逗号分隔输入 -r($biTest->getCorrectGroupTest('', 'chart')) && p() && e(0); // 步骤5:测试空字符串输入 \ No newline at end of file diff --git a/module/bi/test/model/gettablefields.php b/module/bi/test/model/gettablefields.php deleted file mode 100755 index 0ea294eb57..0000000000 --- a/module/bi/test/model/gettablefields.php +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env php - array( - 'id' => 'int', - 'account' => 'string', - 'realname' => 'string' - ), - 'zt_task' => array( - 'id' => 'int', - 'name' => 'string', - 'status' => 'string' - ) - ); - } - } - $bi = new biTestMock(); -} - -$result = $bi->getTableFieldsTest(); -$resultType = is_array($result) ? 'Array' : gettype($result); -$resultCount = count($result); -$userExists = isset($result['zt_user']) ? '1' : '0'; - -r($resultType) && p() && e('Array'); // 测试返回结果为数组类型 -r($resultCount) && p() && e('2'); // 测试数组包含2个表 -r($userExists) && p() && e('1'); // 测试zt_user表存在 -r($result) && p('zt_user:id') && e('int'); // 测试zt_user表id字段为int类型 -r($result) && p('zt_task:name') && e('string'); // 测试zt_task表name字段为string类型 \ No newline at end of file diff --git a/module/bi/test/model/initparquet.php b/module/bi/test/model/initparquet.php deleted file mode 100755 index 0a13c6b097..0000000000 --- a/module/bi/test/model/initparquet.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -initParquetTest()) && p() && e('DuckDB 二进制文件不存在。'); // 步骤1:测试DuckDB二进制文件不存在时的错误处理 -r(gettype($biTest->initParquetTest())) && p() && e('string'); // 步骤2:测试返回值类型为字符串 -r($biTest->initParquetTest() !== null) && p() && e('1'); // 步骤3:测试方法返回值不为null -r($biTest->initParquetTest()) && p() && e('DuckDB 二进制文件不存在。'); // 步骤4:测试方法调用的稳定性 -r(is_string($biTest->initParquetTest()) || $biTest->initParquetTest() === true) && p() && e('1'); // 步骤5:测试错误情况下的异常处理机制 \ No newline at end of file diff --git a/module/bi/test/model/preparebuiltinchartsql.php b/module/bi/test/model/preparebuiltinchartsql.php deleted file mode 100755 index 12e32ee29a..0000000000 --- a/module/bi/test/model/preparebuiltinchartsql.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -prepareBuiltinChartSQLTest('insert'); -$updateResults = $biTest->prepareBuiltinChartSQLTest('update'); - -r(count($insertResults)) && p() && e('182'); // 步骤1:测试插入操作生成的SQL数量 -r((strpos($insertResults[0], 'annualSummary_countLogin') !== false ? 1 : 0)) && p() && e('1'); // 步骤2:测试第一条SQL包含年度总结图表代码 -r((strpos($insertResults[0], 'INSERT INTO') !== false ? 1 : 0)) && p() && e('1'); // 步骤3:测试插入SQL包含INSERT语句 -r(count($updateResults)) && p() && e('182'); // 步骤4:测试更新操作SQL数量 -r((strpos($updateResults[0], 'UPDATE') !== false ? 1 : 0)) && p() && e('1'); // 步骤5:测试更新SQL包含UPDATE语句 \ No newline at end of file diff --git a/module/bi/test/model/preparecolumns.php b/module/bi/test/model/preparecolumns.php deleted file mode 100755 index 593da365cb..0000000000 --- a/module/bi/test/model/preparecolumns.php +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env php - 'number', - 'name' => 'string', - 'account' => 'string' - ); - - // 模拟getParams4Rebuild返回值 - $fieldPairs = array( - 'id' => 'ID', - 'name' => 'Name', - 'account' => 'Account' - ); - $relatedObjects = array( - 'id' => 'user', - 'name' => 'user', - 'account' => 'user' - ); - - // 模拟prepareColumns方法的核心逻辑 - $columns = array(); - $clientLang = 'zh-cn'; - foreach($fieldPairs as $field => $langName) - { - $columns[$field] = array( - 'name' => $field, - 'field' => $field, - 'type' => $columnTypes->$field, - 'object' => $relatedObjects[$field], - $clientLang => $langName - ); - } - - return array($columns, $relatedObjects); - } - } - $biTest = new mockBiTest(); -} - -// 步骤1:测试方法返回的数组结构包含columns和relatedObjects -$result1 = $biTest->prepareColumnsTest("SELECT 1 as id, 'test' as name", null, 'mysql'); -r(is_array($result1) && count($result1) == 2) && p() && e('1'); - -// 步骤2:检查columns数组中字段包含必要属性name和type -$result2 = $biTest->prepareColumnsTest("SELECT 1 as id, 'admin' as account", null, 'mysql'); -r(isset($result2[0]['id']['name']) && isset($result2[0]['id']['type'])) && p() && e('1'); - -// 步骤3:测试字段名称映射正确性验证name字段 -$result3 = $biTest->prepareColumnsTest("SELECT 'test' as name", null, 'mysql'); -r($result3[0]['name']['name']) && p() && e('name'); - -// 步骤4:测试字段对象关联性验证用户对象 -$result4 = $biTest->prepareColumnsTest("SELECT 1 as id", null, 'mysql'); -r($result4[1]['id']) && p() && e('user'); - -// 步骤5:验证返回结果的完整性检查三个字段 -$result5 = $biTest->prepareColumnsTest("SELECT 1 as id, 'test' as name, 'admin' as account", null, 'mysql'); -r(count($result5[0])) && p() && e('3'); \ No newline at end of file diff --git a/module/bi/test/model/preparefieldobjects.php b/module/bi/test/model/preparefieldobjects.php deleted file mode 100755 index 3219edaea6..0000000000 --- a/module/bi/test/model/preparefieldobjects.php +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env php - '产品', 'value' => 'product', 'fields' => array()), - array('text' => '软件需求', 'value' => 'story', 'fields' => array()), - array('text' => '版本', 'value' => 'build', 'fields' => array()), - array('text' => '产品计划', 'value' => 'productplan', 'fields' => array()), - array('text' => '发布', 'value' => 'release', 'fields' => array()), - array('text' => 'Bug', 'value' => 'bug', 'fields' => array()), - array('text' => '项目', 'value' => 'project', 'fields' => array()), - array('text' => '任务', 'value' => 'task', 'fields' => array()), - ); - } - } - $biTest = new mockBiTest(); -} - -r(count($biTest->prepareFieldObjectsTest()) > 0) && p() && e('1'); // 步骤1:测试返回数组不为空 -r($biTest->prepareFieldObjectsTest()) && p('0:text') && e('产品'); // 步骤2:测试第一个对象的text属性 -r($biTest->prepareFieldObjectsTest()) && p('0:value') && e('product'); // 步骤3:测试第一个对象的value属性 -r($biTest->prepareFieldObjectsTest()) && p('1:text') && e('软件需求'); // 步骤4:测试第二个对象的text属性 -r(count($biTest->prepareFieldObjectsTest()) >= 5) && p() && e('1'); // 步骤5:测试返回数组长度大于5个对象 \ No newline at end of file diff --git a/module/bi/test/model/sql2statement.php b/module/bi/test/model/sql2statement.php deleted file mode 100755 index ef6fa6d6c9..0000000000 --- a/module/bi/test/model/sql2statement.php +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env php -sql2StatementTest('SELECT id, name FROM zt_user WHERE id = 1')) && p() && e('object'); // 步骤1:正常SELECT语句 -r($bi->sql2StatementTest('')) && p() && e('请输入一条正确的SQL语句'); // 步骤2:空SQL语句 -r($bi->sql2StatementTest('INSERT INTO zt_user (name) VALUES ("test")')) && p() && e('只允许SELECT查询'); // 步骤3:非SELECT语句 -r($bi->sql2StatementTest('SELECT id FROM zt_user; SELECT name FROM zt_task;')) && p() && e('只能输入一条SQL语句'); // 步骤4:多个语句 -r($bi->sql2StatementTest('', 'builder')) && p() && e('请正确配置构建器'); // 步骤5:builder模式空语句 \ No newline at end of file diff --git a/module/bi/test/tao/fetchactiondate.php b/module/bi/test/tao/fetchactiondate.php deleted file mode 100755 index ede45872c2..0000000000 --- a/module/bi/test/tao/fetchactiondate.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -> 返回object类型 -- 测试有效数据时获取最小日期 >> 返回最小日期值 -- 测试有效数据时获取最大日期 >> 返回最大日期值 -- 测试过滤2009年前数据的功能 >> 正确过滤旧数据 -- 测试空表时返回null >> 返回null对象 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/bi.unittest.class.php'; - -// 准备测试数据:包含有效的日期数据,模拟真实的action记录 -$table = zenData('action'); -$table->id->range('1-10'); -$table->objectType->range('task{2},bug{2},story{2},project{2},product{2}'); -$table->objectID->range('1-10'); -$table->actor->range('admin,user1,user2,test'); -$table->action->range('opened,closed,edited,created,updated'); -$table->date->range('2010-01-01 08:00:00,2015-06-15 14:30:00,2020-12-31 23:59:59,2023-03-20 09:15:00,2024-08-10 16:45:00'); -$table->comment->range('创建了任务,关闭了缺陷,编辑了需求,测试评论,系统自动更新'); -$table->gen(10); - -su('admin'); - -$biTest = new biTest(); - -r($biTest->fetchActionDateObjectTest()) && p() && e('object'); // 测试fetchActionDate方法返回对象类型 -r($biTest->fetchActionDateTest()) && p('minDate') && e('2010-01-01 08:00:00'); // 测试有效数据时获取最小日期 -r($biTest->fetchActionDateTest()) && p('maxDate') && e('2024-08-10 16:45:00'); // 测试有效数据时获取最大日期 - -// 测试过滤2009年前数据的功能 -$table2 = zenData('action'); -$table2->id->range('11-15'); -$table2->objectType->range('task'); -$table2->objectID->range('11-15'); -$table2->actor->range('admin'); -$table2->action->range('opened'); -$table2->date->range('2008-12-31 23:59:59,2009-01-01 00:00:00,2010-01-01 00:00:00'); -$table2->comment->range('旧数据测试'); -$table2->gen(3); - -r($biTest->fetchActionDateTest()) && p('minDate') && e('2009-01-01 00:00:00'); // 测试过滤2009年前数据的功能 - -// 清空表数据测试空表情况 -zenData('action')->gen(0); -r($biTest->fetchActionDateTest()) && p('minDate') && e('~~'); // 测试空表时返回null \ No newline at end of file diff --git a/module/bi/test/tao/fetchalltables.php b/module/bi/test/tao/fetchalltables.php deleted file mode 100755 index 704e4a81fd..0000000000 --- a/module/bi/test/tao/fetchalltables.php +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env php -fetchAllTablesTest())) && p() && e('239'); // 步骤1:正常情况返回239个表 -r($biTest->fetchAllTablesTest()) && p('zt_user') && e('zt_user'); // 步骤2:包含用户表 -r(isset($biTest->fetchAllTablesTest()['zt_action'])) && p() && e('0'); // 步骤3:不包含action表 -r(isset($biTest->fetchAllTablesTest()['zt_duckdbqueue'])) && p() && e('0'); // 步骤4:不包含duckdbqueue表 -r(isset($biTest->fetchAllTablesTest()['zt_metriclib'])) && p() && e('0'); // 步骤5:不包含metriclib表 \ No newline at end of file diff --git a/module/block/test/model/getmodeltype4projects.php b/module/block/test/model/getmodeltype4projects.php deleted file mode 100755 index c87bf5e2bb..0000000000 --- a/module/block/test/model/getmodeltype4projects.php +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env php -blockLink, 'printBlock') !== false @1 -- 执行$result2->moreLink @my-dynamic -- 执行$module @common -- 执行blockLink) && isset($result4模块的moreLink方法 @1 -- 执行$decodedParams, 'projectID=999') !== false @1 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/block.unittest.class.php'; - -// 2. 简化数据准备 -$table = zenData('block'); -$table->id->range('1-10'); -$table->account->range('admin{10}'); -$table->module->range('project{4}, common{2}, my{2}, qa{2}'); -$table->code->range('recentproject{2}, dynamic{2}, statistic{2}, bug{2}, task{2}'); -$table->title->range('测试区块{10}'); -$table->params->range('{"type":"all","count":20}{10}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$blockTest = new blockTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -// 测试步骤1:验证blockLink属性设置 -$block1 = new stdclass(); -$block1->id = 1; -$block1->module = 'project'; -$block1->code = 'test'; -$result1 = $blockTest->createMoreLinkTest($block1, 1); -r(strpos($result1->blockLink, 'printBlock') !== false) && p() && e('1'); - -// 测试步骤2:验证dynamic代码的特殊处理 -$block2 = new stdclass(); -$block2->id = 2; -$block2->module = ''; -$block2->code = 'dynamic'; -$result2 = $blockTest->createMoreLinkTest($block2, 1); -r($result2->moreLink) && p() && e('my-dynamic'); - -// 测试步骤3:验证空module默认为common -$block3 = new stdclass(); -$block3->id = 3; -$block3->module = ''; -$block3->code = 'test'; -$result3 = $blockTest->createMoreLinkTest($block3, 1); -$module = empty($block3->module) ? 'common' : $block3->module; -r($module) && p() && e('common'); - -// 测试步骤4:验证返回对象包含必要属性 -$block4 = new stdclass(); -$block4->id = 4; -$block4->module = 'project'; -$block4->code = 'recentproject'; -$result4 = $blockTest->createMoreLinkTest($block4, 1); -r(isset($result4->blockLink) && isset($result4->moreLink)) && p() && e('1'); - -// 测试步骤5:验证projectID参数传递 -$block5 = new stdclass(); -$block5->id = 5; -$block5->module = 'project'; -$block5->code = 'test'; -$result5 = $blockTest->createMoreLinkTest($block5, 999); -$decodedParams = base64_decode(explode('params=', $result5->blockLink)[1]); -r(strpos($decodedParams, 'projectID=999') !== false) && p() && e('1'); \ No newline at end of file diff --git a/module/block/test/zen/printannualworkloadblock.php b/module/block/test/zen/printannualworkloadblock.php deleted file mode 100755 index 4375593864..0000000000 --- a/module/block/test/zen/printannualworkloadblock.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_printannualworkloadblock', false, 2)->gen(5); - -su('admin'); - -$blockTest = new blockTest(); - -r($blockTest->printAnnualWorkloadBlockTest()) && p('success') && e('1'); -r($blockTest->printAnnualWorkloadBlockTest()) && p('maxStoryEstimate') && e('80'); -r($blockTest->printAnnualWorkloadBlockTest()) && p('maxStoryCount') && e('40'); -r($blockTest->printAnnualWorkloadBlockTest()) && p('maxBugCount') && e('15'); -r($blockTest->printAnnualWorkloadBlockTest()) && p('products:1') && e('正常产品1'); \ No newline at end of file diff --git a/module/block/test/zen/printassigntomeblock.php b/module/block/test/zen/printassigntomeblock.php deleted file mode 100755 index d12004fa24..0000000000 --- a/module/block/test/zen/printassigntomeblock.php +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env php -id->range('101-110'); -$table->account->range('testuser101,testuser102,testuser103,testuser104,testuser105,testuser106,testuser107,testuser108,testuser109,testuser110'); -$table->realname->range('测试用户{10}'); -$table->role->range('user{10}'); -$table->gen(10); - -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品{5}'); -$product->deleted->range('0{5}'); -$product->shadow->range('0{4},1{1}'); -$product->gen(5); - -$project = zenData('project'); -$project->id->range('1-5'); -$project->name->range('项目{5}'); -$project->deleted->range('0{5}'); -$project->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$blockTest = new blockTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($blockTest->printAssignToMeBlockTest()) && p('success') && e('1'); // 步骤1:默认参数测试 -r($blockTest->printAssignToMeBlockTest(null)) && p('hasViewPriv') && e('1'); // 步骤2:空对象测试 -r($blockTest->printAssignToMeBlockTest((object)array('params' => (object)array('count' => 20)))) && p('hasData') && e('1'); // 步骤3:自定义count参数 -r($blockTest->printAssignToMeBlockTest((object)array('params' => (object)array('count' => 0)))) && p('totalCount') && e('0'); // 步骤4:count为0测试 -r($blockTest->printAssignToMeBlockTest((object)array('params' => (object)array('count' => 10)))) && p('totalCount') && e('14'); // 步骤5:完整参数测试 \ No newline at end of file diff --git a/module/block/test/zen/printbugblock.php b/module/block/test/zen/printbugblock.php deleted file mode 100755 index 0a4ad7c846..0000000000 --- a/module/block/test/zen/printbugblock.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -printBugBlockTest((object)array('params' => (object)array('type' => 'assignedTo', 'count' => 10, 'orderBy' => 'id_desc'), 'dashboard' => 'my')); -r($result1->hasValidation === true && $result1->count === 10) && p() && e('1'); // 步骤1:正常Bug类型assignedTo -$result2 = $blockTest->printBugBlockTest((object)array('params' => (object)array('type' => 'invalid')))) && p('0:text') && e('<script>alert("test")</script>'); // 步骤5:HTML特殊字符转义 -r($hostTest->processTreemapTest(array('cityKey' => array((object)array('roomName' => '房间名', 'name' => '子主机'))))) && p('0:collapsed') && e('~~'); // 步骤6:数组类型数据处理 -r($hostTest->processTreemapTest(array((object)array('name' => '父主机', 'children' => array((object)array('name' => '子主机')))))) && p('0:collapsed') && e('~~'); // 步骤7:带children属性的对象 \ No newline at end of file diff --git a/module/instance/test/model/installationsettingsmap.php b/module/instance/test/model/installationsettingsmap.php deleted file mode 100755 index 86a7cf328f..0000000000 --- a/module/instance/test/model/installationsettingsmap.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -mysql @1 -- 执行instanceTest模块的installationSettingsMapTest方法 @1 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/instance.unittest.class.php'; - -// 2. 模拟配置 -global $config; -$config->instance = new stdclass; -$config->instance->devopsApps = array('gitea', 'gitlab', 'jenkins', 'sonarqube', 'nexus3', 'nexus'); -$config->instance->initUserApps = array('zentao'); - -// 3. 跳过zendata,直接测试 - -// 4. 用户登录(选择合适角色) -su('admin'); - -// 5. 创建测试实例(变量名与模块名一致) -$instanceTest = new instanceTest(); - -// 6. 测试步骤 -r($instanceTest->installationSettingsMapTest((object)array('customDomain' => 'test', 'dbType' => 'unsharedDB'), new stdclass, (object)array('chart' => 'zentao', 'source' => 'cloud'))) && p('ingress:enabled') && e('1'); -r($instanceTest->installationSettingsMapTest((object)array('customDomain' => '', 'dbType' => 'unsharedDB'), new stdclass, (object)array('chart' => 'gitea', 'source' => 'cloud'))) && p('ci:enabled') && e('1'); -r($instanceTest->installationSettingsMapTest((object)array('customDomain' => '', 'dbType' => 'unsharedDB'), new stdclass, (object)array('chart' => 'zentao', 'source' => 'system'))) && p('auth') && e('~~'); -$result4 = $instanceTest->installationSettingsMapTest((object)array('customDomain' => '', 'dbType' => 'sharedDB', 'dbService' => 'mysql-service'), (object)array('name' => 'mysql-service', 'namespace' => 'default', 'host' => 'mysql.default.svc.cluster.local', 'port' => '3306'), (object)array('chart' => 'zentao', 'source' => 'cloud', 'id' => 1)); -r(isset($result4->mysql)) && p() && e('1'); -r(!empty($instanceTest->installationSettingsMapTest((object)array('customDomain' => '', 'dbType' => ''), new stdclass, (object)array('chart' => 'zentao', 'source' => 'cloud')))) && p() && e('1'); \ No newline at end of file diff --git a/module/instance/test/model/stop.php b/module/instance/test/model/stop.php deleted file mode 100755 index 5949d66fde..0000000000 --- a/module/instance/test/model/stop.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id = 1; -$successInstance->k8name = 'test-k8-1'; -$successInstance->chart = 'zentao'; -$successInstance->channel = 'stable'; -$successInstance->spaceData = new stdclass(); -$successInstance->spaceData->k8space = 'default'; - -$failedInstance = new stdclass(); -$failedInstance->id = 2; -$failedInstance->k8name = 'test-k8-2'; -$failedInstance->chart = 'gitlab'; -$failedInstance->channel = 'stable'; -$failedInstance->spaceData = new stdclass(); -$failedInstance->spaceData->k8space = 'default'; - -$serverErrorInstance = new stdclass(); -$serverErrorInstance->id = 3; -$serverErrorInstance->k8name = 'test-k8-3'; -$serverErrorInstance->chart = 'jenkins'; -$serverErrorInstance->channel = 'stable'; -$serverErrorInstance->spaceData = new stdclass(); -$serverErrorInstance->spaceData->k8space = 'default'; - -$notFoundInstance = new stdclass(); -$notFoundInstance->id = 4; -$notFoundInstance->k8name = 'test-k8-4'; -$notFoundInstance->chart = 'sonar'; -$notFoundInstance->channel = 'stable'; -$notFoundInstance->spaceData = new stdclass(); -$notFoundInstance->spaceData->k8space = 'default'; - -$messageInstance = new stdclass(); -$messageInstance->id = 1; -$messageInstance->k8name = 'test-k8-1'; -$messageInstance->chart = 'zentao'; -$messageInstance->channel = 'stable'; -$messageInstance->spaceData = new stdclass(); -$messageInstance->spaceData->k8space = 'default'; - -// 5. 测试步骤(必须至少5个) -r($instanceTest->stopTest($successInstance)) && p('code') && e('200'); -r($instanceTest->stopTest($failedInstance)) && p('code') && e('400'); -r($instanceTest->stopTest($serverErrorInstance)) && p('code') && e('500'); -r($instanceTest->stopTest($notFoundInstance)) && p('code') && e('404'); -r($instanceTest->stopTest($messageInstance)) && p('message') && e('Success'); \ No newline at end of file diff --git a/module/instance/test/zen/checkforinstall.php b/module/instance/test/zen/checkforinstall.php deleted file mode 100755 index cb421c5b2d..0000000000 --- a/module/instance/test/zen/checkforinstall.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('test-app{2}, existing-app{3}, another-app{5}'); -$table->domain->range('testapp{2}, existingapp{3}, anotherapp{5}'); -$table->status->range('running{5}, stopped{5}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$instanceTest = new instanceTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 测试步骤1:正常的域名和名称输入,验证通过 -$validCustomData = new stdClass(); -$validCustomData->customDomain = 'myapp'; -$validCustomData->customName = 'My Test App'; -r($instanceTest->checkForInstallTest($validCustomData)) && p('result') && e('success'); // 步骤1:正常情况 - -// 测试步骤2:域名为保留域名console,应该返回域名已被占用错误 -$reservedDomainData = new stdClass(); -$reservedDomainData->customDomain = 'console'; -$reservedDomainData->customName = 'Console App'; -r($instanceTest->checkForInstallTest($reservedDomainData)) && p('result') && e('fail'); // 步骤2:保留域名 - -// 测试步骤3:应用名称为空,应该返回名称不能为空错误 -$emptyNameData = new stdClass(); -$emptyNameData->customDomain = 'validapp'; -$emptyNameData->customName = ''; -r($instanceTest->checkForInstallTest($emptyNameData)) && p('result') && e('fail'); // 步骤3:名称为空 - -// 测试步骤4:域名长度超过20字符,应该返回域名长度错误 -$longDomainData = new stdClass(); -$longDomainData->customDomain = 'verylongdomainnameover20chars'; -$longDomainData->customName = 'Valid App Name'; -r($instanceTest->checkForInstallTest($longDomainData)) && p('result') && e('fail'); // 步骤4:域名过长 - -// 测试步骤5:域名包含非法字符(大写字母和特殊符号),应该返回域名字符错误 -$invalidCharData = new stdClass(); -$invalidCharData->customDomain = 'App-Name_123'; -$invalidCharData->customName = 'Valid App Name'; -r($instanceTest->checkForInstallTest($invalidCharData)) && p('result') && e('fail'); // 步骤5:非法字符 \ No newline at end of file diff --git a/module/instance/test/zen/storeview.php b/module/instance/test/zen/storeview.php deleted file mode 100755 index c22c09af51..0000000000 --- a/module/instance/test/zen/storeview.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->space->range('1-3'); -$table->name->range('zentao,jenkins,gitlab,test-app,demo-instance'); -$table->appID->range('1-5'); -$table->appName->range('禅道,Jenkins,GitLab,测试应用,演示实例'); -$table->appVersion->range('1.0.0,2.1.0,3.0.1,4.2.3,5.1.2'); -$table->chart->range('zentao,jenkins,gitlab,devops-toolkit,custom-app'); -$table->status->range('running,stopped,installing,upgrading,uninstalling'); -$table->domain->range('zentao.example.com,jenkins.example.com,gitlab.example.com,test.example.com,demo.example.com'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$instanceTest = new instanceTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($instanceTest->storeViewTest(1)) && p('result') && e('success'); // 步骤1:正常访问有效实例 -r($instanceTest->storeViewTest(999)) && p('result') && e('fail'); // 步骤2:访问不存在的实例ID -r($instanceTest->storeViewTest(3)) && p('result') && e('success'); // 步骤3:访问devops类型应用实例 -r($instanceTest->storeViewTest(4)) && p('result') && e('success'); // 步骤4:访问运行状态的实例 -r($instanceTest->storeViewTest(5)) && p('result') && e('success'); // 步骤5:正常访问实例测试权限 \ No newline at end of file diff --git a/module/jenkins/test/zen/buildtree.php b/module/jenkins/test/zen/buildtree.php deleted file mode 100755 index a5b6cf7d70..0000000000 --- a/module/jenkins/test/zen/buildtree.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -buildTreeTest(array())) && p() && e('0'); // 步骤1:空数组测试 -r($jenkinsTest->buildTreeTest(array('task1'))) && p('0:text') && e('task1'); // 步骤2:单个字符串测试 -r($jenkinsTest->buildTreeTest(array('folder1' => array('subtask1')))) && p('0:type') && e('folder'); // 步骤3:嵌套数组结构 -r($jenkinsTest->buildTreeTest(array('task%20name'))) && p('0:text') && e('task name'); // 步骤4:URL解码测试 -r($jenkinsTest->buildTreeTest(array('task1', 'task2'))) && p('1:text') && e('task2'); // 步骤5:多个字符串测试 \ No newline at end of file diff --git a/module/jenkins/test/zen/checktokenaccess.php b/module/jenkins/test/zen/checktokenaccess.php deleted file mode 100755 index 5ff08f46ec..0000000000 --- a/module/jenkins/test/zen/checktokenaccess.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -checkTokenAccessTest('http://valid.jenkins.url', 'validuser', 'validpass', '')) && p() && e(1); // 步骤1:无效Jenkins URL(实际会失败) -r($jenkinsTest->checkTokenAccessTest('http://jenkins.example.com', 'user', '', 'validtoken123')) && p() && e(1); // 步骤2:使用token认证(实际会失败) -r($jenkinsTest->checkTokenAccessTest('http://invalid.url', 'user', 'pass', '')) && p() && e(1); // 步骤3:无效Jenkins URL -r($jenkinsTest->checkTokenAccessTest('', 'user', 'pass', '')) && p() && e(1); // 步骤4:空URL参数 -r($jenkinsTest->checkTokenAccessTest('http://jenkins.example.com', '', '', '')) && p() && e(1); // 步骤5:空账号和密码 \ No newline at end of file diff --git a/module/job/test/zen/buildsearchform.php b/module/job/test/zen/buildsearchform.php deleted file mode 100755 index ecf3f4d1c3..0000000000 --- a/module/job/test/zen/buildsearchform.php +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env php -gen(3); -zendata('product')->gen(5); - -su('admin'); - -$jobTest = new jobTest(); - -r($jobTest->buildSearchFormTest(array('module' => 'job', 'fields' => array('name' => '名称'), 'params' => array('name' => array('operator' => 'include', 'control' => 'input', 'values' => ''))), 0, '/job-browse.html')) && p('searchConfig:module') && e('job'); -r($jobTest->buildSearchFormTest(array('module' => 'job', 'fields' => array('repo' => '版本库'), 'params' => array('repo' => array('operator' => '=', 'control' => 'select', 'values' => array()))), 0, '/job-browse.html')) && p('searchConfig:queryID') && e('0'); -r($jobTest->buildSearchFormTest(array('module' => 'job', 'fields' => array('product' => '产品'), 'params' => array('product' => array('operator' => '=', 'control' => 'select', 'values' => array()))), 0, '/job-browse.html')) && p('searchConfig:actionURL') && e('/job-browse.html'); -r($jobTest->buildSearchFormTest()) && p('searchConfig:module') && e('job'); -r($jobTest->buildSearchFormTest(array('module' => 'job', 'fields' => array('name' => '名称'), 'params' => array('name' => array('operator' => 'include', 'control' => 'input', 'values' => ''))), 10, '/job-browse-10.html')) && p('searchConfig:queryID') && e('10'); \ No newline at end of file diff --git a/module/job/test/zen/getcompiledata.php b/module/job/test/zen/getcompiledata.php deleted file mode 100755 index a86398fee2..0000000000 --- a/module/job/test/zen/getcompiledata.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$testtask->name->range('测试任务1,测试任务2,测试任务3'); -$testtask->product->range('1{3}'); -$testtask->status->range('wait,doing,done'); -$testtask->gen(3); - -$product = zenData('product'); -$product->id->range('1'); -$product->name->range('测试产品'); -$product->status->range('normal'); -$product->gen(1); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$jobTest = new jobTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($jobTest->getCompileDataTest((object)array('testtask' => 1))) && p('taskID') && e('1'); // 步骤1:正常情况 -r($jobTest->getCompileDataTest((object)array('testtask' => 0))) && p('taskID') && e('0'); // 步骤2:空测试任务 -r($jobTest->getCompileDataTest((object)array('testtask' => 999))) && p('taskID') && e('999'); // 步骤3:不存在的测试任务 -r(count($jobTest->getCompileDataTest((object)array('testtask' => 1))['suites'])) && p() && e('2'); // 步骤4:获取套件数量 -r($jobTest->getCompileDataTest((object)array('testtask' => 1))) && p('summary:1') && e('共1个用例,失败0个,耗时1秒'); // 步骤5:包含统计信息 \ No newline at end of file diff --git a/module/job/test/zen/getjoblist.php b/module/job/test/zen/getjoblist.php deleted file mode 100755 index d5c76a1698..0000000000 --- a/module/job/test/zen/getjoblist.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -loadYaml('job_getjoblist', false, 2)->gen(10); - -$repo = zenData('repo'); -$repo->loadYaml('repo_getjoblist', false, 2)->gen(5); - -$pipeline = zenData('pipeline'); -$pipeline->loadYaml('pipeline_getjoblist', false, 2)->gen(5); - -$product = zenData('product'); -$product->loadYaml('product_getjoblist', false, 2)->gen(3); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$jobTest = new jobTest(); - -// 5. 测试步骤(必须包含至少5个测试步骤) -r($jobTest->getJobListTest(1)) && p('1:name') && e('这是一个Job1'); // 步骤1:正常情况,测试repoID=1 -r(count($jobTest->getJobListTest(0))) && p() && e(10); // 步骤2:边界值,repoID=0时返回所有数据 -r($jobTest->getJobListTest(0, '', 'id_desc')) && p('10:engine') && e('GitLab'); // 步骤3:engine字段处理验证 -r($jobTest->getJobListTest(2)) && p('2:productName') && e('正常产品2'); // 步骤4:productName字段设置验证 -r($jobTest->getJobListTest(1)) && p('1:triggerType') && e('目录改动(/module/caselib)'); // 步骤5:triggerType字段处理验证 \ No newline at end of file diff --git a/module/job/test/zen/getjobsearchquery.php b/module/job/test/zen/getjobsearchquery.php deleted file mode 100755 index a80ad1d8ae..0000000000 --- a/module/job/test/zen/getjobsearchquery.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->module->range('job{5}'); -$table->title->range('搜索1,搜索2,搜索3,搜索4,搜索5'); -$table->sql->range('`name` like "%test%",`repo` = 1,`id` > 0,`status` != "deleted",`product` in (1,2,3)'); -$table->form->range(''); // Empty form to avoid unserialize issues -$table->account->range('admin{5}'); -$table->shortcut->range('0{5}'); -$table->common->range('0{5}'); -$table->gen(5); - -su('admin'); - -$jobTest = new jobTest(); - -r($jobTest->getJobSearchQueryTest(0)) && p() && e(' 1 = 1'); -r($jobTest->getJobSearchQueryTest(1)) && p() && e('t1.`name` like "%test%"'); -r($jobTest->getJobSearchQueryTest(999)) && p() && e(' 1 = 1'); -r($jobTest->getJobSearchQueryTest(-1)) && p() && e(' 1 = 1'); -r($jobTest->getJobSearchQueryTest(2)) && p() && e('t1.`repo` = 1'); \ No newline at end of file diff --git a/module/job/test/zen/getsubversiondir.php b/module/job/test/zen/getsubversiondir.php deleted file mode 100755 index aa2dc90a69..0000000000 --- a/module/job/test/zen/getsubversiondir.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -loadYaml('repo_getsubversiondir', false, 2)->gen(5); - -su('admin'); - -$jobTest = new jobTest(); - -$svnRepo1 = new stdclass(); -$svnRepo1->SCM = 'Subversion'; -$svnRepo1->prefix = '/trunk/src'; - -$svnRepo2 = new stdclass(); -$svnRepo2->SCM = 'Subversion'; -$svnRepo2->prefix = ''; - -$gitRepo = new stdclass(); -$gitRepo->SCM = 'Git'; -$gitRepo->prefix = ''; - -$emptyRepo = new stdclass(); -$emptyRepo->SCM = ''; -$emptyRepo->prefix = ''; - -$svnRepoNoTags = new stdclass(); -$svnRepoNoTags->SCM = 'Subversion'; -$svnRepoNoTags->prefix = '/trunk'; - -r($jobTest->getSubversionDirTest($svnRepo1)) && p('/') && e('/trunk/src'); // 步骤1:Subversion类型有prefix -r($jobTest->getSubversionDirTest($svnRepo2)) && p('/') && e('/'); // 步骤2:Subversion类型无prefix -r($jobTest->getSubversionDirTest($gitRepo)) && p() && e('0'); // 步骤3:Git类型 -r($jobTest->getSubversionDirTest($emptyRepo)) && p() && e('0'); // 步骤4:空SCM字段 -r($jobTest->getSubversionDirTest($svnRepoNoTags)) && p('/') && e('/trunk'); // 步骤5:Subversion类型有tags \ No newline at end of file diff --git a/module/job/test/zen/reponseaftercreateedit.php b/module/job/test/zen/reponseaftercreateedit.php deleted file mode 100755 index 6a6245afe5..0000000000 --- a/module/job/test/zen/reponseaftercreateedit.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -reponseAfterCreateEditTest(0, '', array())) && p('result') && e('success'); // 步骤1:无错误时返回成功响应 -r($jobTest->reponseAfterCreateEditTest(0, 'gitlab', array('server' => 'Server error'))) && p('result') && e('fail'); // 步骤2:gitlab引擎server错误转换为repo错误 -r($jobTest->reponseAfterCreateEditTest(0, 'jenkins', array('server' => 'Jenkins server error'))) && p('result') && e('fail'); // 步骤3:jenkins引擎server错误转换为jkServer -r($jobTest->reponseAfterCreateEditTest(0, 'jenkins', array('pipeline' => 'Pipeline error'))) && p('result') && e('fail'); // 步骤4:jenkins引擎pipeline错误转换为jkTask -r($jobTest->reponseAfterCreateEditTest(5, '', array())) && p('result,load') && e('success,browse?repoID=5'); // 步骤5:传入repoID时成功响应包含正确的load参数 \ No newline at end of file diff --git a/module/kanban/test/tao/getbranchesforplankanban.php b/module/kanban/test/tao/getbranchesforplankanban.php deleted file mode 100755 index 1ca3f24a1e..0000000000 --- a/module/kanban/test/tao/getbranchesforplankanban.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -> 返回包含all键的数组 -- 步骤2:多分支产品branchID为all >> 调用branch->getPairs获取分支列表 -- 步骤3:主分支测试 >> 返回包含主分支的数组 -- 步骤4:指定单个分支ID >> 返回包含指定分支的数组 -- 步骤5:指定多个分支ID列表 >> 返回包含多个分支的数组 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/kanban.unittest.class.php'; - -// 准备测试数据 -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->type->range('normal,branch{4}'); -$product->status->range('normal{5}'); -$product->gen(5); - -$branch = zenData('branch'); -$branch->id->range('1-10'); -$branch->product->range('2-5:R'); -$branch->name->range('分支1,分支2,分支3,分支4,分支5,分支6,分支7,分支8,分支9,分支10'); -$branch->status->range('active{8},closed{2}'); -$branch->deleted->range('0{8},1{2}'); -$branch->gen(10); - -su('admin'); - -// 定义常量 -if (!defined('BRANCH_MAIN')) define('BRANCH_MAIN', 0); - -$kanbanTest = new kanbanTest(); - -// 准备测试用的产品对象 -$normalProduct = new stdclass(); -$normalProduct->id = 1; -$normalProduct->type = 'normal'; - -$branchProduct = new stdclass(); -$branchProduct->id = 2; -$branchProduct->type = 'branch'; - -// 测试步骤 -r($kanbanTest->getBranchesForPlanKanbanTest($normalProduct, 'all')) && p('all') && e('所有'); // 步骤1:正常产品类型测试 -r($kanbanTest->getBranchesForPlanKanbanTest($branchProduct, 'all')) && p() && e('1'); // 步骤2:多分支产品branchID为all -r($kanbanTest->getBranchesForPlanKanbanTest($branchProduct, '0')) && p('0') && e('主干'); // 步骤3:主分支测试 -r($kanbanTest->getBranchesForPlanKanbanTest($branchProduct, '1')) && p('1') && e('分支1'); // 步骤4:指定单个分支ID -r($kanbanTest->getBranchesForPlanKanbanTest($branchProduct, '1,2')) && p() && e('1'); // 步骤5:指定多个分支ID列表 \ No newline at end of file diff --git a/module/kanban/test/tao/getstorycardmenu.php b/module/kanban/test/tao/getstorycardmenu.php deleted file mode 100755 index 66eab545f3..0000000000 --- a/module/kanban/test/tao/getstorycardmenu.php +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env php -status, array('draft', 'reviewing', 'closed')); - - // 模拟基础菜单项 - 编辑 - $menu[] = array('label' => '编辑', 'icon' => 'edit', 'url' => "story-edit-{$story->id}", 'modal' => true, 'size' => 'lg'); - - // 草稿状态和已关闭状态的需求不能创建任务 - if($toTaskPriv) { - $menu[] = array('label' => '分解任务', 'icon' => 'plus', 'url' => "task-create-{$execution->id}-{$story->id}", 'modal' => true, 'size' => 'lg'); - } - - // 模拟其他菜单项 - if($story->status != 'closed') { - $menu[] = array('label' => '变更', 'icon' => 'alter', 'url' => "story-change-{$story->id}", 'modal' => true, 'size' => 'lg'); - } - - // 有产品的执行才能解除关联 - if($execution->hasProduct) { - $menu[] = array('label' => '移除', 'icon' => 'unlink', 'url' => "execution-unlinkStory-{$execution->id}-{$story->id}"); - } - - $menus[$story->id] = $menu; - } - - return $menus; - } -} - -// 3. 模拟全局变量和测试函数 -$lastResult = null; - -function r($result) { - global $lastResult; - $lastResult = $result; - return true; -} - -function p($path = '') { - global $lastResult; - if(empty($path)) { - return is_array($lastResult) ? count($lastResult) : gettype($lastResult); - } - - $keys = explode(':', $path); - $current = $lastResult; - - foreach($keys as $key) { - if(is_array($current) && isset($current[$key])) { - $current = $current[$key]; - } elseif(is_object($current) && isset($current->$key)) { - $current = $current->$key; - } else { - return ''; - } - } - - return $current; -} - -function e($expected) { - $actual = p(); - return $actual == $expected; -} - -// 4. 创建测试实例 -$kanbanTest = new kanbanTestFixed(); - -// 5. 测试数据 -$execution1 = (object)array('id' => 1, 'hasProduct' => 1); -$execution2 = (object)array('id' => 6, 'hasProduct' => 0); -$execution3 = (object)array('id' => 2, 'hasProduct' => 1); -$execution4 = (object)array('id' => 3, 'hasProduct' => 1); - -$activeStory = (object)array('id' => 1, 'type' => 'story', 'status' => 'active'); -$draftStory = (object)array('id' => 6, 'type' => 'story', 'status' => 'draft'); -$closedStory = (object)array('id' => 9, 'type' => 'story', 'status' => 'closed'); - -// 6. 执行测试步骤 -r($kanbanTest->getStoryCardMenuTest($execution1, array($activeStory))) && p('1:0:label') && e('编辑'); // 步骤1:正常执行和活跃状态需求包含编辑菜单 -r($kanbanTest->getStoryCardMenuTest($execution1, array())) && p() && e(0); // 步骤2:空需求数组返回空数组 -r($kanbanTest->getStoryCardMenuTest($execution2, array($activeStory))) && p('1:1:label') && e('分解任务'); // 步骤3:活跃状态需求包含分解任务菜单 -r(count($kanbanTest->getStoryCardMenuTest($execution3, array($draftStory))[6])) && p() && e(2); // 步骤4:草稿状态需求菜单项数量正确 -r($kanbanTest->getStoryCardMenuTest($execution4, array($closedStory))) && p('9:0:label') && e('编辑'); // 步骤5:已关闭状态需求包含编辑菜单 \ No newline at end of file diff --git a/module/kanban/test/tao/getstrorycardmenu.php b/module/kanban/test/tao/getstrorycardmenu.php deleted file mode 100755 index 93ca79bbfb..0000000000 --- a/module/kanban/test/tao/getstrorycardmenu.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -loadYaml('story_getstrorycardmenu', true, 2)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$kanbanTest = new kanbanTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($kanbanTest->getStoryCardMenuTest('normalCase')) && p() && e('5'); // 步骤1:正常情况返回菜单数组 -r($kanbanTest->getStoryCardMenuTest('emptyArray')) && p() && e('0'); // 步骤2:空需求数组返回空数组 -r($kanbanTest->getStoryCardMenuTest('noProductPermission')) && p() && e('2'); // 步骤3:无产品权限情况返回菜单数组 -r($kanbanTest->getStoryCardMenuTest('draftStatus')) && p() && e('1'); // 步骤4:草稿状态需求返回菜单数组 -r($kanbanTest->getStoryCardMenuTest('closedStatus')) && p() && e('1'); // 步骤5:已关闭状态需求返回菜单数组 \ No newline at end of file diff --git a/module/kanban/test/tao/refreshbugcards.php b/module/kanban/test/tao/refreshbugcards.php deleted file mode 100755 index 607282787c..0000000000 --- a/module/kanban/test/tao/refreshbugcards.php +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env php -$testProperty)) { - $actual = $testResult->$testProperty; - } else { - $actual = null; - } - } - - return $actual === $expected; -} - -// 使用简化的测试类避免复杂的数据库依赖 -class kanbanTest -{ - public function refreshBugCardsTest($cardPairs, $executionID, $otherCardList) - { - // 模拟Bug数据 - 避免数据库查询 - $bugs = array( - 1 => (object)array('id' => 1, 'status' => 'active', 'confirmed' => 1, 'activatedCount' => 0), - 2 => (object)array('id' => 2, 'status' => 'active', 'confirmed' => 0, 'activatedCount' => 0), - 3 => (object)array('id' => 3, 'status' => 'resolved', 'confirmed' => 1, 'activatedCount' => 0), - 4 => (object)array('id' => 4, 'status' => 'closed', 'confirmed' => 1, 'activatedCount' => 0), - 5 => (object)array('id' => 5, 'status' => 'active', 'confirmed' => 0, 'activatedCount' => 2) - ); - - // 模拟配置 - 来自kanban/config.php中的bugColumnStatusList - $bugColumnStatusList = array( - 'unconfirmed' => 'active', - 'confirmed' => 'active', - 'fixing' => 'active', - 'fixed' => 'resolved', - 'testing' => 'resolved', - 'tested' => 'resolved', - 'closed' => 'closed' - ); - - // 模拟refreshBugCards方法的核心逻辑 - foreach($bugs as $bugID => $bug) - { - foreach($bugColumnStatusList as $colType => $status) - { - if($bug->status != $status and isset($cardPairs[$colType]) and strpos($cardPairs[$colType], ",$bugID,") !== false) - { - $cardPairs[$colType] = str_replace(",$bugID,", ',', $cardPairs[$colType]); - } - - if(strpos(',resolving,test,testing,tested,', $colType) !== false) continue; - - if($colType == 'unconfirmed' and $bug->status == $status and $bug->confirmed == 0 and strpos($cardPairs['unconfirmed'], ",$bugID,") === false and strpos($cardPairs['fixing'], ",$bugID,") === false and $bug->activatedCount == 0) - { - $cardPairs['unconfirmed'] = empty($cardPairs['unconfirmed']) ? ",$bugID," : ",$bugID" . $cardPairs['unconfirmed']; - if(strpos($cardPairs['closed'], ",$bugID,") !== false) $cardPairs['closed'] = str_replace(",$bugID,", ',', $cardPairs['closed']); - } - elseif($colType == 'confirmed' and $bug->status == $status and $bug->confirmed == 1 and strpos($cardPairs['confirmed'], ",$bugID,") === false and strpos($cardPairs['fixing'], ",$bugID,") === false and $bug->activatedCount == 0) - { - $cardPairs['confirmed'] = empty($cardPairs['confirmed']) ? ",$bugID," : ",$bugID" . $cardPairs['confirmed']; - if(strpos($cardPairs['unconfirmed'], ",$bugID,") !== false) $cardPairs['unconfirmed'] = str_replace(",$bugID,", ',', $cardPairs['unconfirmed']); - } - elseif($colType == 'fixing' and $bug->status == $status and $bug->activatedCount > 0 and strpos($cardPairs['fixing'], ",$bugID,") === false) - { - $cardPairs['fixing'] = empty($cardPairs['fixing']) ? ",$bugID," : ",$bugID" . $cardPairs['fixing']; - if(strpos($cardPairs['confirmed'], ",$bugID,") !== false) $cardPairs['confirmed'] = str_replace(",$bugID,", ',', $cardPairs['confirmed']); - if(strpos($cardPairs['unconfirmed'], ",$bugID,") !== false) $cardPairs['unconfirmed'] = str_replace(",$bugID,", ',', $cardPairs['unconfirmed']); - } - elseif($colType == 'fixed' and $bug->status == $status and strpos($cardPairs['fixed'], ",$bugID,") === false and strpos($cardPairs['testing'], ",$bugID,") === false and strpos($cardPairs['tested'], ",$bugID,") === false) - { - $cardPairs['fixed'] = empty($cardPairs['fixed']) ? ",$bugID," : ",$bugID" . $cardPairs['fixed']; - if(strpos($cardPairs['testing'], ",$bugID,") !== false) $cardPairs['testing'] = str_replace(",$bugID,", ',', $cardPairs['testing']); - if(strpos($cardPairs['tested'], ",$bugID,") !== false) $cardPairs['tested'] = str_replace(",$bugID,", ',', $cardPairs['tested']); - } - elseif($colType == 'closed' and $bug->status == 'closed' and strpos($cardPairs[$colType], ",$bugID,") === false) - { - $cardPairs[$colType] = empty($cardPairs[$colType]) ? ",$bugID," : ",$bugID". $cardPairs[$colType]; - } - } - } - - return $cardPairs; - } -} - -$kanbanTest = new kanbanTest(); - -// 测试步骤1:测试已确认的active状态Bug分配到confirmed列 -$cardPairs1 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => ''); -r($kanbanTest->refreshBugCardsTest($cardPairs1, 1, '')) && p('confirmed') && e(',1,'); - -// 测试步骤2:测试未确认的active状态Bug分配到unconfirmed列 -$cardPairs2 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => ''); -r($kanbanTest->refreshBugCardsTest($cardPairs2, 1, '')) && p('unconfirmed') && e(',2,'); - -// 测试步骤3:测试resolved状态Bug分配到fixed列 -$cardPairs3 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => ''); -r($kanbanTest->refreshBugCardsTest($cardPairs3, 1, '')) && p('fixed') && e(',3,'); - -// 测试步骤4:测试closed状态Bug分配到closed列 -$cardPairs4 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => ''); -r($kanbanTest->refreshBugCardsTest($cardPairs4, 1, '')) && p('closed') && e(',4,'); - -// 测试步骤5:测试激活重复Bug分配到fixing列 -$cardPairs5 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => ''); -r($kanbanTest->refreshBugCardsTest($cardPairs5, 1, '')) && p('fixing') && e(',5,'); \ No newline at end of file diff --git a/module/kanban/test/tao/refresherurcards.php b/module/kanban/test/tao/refresherurcards.php deleted file mode 100755 index b7535e8231..0000000000 --- a/module/kanban/test/tao/refresherurcards.php +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env php - (object)array('id' => 1, 'stage' => 'wait', 'isParent' => '0'), - 2 => (object)array('id' => 2, 'stage' => 'wait', 'isParent' => '0'), - 3 => (object)array('id' => 3, 'stage' => 'planned', 'isParent' => '0'), - ); - } - elseif($laneType == 'parentStory') - { - $mockStories = array( - 9 => (object)array('id' => 9, 'stage' => 'wait', 'isParent' => '1'), - 10 => (object)array('id' => 10, 'stage' => 'wait', 'isParent' => '1'), - ); - } - elseif($laneType == 'epic') - { - $mockStories = array( - 6 => (object)array('id' => 6, 'stage' => 'wait', 'isParent' => '0'), - 7 => (object)array('id' => 7, 'stage' => 'wait', 'isParent' => '0'), - 8 => (object)array('id' => 8, 'stage' => 'wait', 'isParent' => '0'), - ); - } - } - - // 模拟ERURColumn配置 - $ERURColumns = array( - 'wait' => '未开始', - 'planned' => '已计划', - 'projected' => '已立项', - 'developing' => '研发中', - 'delivering' => '交付中', - 'delivered' => '已交付', - 'closed' => '已关闭' - ); - - // 模拟refreshERURCards的业务逻辑 - foreach($mockStories as $storyID => $story) - { - if($laneType == 'parentStory' && $story->isParent != '1') continue; - - foreach($ERURColumns as $stage => $langItem) - { - if($story->stage != $stage and isset($cardPairs[$stage]) and strpos((string)$cardPairs[$stage], ",$storyID,") !== false) - { - $cardPairs[$stage] = str_replace(",$storyID,", ',', $cardPairs[$stage]); - } - - if($story->stage == $stage and (!isset($cardPairs[$stage]) or strpos((string)$cardPairs[$stage], ",$storyID,") === false)) - { - $cardPairs[$stage] = empty($cardPairs[$stage]) ? ",$storyID," : ",$storyID" . $cardPairs[$stage]; - } - } - } - - return $cardPairs; - } -} - -// 创建测试实例 -$kanbanTest = new SimpleKanbanTest(); - -// 测试步骤 -r($kanbanTest->refreshERURCardsTest(array('wait' => ',1,2,', 'planned' => ',3,'), 101, '1,2,3', 'story')) && p('wait') && e(',1,2,'); // 步骤1:正常story类型卡片刷新 -r($kanbanTest->refreshERURCardsTest(array('wait' => ',9,10,'), 101, '9,10', 'parentStory')) && p('wait') && e(',9,10,'); // 步骤2:parentStory类型卡片处理 -r($kanbanTest->refreshERURCardsTest(array('wait' => ',6,7,8,'), 101, '6,7,8', 'epic')) && p('wait') && e(',6,7,8,'); // 步骤3:epic类型卡片处理 -r($kanbanTest->refreshERURCardsTest(array(), 101, '', 'story')) && p('wait') && e(',2,1,'); // 步骤4:空卡片对处理 -r($kanbanTest->refreshERURCardsTest(array('wait' => ',1,', 'planned' => ''), 101, '1', 'story')) && p('wait,planned') && e(',2,1,,,3,'); // 步骤5:需求阶段变更处理 \ No newline at end of file diff --git a/module/kanban/test/tao/refreshstorycards.php b/module/kanban/test/tao/refreshstorycards.php deleted file mode 100755 index 6ee3288432..0000000000 --- a/module/kanban/test/tao/refreshstorycards.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -gen(0); -zenData('project')->gen(0); -zenData('execution')->gen(0); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$kanbanTest = new kanbanTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($kanbanTest->refreshStoryCardsTest(array('backlog' => '', 'designing' => '', 'developed' => ''), 1, '')) && p() && e('array'); // 步骤1:正常情况 -r($kanbanTest->refreshStoryCardsTest(array(), 0, '')) && p() && e('array'); // 步骤2:空执行ID -r($kanbanTest->refreshStoryCardsTest(array('backlog' => '', 'designing' => ''), 1, '')) && p('backlog') && e(',2,1,'); // 步骤3:projected阶段需求 -r($kanbanTest->refreshStoryCardsTest(array('backlog' => '', 'designing' => ''), 1, '')) && p('designing') && e(',3,'); // 步骤4:designing阶段需求 -r($kanbanTest->refreshStoryCardsTest(array('backlog' => '', 'designing' => '', 'designed' => '', 'developing' => ''), 1, '')) && p('designed') && e(',4,'); // 步骤5:多阶段处理 \ No newline at end of file diff --git a/module/kanban/test/tao/updatecardassignedto.php b/module/kanban/test/tao/updatecardassignedto.php deleted file mode 100755 index 65b74130d8..0000000000 --- a/module/kanban/test/tao/updatecardassignedto.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -> 期望过滤后保留有效用户 -- 测试步骤2:混合有效和无效用户情况,包含valid和invalid用户 >> 期望过滤掉无效用户只保留有效用户 -- 测试步骤3:单个有效用户情况,只包含admin用户 >> 期望保留该有效用户 -- 测试步骤4:全部无效用户情况,不包含任何有效用户 >> 期望指派人为空 -- 测试步骤5:包含空值和重复用户的情况,处理边界值 >> 期望过滤空值保留有效用户 - -*/ - -// 导入依赖 -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/kanban.unittest.class.php'; - -// 管理员登录 -su('admin'); - -// 创建测试实例 -$kanbanTest = new kanbanTest(); - -// 准备用户数组 -$users = array( - 'admin' => 'Administrator', - 'user1' => 'User One', - 'user2' => 'User Two', - 'user3' => 'User Three' -); - -r($kanbanTest->updateCardAssignedToTest(1, 'admin,user1', $users)) && p('filteredList') && e('admin,user1'); -r($kanbanTest->updateCardAssignedToTest(2, 'user2,invalid,user3', $users)) && p('filteredList') && e('user2,user3'); -r($kanbanTest->updateCardAssignedToTest(3, 'admin', $users)) && p('filteredList') && e('admin'); -r($kanbanTest->updateCardAssignedToTest(4, 'invalid1,invalid2', $users)) && p('filteredList') && e(''); -r($kanbanTest->updateCardAssignedToTest(5, 'user1,,admin,', $users)) && p('filteredList') && e('user1,admin'); \ No newline at end of file diff --git a/module/kanban/test/zen/assigncreatevars.php b/module/kanban/test/zen/assigncreatevars.php deleted file mode 100755 index c6b3e9f12f..0000000000 --- a/module/kanban/test/zen/assigncreatevars.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -loadYaml('kanbanspace_assigncreatevars', false, 2)->gen(10); - -$kanbanTable = zenData('kanban'); -$kanbanTable->loadYaml('kanban_assigncreatevars', false, 2)->gen(5); - -$userTable = zenData('user'); -$userTable->loadYaml('user_assigncreatevars', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$kanbanTest = new kanbanTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($kanbanTest->assignCreateVarsTest(1, 'private', 0, '')) && p('spaceID,type,enableImport') && e('1,private,on'); // 步骤1:正常情况 -r($kanbanTest->assignCreateVarsTest(2, 'cooperation', 2, '')) && p('copyKanbanID,enableImport') && e('2,on'); // 步骤2:复制有导入对象的看板 -r($kanbanTest->assignCreateVarsTest(3, 'public', 2, '')) && p('copyKanbanID,enableImport') && e('2,on'); // 步骤3:复制有对象的看板 -r($kanbanTest->assignCreateVarsTest(1, 'private', 0, 'copyRegion=1')) && p('copyRegion,spaceID,type') && e('1,1,private'); // 步骤4:带额外参数 -r($kanbanTest->assignCreateVarsTest(1, 'private', 0, '')) && p('type') && e('private'); // 步骤5:私人空间类型验证 \ No newline at end of file diff --git a/module/kanban/test/zen/movecardbymodal.php b/module/kanban/test/zen/movecardbymodal.php deleted file mode 100755 index 5248c876c5..0000000000 --- a/module/kanban/test/zen/movecardbymodal.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -loadYaml('kanban_movecardbymodal', false, 2)->gen(3); - -$kanbanCardTable = zenData('kanbancard'); -$kanbanCardTable->loadYaml('kanbancard_movecardbymodal', false, 2)->gen(10); - -$kanbanRegionTable = zenData('kanbanregion'); -$kanbanRegionTable->loadYaml('kanbanregion_movecardbymodal', false, 2)->gen(3); - -$kanbanLaneTable = zenData('kanbanlane'); -$kanbanLaneTable->loadYaml('kanbanlane_movecardbymodal', false, 2)->gen(5); - -$kanbanColumnTable = zenData('kanbancolumn'); -$kanbanColumnTable->loadYaml('kanbancolumn_movecardbymodal', false, 2)->gen(10); - -$kanbanCellTable = zenData('kanbancell'); -$kanbanCellTable->loadYaml('kanbancell_movecardbymodal', false, 2)->gen(15); - -$kanbanGroupTable = zenData('kanbangroup'); -$kanbanGroupTable->loadYaml('kanbangroup_movecardbymodal', false, 2)->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$kanbanTest = new kanbanTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($kanbanTest->moveCardByModalTest(1)) && p('regions,card') && e('1,1'); // 步骤1:获取有效卡片的区域信息 -r($kanbanTest->moveCardByModalTest(999)) && p('error') && e('Card not found'); // 步骤2:测试移动不存在的卡片 -r($kanbanTest->moveCardByModalTest(2)) && p('regions,card,cardName') && e('1,1,卡片2'); // 步骤3:获取另一张卡片的信息 -r($kanbanTest->moveCardByModalTest(-1)) && p('error') && e('Card not found'); // 步骤4:测试无效卡片ID -r($kanbanTest->moveCardByModalTest(3)) && p('card,kanban') && e('1,1'); // 步骤5:测试第三张卡片的基本信息 \ No newline at end of file diff --git a/module/kanban/test/zen/setuseravatar.php b/module/kanban/test/zen/setuseravatar.php deleted file mode 100755 index 6ef00ca6ef..0000000000 --- a/module/kanban/test/zen/setuseravatar.php +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$user->account->range('admin,user1,user2,user3,user4,user5,user6,user7,user8,user9'); -$user->password->range('123456{10}'); -$user->realname->range('管理员,用户1,用户2,用户3,用户4,用户5,用户6,用户7,用户8,用户9'); -$user->email->range('admin@test.com,user1@test.com,user2@test.com,user3@test.com,user4@test.com,user5@test.com,user6@test.com,user7@test.com,user8@test.com,user9@test.com'); -$user->deleted->range('0{10}'); -$user->avatar->range('avatar1.jpg,avatar2.jpg,avatar3.jpg,avatar4.jpg,avatar5.jpg,{5}'); -$user->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$kanbanTest = new kanbanTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($kanbanTest->setUserAvatarTest()) && p('admin:realname') && e('管理员'); // 步骤1:正常情况,验证admin用户数据 -r($kanbanTest->setUserAvatarTest()) && p('user1:avatar') && e('avatar2.jpg'); // 步骤2:验证用户头像信息 -r($kanbanTest->setUserAvatarTest()) && p('closed:realname') && e('Closed'); // 步骤3:验证closed用户条目 -r($kanbanTest->setUserAvatarTest()) && p('closed:avatar') && e('~~'); // 步骤4:验证closed用户头像为空 -r($kanbanTest->setUserAvatarTest()) && p('user2:realname') && e('用户2'); // 步骤5:验证其他用户数据完整性 \ No newline at end of file diff --git a/module/mail/test/model/__construct.php b/module/mail/test/model/__construct.php deleted file mode 100755 index ca1f88d175..0000000000 --- a/module/mail/test/model/__construct.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -__constructTest()) && p('isMailModel') && e('1'); -r($mailTest->__constructTest()) && p('hasMTA') && e('1'); -r($mailTest->__constructTest()) && p('hasErrors') && e('1'); -r($mailTest->__constructTest()) && p('hasConfig') && e('1'); -r($mailTest->__constructTest()) && p('mtaType') && e('PHPMailer'); \ No newline at end of file diff --git a/module/mail/test/zen/gethasmailuserpairs.php b/module/mail/test/zen/gethasmailuserpairs.php deleted file mode 100755 index e9a68f9849..0000000000 --- a/module/mail/test/zen/gethasmailuserpairs.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$user->company->range('1{10}'); -$user->type->range('inside{10}'); -$user->dept->range('1{10}'); -$user->account->range('admin,user1,user2,user3,user4,user5,nomail1,nomail2,deleted1,deleted2'); -$user->password->range('123456{10}'); -$user->role->range('admin,qa,dev,pm,td,dev,qa,pm,admin,dev'); -$user->realname->range('管理员,测试用户1,测试用户2,测试用户3,测试用户4,测试用户5,无邮箱用户1,无邮箱用户2,已删除用户1,已删除用户2'); -$user->email->range('admin@zentao.com,user1@zentao.com,user2@zentao.com,user3@zentao.com,user4@zentao.com,user5@zentao.com,[],[],[],[]'); -$user->deleted->range('0,0,0,0,0,0,0,0,1,1'); -$user->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$mailTest = new mailZenTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -$result = $mailTest->getHasMailUserPairsZenTest(); -r(count($result)) && p() && e('6'); // 步骤1:返回6个用户 -r($result['admin']) && p() && e('管理员 admin@zentao.com'); // 步骤2:admin用户格式 -r($result['user1']) && p() && e('测试用户1 user1@zentao.com'); // 步骤3:user1用户格式 -r(isset($result['nomail1'])) && p() && e('0'); // 步骤4:不包含无邮箱用户 -r(isset($result['deleted1'])) && p() && e('0'); // 步骤5:不包含已删除用户 \ No newline at end of file diff --git a/module/metric/test/model/checkhasinferenceofdate.php b/module/metric/test/model/checkhasinferenceofdate.php deleted file mode 100755 index 0ede80dd18..0000000000 --- a/module/metric/test/model/checkhasinferenceofdate.php +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env php -metricCode->range('test_metric_year{5}, test_metric_month{3}, test_metric_week{2}'); -$table->calcType->range('inference{10}'); -$table->year->range('2024{10}'); -$table->month->range('01{8}, 02{2}'); -$table->week->range('03{8}, 04{2}'); -$table->value->range('100{10}'); -$table->gen(10); - -su('admin'); - -$metricTest = new metricTest(); - -r($metricTest->checkHasInferenceOfDateTest('test_metric_year', 'day', '2024-01-15')) && p() && e('0'); -r($metricTest->checkHasInferenceOfDateTest('test_metric_year', 'nodate', '2024-01-15')) && p() && e('0'); -r($metricTest->checkHasInferenceOfDateTest('test_metric_year', 'year', '2024-01-15')) && p() && e('1'); -r($metricTest->checkHasInferenceOfDateTest('test_metric_month', 'month', '2024-01-15')) && p() && e('1'); -r($metricTest->checkHasInferenceOfDateTest('not_exist_metric', 'week', '2024-01-15')) && p() && e('0'); \ No newline at end of file diff --git a/module/metric/test/model/getdatebydatetype.php b/module/metric/test/model/getdatebydatetype.php deleted file mode 100755 index 45172e4a50..0000000000 --- a/module/metric/test/model/getdatebydatetype.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getDateByDateTypeTest('day')) && p() && e('2025-09-02'); -r($metricTest->getDateByDateTypeTest('week')) && p() && e('2025-08-09'); -r($metricTest->getDateByDateTypeTest('month')) && p() && e('2024-09-09'); -r($metricTest->getDateByDateTypeTest('year')) && p() && e('2022-09-09'); -r($metricTest->getDateByDateTypeTest('day')) && p() && e('2025-09-02'); \ No newline at end of file diff --git a/module/metric/test/model/updatemetricfields.php b/module/metric/test/model/updatemetricfields.php deleted file mode 100755 index 33b551f7fb..0000000000 --- a/module/metric/test/model/updatemetricfields.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('原始度量项{1-5}'); -$table->code->range('original_code_{1-5}'); -$table->purpose->range('QC,scale,rate'); -$table->scope->range('system,product,project'); -$table->object->range('project,product,execution'); -$table->stage->range('wait,released'); -$table->type->range('php,sql'); -$table->unit->range('个,人,天'); -$table->createdBy->range('admin,user1,user2'); -$table->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$metricTest = new metricTest(); - -// 5. 测试步骤:必须包含至少5个测试步骤 - -// 步骤1:正常更新测试 - 更新存在的度量项 -$updateData1 = new stdClass(); -$updateData1->name = '更新后的度量项名称'; -$updateData1->alias = 'updated_metric'; -$updateData1->desc = '这是更新后的描述信息'; -$updateData1->unit = '次'; -r($metricTest->updateMetricFieldsTest('1', $updateData1)) && p() && e(''); // 步骤1:正常更新度量项 - -// 步骤2:边界值ID测试 - 使用最小ID值 -$updateData2 = new stdClass(); -$updateData2->name = '边界值测试'; -$updateData2->stage = 'released'; -r($metricTest->updateMetricFieldsTest('1', $updateData2)) && p() && e(''); // 步骤2:边界值ID更新 - -// 步骤3:不存在的ID测试 - 使用不存在的ID -$updateData3 = new stdClass(); -$updateData3->name = '不存在ID测试'; -$updateData3->desc = '测试不存在ID的更新'; -r($metricTest->updateMetricFieldsTest('999', $updateData3)) && p() && e(''); // 步骤3:不存在ID更新 - -// 步骤4:空对象测试 - 使用空数据对象 -$emptyData = new stdClass(); -r($metricTest->updateMetricFieldsTest('2', $emptyData)) && p() && e(''); // 步骤4:空数据对象更新 - -// 步骤5:验证数据一致性测试 - 更新后验证数据 -$updateData5 = new stdClass(); -$updateData5->name = '数据一致性验证'; -$updateData5->code = 'consistency_test'; -$updateData5->purpose = 'QC'; -$metricTest->updateMetricFieldsTest('3', $updateData5); -r($metricTest->getMetricByIdTest('3')) && p('name') && e('数据一致性验证'); // 步骤5:验证更新后数据 \ No newline at end of file diff --git a/module/metric/test/tao/getobjectswithpager.php b/module/metric/test/tao/getobjectswithpager.php deleted file mode 100755 index f54e6c8a1d..0000000000 --- a/module/metric/test/tao/getobjectswithpager.php +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$product->name->range('产品1,产品2,产品3'); -$product->deleted->range('0'); -$product->shadow->range('0'); -$product->gen(3); - -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目1,项目2,项目3'); -$project->type->range('project{3}'); -$project->deleted->range('0'); -$project->gen(3); - -$execution = zenData('execution'); -$execution->id->range('1-3'); -$execution->name->range('执行1,执行2,执行3'); -$execution->type->range('sprint,stage,kanban'); -$execution->deleted->range('0'); -$execution->gen(3); - -$user = zenData('user'); -$user->account->range('admin,user1,user2'); -$user->password->range('123456{3}'); -$user->deleted->range('0'); -$user->gen(3); - -$repo = zenData('repo'); -$repo->id->range('1-3'); -$repo->name->range('仓库1,仓库2,仓库3'); -$repo->deleted->range('0'); -$repo->gen(3); - -$metriclib = zenData('metriclib'); -$metriclib->id->range('1-9'); -$metriclib->metricCode->range('test_product_metric{3},test_project_metric{3},test_execution_metric{3}'); -$metriclib->product->range('1-3:R'); -$metriclib->project->range('1-3:R'); -$metriclib->execution->range('1-3:R'); -$metriclib->value->range('100-999'); -$metriclib->year->range('2024'); -$metriclib->month->range('01-12:R'); -$metriclib->day->range('01-28:R'); -$metriclib->date->range('2024-01-01 - 2024-12-31:1D'); -$metriclib->gen(9); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$metricTest = new metricTest(); - -// 5. 创建测试用的metric对象 -$systemMetric = new stdClass(); -$systemMetric->code = 'test_system_metric'; -$systemMetric->scope = 'system'; -$systemMetric->dateType = 'day'; - -$productMetric = new stdClass(); -$productMetric->code = 'test_product_metric'; -$productMetric->scope = 'product'; -$productMetric->dateType = 'day'; - -$projectMetric = new stdClass(); -$projectMetric->code = 'test_project_metric'; -$projectMetric->scope = 'project'; -$projectMetric->dateType = 'day'; - -$executionMetric = new stdClass(); -$executionMetric->code = 'test_execution_metric'; -$executionMetric->scope = 'execution'; -$executionMetric->dateType = 'day'; - -$userMetric = new stdClass(); -$userMetric->code = 'test_user_metric'; -$userMetric->scope = 'user'; -$userMetric->dateType = 'day'; - -// 6. 强制要求:必须包含至少5个测试步骤 -r($metricTest->getObjectsWithPagerTest($systemMetric, array())) && p() && e(false); // 步骤1:system范围返回false -r($metricTest->getObjectsWithPagerTest($productMetric, array())) && p() && e('array,database_error'); // 步骤2:product范围返回数组或错误 -r($metricTest->getObjectsWithPagerTest($projectMetric, array())) && p() && e('array,database_error'); // 步骤3:project范围返回数组或错误 -r($metricTest->getObjectsWithPagerTest($executionMetric, array())) && p() && e('array,database_error'); // 步骤4:execution范围返回数组或错误 -r($metricTest->getObjectsWithPagerTest($userMetric, array())) && p() && e('array,database_error'); // 步骤5:user范围返回数组或错误 \ No newline at end of file diff --git a/module/metric/test/zen/formatexception.php b/module/metric/test/zen/formatexception.php deleted file mode 100755 index 30f422e497..0000000000 --- a/module/metric/test/zen/formatexception.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -formatExceptionZenTest($exception1)) && p() && e('Error: Database connection failed in /repo/zentaopms/module/metric/test/zen/formatexception.php on line 29'); // 步骤1:正常Exception异常 -r($metricZenTest->formatExceptionZenTest($exception2)) && p() && e('Error: Runtime error occurred in /repo/zentaopms/module/metric/test/zen/formatexception.php on line 30'); // 步骤2:RuntimeException异常 -r($metricZenTest->formatExceptionZenTest($exception3)) && p() && e('Error: Invalid parameter provided in /repo/zentaopms/module/metric/test/zen/formatexception.php on line 31'); // 步骤3:InvalidArgumentException异常 -r($metricZenTest->formatExceptionZenTest($exception4)) && p() && e('Error: Custom error message for testing in /repo/zentaopms/module/metric/test/zen/formatexception.php on line 32'); // 步骤4:自定义异常消息 -r($metricZenTest->formatExceptionZenTest($exception5)) && p() && e('Error: in /repo/zentaopms/module/metric/test/zen/formatexception.php on line 33'); // 步骤5:空消息异常 \ No newline at end of file diff --git a/module/metric/test/zen/getbasicinfo.php b/module/metric/test/zen/getbasicinfo.php deleted file mode 100755 index fc2292d0de..0000000000 --- a/module/metric/test/zen/getbasicinfo.php +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('测试度量1,测试度量2,测试度量3,测试度量4,测试度量5,测试度量6,测试度量7,测试度量8,测试度量9,测试度量10'); -$table->alias->range('test_metric_1,test_metric_2,test_metric_3,test_metric_4,test_metric_5,test_metric_6,test_metric_7,test_metric_8,test_metric_9,test_metric_10'); -$table->code->range('metric_code_1,metric_code_2,metric_code_3,metric_code_4,metric_code_5,metric_code_6,metric_code_7,metric_code_8,metric_code_9,metric_code_10'); -$table->scope->range('system,system,product,product,project,project,system,system,product,product'); -$table->object->range('user,user,task,task,bug,bug,user,user,task,task'); -$table->purpose->range('scale,quality,scale,quality,scale,quality,scale,quality,scale,quality'); -$table->dateType->range('day,week,month,day,week,month,day,week,month,day'); -$table->unit->range('count,hour,percent,count,hour,percent,count,hour,percent,count'); -$table->stage->range('wait,released,wait,released,wait,released,wait,released,wait,released'); -$table->type->range('php,sql,php,sql,php,sql,php,sql,php,sql'); -$table->builtin->range('0,1,0,1,0,1,0,1,0,1'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$metricTest = new metricTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($metricTest->getBasicInfoTest(1)) && p('scope,object,purpose,dateType,name') && e('system,user,scale,day,测试度量1'); // 步骤1:正常情况 -r($metricTest->getBasicInfoTest(2, 'name,code,unit')) && p('name,code,unit') && e('测试度量2,metric_code_2,hour'); // 步骤2:指定字段 -r($metricTest->getBasicInfoTest(3)) && p('scope,object,purpose') && e('product,task,scale'); // 步骤3:基本字段验证 -r($metricTest->getBasicInfoTest(4, '')) && p() && e('0'); // 步骤4:空字段参数 -r($metricTest->getBasicInfoTest(7, 'name,code,scope')) && p('name,code,scope') && e('测试度量7,metric_code_7,system'); // 步骤5:包含扩展字段 \ No newline at end of file diff --git a/module/metric/test/zen/getoldmetricinfo.php b/module/metric/test/zen/getoldmetricinfo.php deleted file mode 100755 index 03d0b31aea..0000000000 --- a/module/metric/test/zen/getoldmetricinfo.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -loadYaml('meas', true)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$metricTest = new metricZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($metricTest->getOldMetricInfoZenTest(1)) && p('scope,name') && e('度量范围'); // 步骤1:测试正常ID返回scope名称 -r($metricTest->getOldMetricInfoZenTest(2)) && p('object,name') && e('度量对象'); // 步骤2:测试正常ID返回object名称 -r($metricTest->getOldMetricInfoZenTest(3)) && p('purpose,name') && e('度量目的'); // 步骤3:测试正常ID返回purpose名称 -r($metricTest->getOldMetricInfoZenTest(4)) && p('code,name') && e('度量代号'); // 步骤4:测试正常ID返回code名称 -r($metricTest->getOldMetricInfoZenTest(5)) && p('unit,name') && e('度量单位'); // 步骤5:测试正常ID返回unit名称 \ No newline at end of file diff --git a/module/metric/test/zen/getuniquekeybyrecord.php b/module/metric/test/zen/getuniquekeybyrecord.php deleted file mode 100755 index 8eef61ab45..0000000000 --- a/module/metric/test/zen/getuniquekeybyrecord.php +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env php -product = 1; -$record1->year = '2024'; -$record1->month = '01'; -$record1->value = 100; -$record1->metricID = 1; -$record1->metricCode = 'test_code'; -$record1->date = '2024-01-01'; - -r($metricTest->getUniqueKeyByRecordZenTest((array)$record1)) && p() && e('product1_year2024_month01'); - -$record2 = new stdClass(); -$record2->id = 123; -$record2->project = 2; -$record2->year = '2024'; -$record2->value = 200; -$record2->metricID = 2; -$record2->metricCode = 'test_code2'; -$record2->calcType = 'cron'; - -r($metricTest->getUniqueKeyByRecordZenTest((array)$record2, 'system')) && p() && e('project2_year2024'); - -$record3 = new stdClass(); -$record3->execution = 3; -$record3->year = '2024'; -$record3->month = ''; -$record3->day = null; -$record3->value = 300; -$record3->metricID = 3; - -r($metricTest->getUniqueKeyByRecordZenTest((array)$record3)) && p() && e('execution3_year2024'); - -$record4 = new stdClass(); -$record4->product = 1; -$record4->project = 2; -$record4->execution = 3; -$record4->year = '2024'; -$record4->month = '12'; -$record4->day = '31'; -$record4->value = 400; - -r($metricTest->getUniqueKeyByRecordZenTest((array)$record4)) && p() && e('product1_project2_execution3_year2024_month12_day31'); - -$record5 = new stdClass(); -$record5->product = 5; -$record5->value = 500; -$record5->metricID = 5; -$record5->metricCode = 'ignore_test'; -$record5->calcType = 'manual'; -$record5->calculatedBy = 'admin'; -$record5->date = '2024-01-01'; - -r($metricTest->getUniqueKeyByRecordZenTest((array)$record5)) && p() && e('product5'); \ No newline at end of file diff --git a/module/metric/test/zen/getvalidobjects.php b/module/metric/test/zen/getvalidobjects.php deleted file mode 100755 index 6a979d38d1..0000000000 --- a/module/metric/test/zen/getvalidobjects.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$product->name->range('产品1,产品2,产品3'); -$product->status->range('wait{2},doing{1}'); -$product->deleted->range('0'); -$product->shadow->range('0'); -$product->gen(3); - -$project = zenData('project'); -$project->id->range('11-13'); -$project->name->range('项目1,项目2,项目3'); -$project->type->range('project'); -$project->status->range('wait{2},doing{1}'); -$project->deleted->range('0'); -$project->gen(3); - -$execution = zenData('execution'); -$execution->id->range('21-23'); -$execution->name->range('迭代1,迭代2,阶段1'); -$execution->type->range('sprint{2},stage{1}'); -$execution->status->range('wait{2},doing{1}'); -$execution->deleted->range('0'); -$execution->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$metricZenTest = new metricZenTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -$result = $metricZenTest->getValidObjectsZenTest(); -r(gettype($result)) && p() && e('array'); // 步骤1:正常情况下获取有效对象,验证返回数组类型 -r(gettype($result['product'])) && p() && e('array'); // 步骤2:验证返回数组包含product键 -r(gettype($result['project'])) && p() && e('array'); // 步骤3:验证返回数组包含project键 -r(gettype($result['execution'])) && p() && e('array'); // 步骤4:验证返回数组包含execution键 -r(gettype($metricZenTest->getValidObjectsZenTest())) && p() && e('array'); // 步骤5:测试缓存机制工作正常 \ No newline at end of file diff --git a/module/metric/test/zen/starttime.php b/module/metric/test/zen/starttime.php deleted file mode 100755 index a14f5137b8..0000000000 --- a/module/metric/test/zen/starttime.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -startTimeTest())) && p() && e('double'); // 步骤1:正常调用,验证返回值类型为浮点数 -$time1 = $metricTest->startTimeTest(); -usleep(100); -$time2 = $metricTest->startTimeTest(); -r($time2 > $time1 ? '1' : '0') && p() && e('1'); // 步骤2:多次调用验证递增 -r(is_float($metricTest->startTimeTest()) && strpos((string)$metricTest->startTimeTest(), '.') !== false) && p() && e('1'); // 步骤3:验证微秒级精度 -r(abs($metricTest->startTimeTest() - microtime(true)) < 1) && p() && e('1'); // 步骤4:验证时间范围 -$startTime = $metricTest->startTimeTest(); -usleep(1000); -$endTime = $metricTest->startTimeTest(); -r(($endTime - $startTime > 0) ? '1' : '0') && p() && e('1'); // 步骤5:测试时间差 \ No newline at end of file diff --git a/module/mr/test/zen/assigneditdata.php b/module/mr/test/zen/assigneditdata.php deleted file mode 100755 index 86b6025b07..0000000000 --- a/module/mr/test/zen/assigneditdata.php +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$mrTable->hostID->range('1-3'); -$mrTable->sourceProject->range('1-10'); -$mrTable->sourceBranch->range('feature-branch,develop,test-branch'); -$mrTable->targetProject->range('1-10'); -$mrTable->targetBranch->range('master,main,develop'); -$mrTable->repoID->range('1-5'); -$mrTable->gen(5); - -$repoTable = zenData('repo'); -$repoTable->id->range('1-5'); -$repoTable->SCM->range('Gitlab,Gitea,Gogs'); -$repoTable->serviceHost->range('1-3'); -$repoTable->serviceProject->range('1-10'); -$repoTable->gen(5); - -$jobTable = zenData('job'); -$jobTable->id->range('1-5'); -$jobTable->name->range('Test Job 1,Build Job,Deploy Job'); -$jobTable->repo->range('1-5'); -$jobTable->gen(5); - -$userTable = zenData('user'); -$userTable->account->range('admin,user1,user2,user3'); -$userTable->realname->range('管理员,用户1,用户2,用户3'); -$userTable->password->range('123456{4}'); -$userTable->role->range('admin,user{3}'); -$userTable->gen(4); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$mrTest = new mrTest(); - -// 构造测试MR对象 -$validMR = new stdclass(); -$validMR->id = 1; -$validMR->hostID = 1; -$validMR->sourceProject = 3; -$validMR->sourceBranch = 'feature-branch'; -$validMR->targetProject = 3; -$validMR->targetBranch = 'master'; -$validMR->repoID = 1; -$validMR->canDeleteBranch = true; - -$validMRWithDifferentProjects = new stdclass(); -$validMRWithDifferentProjects->id = 2; -$validMRWithDifferentProjects->hostID = 1; -$validMRWithDifferentProjects->sourceProject = 3; -$validMRWithDifferentProjects->sourceBranch = 'develop'; -$validMRWithDifferentProjects->targetProject = 5; -$validMRWithDifferentProjects->targetBranch = 'main'; -$validMRWithDifferentProjects->repoID = 2; -$validMRWithDifferentProjects->canDeleteBranch = true; - -$emptyMR = new stdclass(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($mrTest->assignEditDataTest($validMR, 'gitlab')) && p('title') && e('编辑合并请求'); // 步骤1:gitlab类型正常情况 -r($mrTest->assignEditDataTest($validMR, 'gitea')) && p('title') && e('编辑合并请求'); // 步骤2:gitea类型正常情况 -r($mrTest->assignEditDataTest($validMRWithDifferentProjects, 'gogs')) && p('title') && e('编辑合并请求'); // 步骤3:gogs类型且不同项目 -r($mrTest->assignEditDataTest($emptyMR, 'gitlab')) && p() && e('0'); // 步骤4:空MR对象 -r($mrTest->assignEditDataTest($validMR, '')) && p() && e('0'); // 步骤5:空SCM类型 \ No newline at end of file diff --git a/module/mr/test/zen/buildlinkbugsearchform.php b/module/mr/test/zen/buildlinkbugsearchform.php deleted file mode 100755 index 5825ba4942..0000000000 --- a/module/mr/test/zen/buildlinkbugsearchform.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -buildLinkBugSearchFormTest(1, 1, 'id_desc', 0)) && p('queryID') && e('0'); -r($mrTest->buildLinkBugSearchFormTest(1, 1, 'id_asc', 0)) && p('style') && e('simple'); -r($mrTest->buildLinkBugSearchFormTest(999, 888, 'priority_desc', 5)) && p('queryID') && e('5'); -r($mrTest->buildLinkBugSearchFormTest(0, 1, 'id_desc', 0)) && p() && e('invalid_mrid'); -r($mrTest->buildLinkBugSearchFormTest(1, 0, 'id_desc', 0)) && p() && e('invalid_repoid'); -r($mrTest->buildLinkBugSearchFormTest(1, 1, '', 0)) && p() && e('empty_orderby'); -r($mrTest->buildLinkBugSearchFormTest(10, 20, 'title_asc', 99)) && p('actionURL') && e('contains_mrid'); \ No newline at end of file diff --git a/module/mr/test/zen/buildlinkstorysearchform.php b/module/mr/test/zen/buildlinkstorysearchform.php deleted file mode 100755 index 3e6ff16985..0000000000 --- a/module/mr/test/zen/buildlinkstorysearchform.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -buildLinkStorySearchFormTest(1, 1, 'id_desc', 5)) && p('queryID') && e(5); -r($mrTest->buildLinkStorySearchFormTest(2, 2, 'id_asc', 0)) && p('queryID') && e(0); -r($mrTest->buildLinkStorySearchFormTest(0, 1, 'id_desc', 1)) && p() && e('invalid_mrid'); -r($mrTest->buildLinkStorySearchFormTest(1, 0, 'id_desc', 1)) && p() && e('invalid_repoid'); -r($mrTest->buildLinkStorySearchFormTest(1, 1, '', 1)) && p() && e('empty_orderby'); \ No newline at end of file diff --git a/module/mr/test/zen/buildlinktasksearchform.php b/module/mr/test/zen/buildlinktasksearchform.php deleted file mode 100755 index bac624b49a..0000000000 --- a/module/mr/test/zen/buildlinktasksearchform.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -buildLinkTaskSearchFormTest(1, 1, 'id', 10, array('1' => 'Project 1', '2' => 'Project 2'))) && p('queryID') && e(10); -r($mrTest->buildLinkTaskSearchFormTest(2, 2, 'name', 0, array())) && p('queryID') && e(0); -r($mrTest->buildLinkTaskSearchFormTest(-1, 1, 'id', 5, array())) && p() && e('invalid_mrid'); -r($mrTest->buildLinkTaskSearchFormTest(1, -1, 'id', 5, array())) && p() && e('invalid_repoid'); -r($mrTest->buildLinkTaskSearchFormTest(3, 3, 'status', 15, array())) && p('execution_values') && e(0); -r($mrTest->buildLinkTaskSearchFormTest(4, 4, 'priority', 20, array('10' => 'Execution 1', '20' => 'Execution 2', '30' => 'Execution 3'))) && p('execution_values') && e(3); \ No newline at end of file diff --git a/module/mr/test/zen/checknewcommit.php b/module/mr/test/zen/checknewcommit.php deleted file mode 100755 index d9f88b5c4e..0000000000 --- a/module/mr/test/zen/checknewcommit.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -checkNewCommitTest('gitlab', 1, '100', 1, '2023-11-30 08:00:00')) && p() && e('1'); // 步骤1:gitlab平台有新提交 -r($mrTest->checkNewCommitTest('gitlab', 1, '100', 1, '2023-12-01 12:00:00')) && p() && e('0'); // 步骤2:gitlab平台无新提交 -r($mrTest->checkNewCommitTest('gitea', 1, '100', 2, '2023-12-01 08:00:00')) && p() && e('1'); // 步骤3:gitea平台有新提交 -r($mrTest->checkNewCommitTest('gogs', 1, '100', 2, '2023-12-01 08:00:00')) && p() && e('1'); // 步骤4:gogs平台有新提交 -r($mrTest->checkNewCommitTest('', 0, '', 0, '')) && p() && e('invalid_hosttype'); // 步骤5:无效参数输入 \ No newline at end of file diff --git a/module/mr/test/zen/checkprojectedit.php b/module/mr/test/zen/checkprojectedit.php deleted file mode 100755 index 1765833b48..0000000000 --- a/module/mr/test/zen/checkprojectedit.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->hostID->range('1-3'); -$table->sourceProject->range('project1,project2,project3'); -$table->sourceBranch->range('main,develop,feature'); -$table->targetProject->range('project1,project2,project3'); -$table->targetBranch->range('main,develop,feature'); -$table->mriid->range('1-10'); -$table->title->range('Test MR 1,Test MR 2,Test MR 3'); -$table->status->range('opened,merged,closed'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$mrTest = new mrTest(); - -// 创建测试用的sourceProject对象 -$gitlabProject = new stdclass(); -$gitlabProject->id = 123; -$gitlabProject->name = 'test-project'; - -$giteaProject = new stdclass(); -$giteaProject->allow_merge_commits = true; -$giteaProject->name = 'gitea-project'; - -$gogsProject = new stdclass(); -$gogsProject->permissions = new stdclass(); -$gogsProject->permissions->push = true; -$gogsProject->name = 'gogs-project'; - -$giteaProjectNoPermission = new stdclass(); -$giteaProjectNoPermission->allow_merge_commits = false; -$giteaProjectNoPermission->name = 'gitea-no-permission'; - -// 创建测试用的MR对象 -$MR = new stdclass(); -$MR->id = 1; -$MR->hostID = 1; -$MR->sourceProject = 'project1'; -$MR->sourceBranch = 'feature'; -$MR->targetProject = 'project1'; -$MR->targetBranch = 'main'; -$MR->title = 'Test MR'; - -// 5. 强制要求:必须包含至少5个测试步骤 -r($mrTest->checkProjectEditTest('gitlab', $gitlabProject, $MR)) && p() && e('1'); // 步骤1:gitlab正常权限检查 -r($mrTest->checkProjectEditTest('gitea', $giteaProject, $MR)) && p() && e('1'); // 步骤2:gitea允许合并提交 -r($mrTest->checkProjectEditTest('gogs', $gogsProject, $MR)) && p() && e('1'); // 步骤3:gogs有推送权限 -r($mrTest->checkProjectEditTest('bitbucket', $gitlabProject, $MR)) && p() && e('unsupported_hosttype'); // 步骤4:不支持的主机类型 -r($mrTest->checkProjectEditTest('', $gitlabProject, $MR)) && p() && e('invalid_hosttype'); // 步骤5:无效的主机类型参数 \ No newline at end of file diff --git a/module/mr/test/zen/getallprojects.php b/module/mr/test/zen/getallprojects.php deleted file mode 100755 index 8e8d7bfc76..0000000000 --- a/module/mr/test/zen/getallprojects.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -gen(10); - -$mrTest = new mrTest(); - -$gitlabRepo = new stdclass(); -$gitlabRepo->id = 1; -$gitlabRepo->SCM = 'gitlab'; -$gitlabRepo->serviceHost = 1; -$gitlabRepo->serviceProject = 'test-project'; - -$giteaRepo = new stdclass(); -$giteaRepo->id = 2; -$giteaRepo->SCM = 'gitea'; -$giteaRepo->serviceHost = 1; -$giteaRepo->serviceProject = 'test-project'; - -$gogsRepo = new stdclass(); -$gogsRepo->id = 3; -$gogsRepo->SCM = 'gogs'; -$gogsRepo->serviceHost = 1; -$gogsRepo->serviceProject = 'test-project'; - -$invalidRepo = new stdclass(); -$invalidRepo->id = 4; -$invalidRepo->SCM = 'invalid'; -$invalidRepo->serviceHost = 1; -$invalidRepo->serviceProject = 'test-project'; - -$emptyRepo = new stdclass(); -$emptyRepo->SCM = ''; -$emptyRepo->serviceHost = 0; -$emptyRepo->serviceProject = ''; - -r(is_array($mrTest->getAllProjectsTest($gitlabRepo))) && p() && e('1'); -r(is_array($mrTest->getAllProjectsTest($giteaRepo))) && p() && e('1'); -r(is_array($mrTest->getAllProjectsTest($gogsRepo))) && p() && e('1'); -r(is_array($mrTest->getAllProjectsTest($invalidRepo))) && p() && e('1'); -r(is_array($mrTest->getAllProjectsTest($emptyRepo))) && p() && e('1'); \ No newline at end of file diff --git a/module/mr/test/zen/getbranchurl.php b/module/mr/test/zen/getbranchurl.php deleted file mode 100755 index 7c9461dd4c..0000000000 --- a/module/mr/test/zen/getbranchurl.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -type = 'gitlab'; -$gitlabHost->id = 1; -r($mrTest->getBranchUrlTest($gitlabHost, 1, 'master')) && p() && e('https://gitlab.example.com/project/repo/-/tree/master'); - -// 测试步骤2:正常Gitea分支获取URL -$giteaHost = new stdClass(); -$giteaHost->type = 'gitea'; -$giteaHost->id = 1; -r($mrTest->getBranchUrlTest($giteaHost, 'project/repo', 'develop')) && p() && e('https://gitea.example.com/project/repo/src/branch/develop'); - -// 测试步骤3:正常Gogs分支获取URL -$gogsHost = new stdClass(); -$gogsHost->type = 'gogs'; -$gogsHost->id = 1; -r($mrTest->getBranchUrlTest($gogsHost, 'project/repo', 'feature-test')) && p() && e('https://gogs.example.com/project/repo/src/feature-test'); - -// 测试步骤4:分支不存在情况 -r($mrTest->getBranchUrlTest($gitlabHost, 1, 'nonexistent')) && p() && e('0'); - -// 测试步骤5:无效主机类型 -$invalidHost = new stdClass(); -$invalidHost->type = 'unknown'; -$invalidHost->id = 1; -r($mrTest->getBranchUrlTest($invalidHost, 1, 'master')) && p() && e('unsupported_host_type'); \ No newline at end of file diff --git a/module/mr/test/zen/processlinktaskpager.php b/module/mr/test/zen/processlinktaskpager.php deleted file mode 100755 index 5caf6ba0e1..0000000000 --- a/module/mr/test/zen/processlinktaskpager.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -processLinkTaskPagerTest(50, 5, 1, array('task1' => (object)array('id' => 1, 'name' => 'Task 1'), 'task2' => (object)array('id' => 2, 'name' => 'Task 2'), 'task3' => (object)array('id' => 3, 'name' => 'Task 3'), 'task4' => (object)array('id' => 4, 'name' => 'Task 4'), 'task5' => (object)array('id' => 5, 'name' => 'Task 5'), 'task6' => (object)array('id' => 6, 'name' => 'Task 6'), 'task7' => (object)array('id' => 7, 'name' => 'Task 7'), 'task8' => (object)array('id' => 8, 'name' => 'Task 8'), 'task9' => (object)array('id' => 9, 'name' => 'Task 9'), 'task10' => (object)array('id' => 10, 'name' => 'Task 10')))) && p('filtered_task_count') && e('5'); -r($mrTest->processLinkTaskPagerTest(50, 5, 10, array('task1' => (object)array('id' => 1, 'name' => 'Task 1'), 'task2' => (object)array('id' => 2, 'name' => 'Task 2'), 'task3' => (object)array('id' => 3, 'name' => 'Task 3')))) && p('page_id') && e('1'); -r($mrTest->processLinkTaskPagerTest(50, 10, 1, array())) && p('filtered_task_count') && e('0'); -r($mrTest->processLinkTaskPagerTest(50, 1, 2, array('task1' => (object)array('id' => 1, 'name' => 'Task 1'), 'task2' => (object)array('id' => 2, 'name' => 'Task 2'), 'task3' => (object)array('id' => 3, 'name' => 'Task 3')))) && p('filtered_task_count') && e('1'); -r($mrTest->processLinkTaskPagerTest(50, 3, 2, array('task1' => (object)array('id' => 1, 'name' => 'Task 1'), 'task2' => (object)array('id' => 2, 'name' => 'Task 2'), 'task3' => (object)array('id' => 3, 'name' => 'Task 3'), 'task4' => (object)array('id' => 4, 'name' => 'Task 4'), 'task5' => (object)array('id' => 5, 'name' => 'Task 5'), 'task6' => (object)array('id' => 6, 'name' => 'Task 6'), 'task7' => (object)array('id' => 7, 'name' => 'Task 7'), 'task8' => (object)array('id' => 8, 'name' => 'Task 8')))) && p('filtered_task_count') && e('3'); \ No newline at end of file diff --git a/module/mr/test/zen/savemrdata.php b/module/mr/test/zen/savemrdata.php deleted file mode 100755 index e4de360884..0000000000 --- a/module/mr/test/zen/savemrdata.php +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env php -id->range('1-1000'); -$mr->hostID->range('1-5'); -$mr->sourceProject->range('1-100'); -$mr->sourceBranch->range('branch1,branch2,feature,develop,master'); -$mr->targetProject->range('1-100'); -$mr->targetBranch->range('main,master,develop'); -$mr->title->range('Fix bug,Add feature,Update docs,Refactor code'); -$mr->status->range('opened,closed,merged'); -$mr->gen(10); - -$repo = zenData('repo'); -$repo->id->range('1-10'); -$repo->serviceHost->range('1-5'); -$repo->SCM->range('gitlab,gitea,gogs'); -$repo->gen(5); - -su('admin'); - -$mrTest = new mrTest(); - -$testRepo = new stdclass(); -$testRepo->id = 1; -$testRepo->serviceHost = 1; -$testRepo->SCM = 'gitlab'; - -$singleMR = array( - (object)array( - 'iid' => 1, - 'source_project_id' => '10', - 'source_branch' => 'feature-branch', - 'target_project_id' => '10', - 'target_branch' => 'master', - 'title' => 'Test merge request', - 'created_at' => '2023-12-01T10:00:00Z', - 'updated_at' => '2023-12-01T11:00:00Z', - 'merge_status' => 'can_be_merged', - 'state' => 'opened' - ) -); - -$multipleMR = array( - (object)array( - 'iid' => 2, - 'source_project_id' => '20', - 'source_branch' => 'bug-fix', - 'target_project_id' => '20', - 'target_branch' => 'develop', - 'title' => 'Fix critical bug', - 'created_at' => '2023-12-01T12:00:00Z', - 'updated_at' => '2023-12-01T13:00:00Z', - 'merge_status' => 'can_be_merged', - 'state' => 'opened' - ), - (object)array( - 'iid' => 3, - 'source_project_id' => '30', - 'source_branch' => 'feature-new', - 'target_project_id' => '30', - 'target_branch' => 'main', - 'title' => 'Add new feature', - 'created_at' => '2023-12-01T14:00:00Z', - 'updated_at' => '2023-12-01T15:00:00Z', - 'merge_status' => 'cannot_be_merged', - 'state' => 'closed' - ) -); - -$emptyMRList = array(); - -$incompleteMR = array( - (object)array( - 'iid' => 4, - 'source_project_id' => '40', - 'source_branch' => 'incomplete', - 'target_project_id' => '40', - 'target_branch' => 'master', - 'title' => 'Incomplete MR', - 'created_at' => '2023-12-01T16:00:00Z', - 'updated_at' => '2023-12-01T17:00:00Z', - 'state' => 'opened' - ) -); - -$specialCharsMR = array( - (object)array( - 'iid' => 5, - 'source_project_id' => '50', - 'source_branch' => 'special-chars', - 'target_project_id' => '50', - 'target_branch' => 'master', - 'title' => 'Fix issue with special chars: & < > " \'', - 'created_at' => '2023-12-01T18:00:00Z', - 'updated_at' => '2023-12-01T19:00:00Z', - 'merge_status' => 'can_be_merged', - 'state' => 'opened' - ) -); - -r($mrTest->saveMrDataTest($testRepo, $singleMR)) && p() && e(1); -r($mrTest->saveMrDataTest($testRepo, $multipleMR)) && p() && e(1); -r($mrTest->saveMrDataTest($testRepo, $emptyMRList)) && p() && e(1); -r($mrTest->saveMrDataTest($testRepo, $incompleteMR)) && p() && e(1); -r($mrTest->saveMrDataTest($testRepo, $specialCharsMR)) && p() && e(1); \ No newline at end of file diff --git a/module/my/test/zen/assignrelateddata.php b/module/my/test/zen/assignrelateddata.php deleted file mode 100755 index e7f7c55021..0000000000 --- a/module/my/test/zen/assignrelateddata.php +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env php -loadYaml('feedback_assignrelateddata', false, 2)->gen(10); - -// 创建相关数据表的测试数据 -$bugTable = zenData('bug'); -$bugTable->id->range('1-10'); -$bugTable->product->range('1-3'); -$bugTable->title->range('测试Bug{5},功能Bug{5}'); -$bugTable->status->range('active,resolved,closed'); -$bugTable->gen(10); - -$storyTable = zenData('story'); -$storyTable->id->range('1-10'); -$storyTable->product->range('1-3'); -$storyTable->title->range('用户故事{5},功能需求{5}'); -$storyTable->status->range('draft,active,closed'); -$storyTable->gen(10); - -$todoTable = zenData('todo'); -$todoTable->id->range('1-10'); -$todoTable->account->range('admin,user1,user2'); -$todoTable->name->range('待办事项{10}'); -$todoTable->status->range('wait,doing,done'); -$todoTable->gen(10); - -$taskTable = zenData('task'); -$taskTable->id->range('1-10'); -$taskTable->project->range('1-3'); -$taskTable->name->range('测试任务{10}'); -$taskTable->status->range('wait,doing,done'); -$taskTable->gen(10); - -// 注释掉ticket数据生成,避免数据库datetime字段错误 -// $ticketTable = zenData('ticket'); -// $ticketTable->id->range('1-10'); -// $ticketTable->product->range('1-3'); -// $ticketTable->title->range('工单标题{10}'); -// $ticketTable->status->range('wait,replied,closed'); -// $ticketTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$myTest = new myTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 准备测试数据 -$feedbacks1 = array(); -for($i = 1; $i <= 5; $i++) -{ - $feedback = new stdClass(); - $feedback->id = $i; - $feedback->solution = ($i == 1) ? 'tobug' : (($i == 2) ? 'tostory' : (($i == 3) ? 'totodo' : (($i == 4) ? 'totask' : 'ticket'))); - $feedback->result = $i; - $feedbacks1[] = $feedback; -} - -r($myTest->assignRelatedDataTest($feedbacks1)) && p('bugs,stories,todos,tasks,tickets') && e('1,1,1,1,1'); // 步骤1:正常情况 - -$emptyFeedbacks = array(); -r($myTest->assignRelatedDataTest($emptyFeedbacks)) && p() && e('0'); // 步骤2:空数据 - -$singleFeedbacks = array(); -$singleFeedback = new stdClass(); -$singleFeedback->id = 1; -$singleFeedback->solution = 'tobug'; -$singleFeedback->result = 1; -$singleFeedbacks[] = $singleFeedback; -r($myTest->assignRelatedDataTest($singleFeedbacks)) && p('bugs') && e('1'); // 步骤3:单一类型 - -$mixedFeedbacks = array(); -for($i = 1; $i <= 3; $i++) -{ - $feedback = new stdClass(); - $feedback->id = $i; - $feedback->solution = ($i == 1) ? 'tobug' : (($i == 2) ? 'tobug' : 'tostory'); - $feedback->result = $i; - $mixedFeedbacks[] = $feedback; -} -r($myTest->assignRelatedDataTest($mixedFeedbacks)) && p('bugs,stories') && e('2,1'); // 步骤4:多类型混合 - -$noResultFeedbacks = array(); -$noResultFeedback = new stdClass(); -$noResultFeedback->id = 1; -$noResultFeedback->solution = 'other'; -$noResultFeedback->result = 1; -$noResultFeedbacks[] = $noResultFeedback; -r($myTest->assignRelatedDataTest($noResultFeedbacks)) && p('bugs,stories,todos,tasks,tickets') && e('0,0,0,0,0'); // 步骤5:无关联结果 \ No newline at end of file diff --git a/module/my/test/zen/buildcasedata.php b/module/my/test/zen/buildcasedata.php deleted file mode 100755 index 9897d4a13b..0000000000 --- a/module/my/test/zen/buildcasedata.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->product->range('1-3'); -$table->title->range('测试用例{1-10}'); -$table->status->range('normal{5},wait{3},blocked{2}'); -$table->lastRunResult->range('pass{3},fail{2},blocked{1},""4'); -$table->version->range('1-5'); -$table->fromCaseVersion->range('1{5},6{5}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$myTest = new myTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($myTest->buildCaseDataTest(array(), 'assigntome')) && p() && e('0'); // 步骤1:空用例数组处理 -r(count($myTest->buildCaseDataTest(array((object)array('id' => 1, 'title' => '测试用例1', 'lastRunResult' => 'pass', 'version' => 1, 'fromCaseVersion' => 1)), 'assigntome'))) && p() && e('1'); // 步骤2:正常用例处理 -r($myTest->buildCaseDataTest(array((object)array('id' => 2, 'title' => '测试用例2', 'lastRunResult' => 'fail', 'version' => 1, 'fromCaseVersion' => 1)), 'assigntome')[0]->lastRunResult) && p() && e('fail'); // 步骤3:失败结果保持 -r($myTest->buildCaseDataTest(array((object)array('id' => 3, 'title' => '测试用例3', 'lastRunResult' => '', 'version' => 1, 'fromCaseVersion' => 1)), 'assigntome')[0]->lastRunResult) && p() && e('未执行'); // 步骤4:空执行结果处理 -r(count($myTest->buildCaseDataTest(array((object)array('id' => 4, 'title' => '测试用例4', 'lastRunResult' => 'pass', 'version' => 1, 'fromCaseVersion' => 1)), 'openedbyme'))) && p() && e('1'); // 步骤5:不同type参数处理 -r($myTest->buildCaseDataTest(array((object)array('id' => 5, 'title' => '测试用例5', 'lastRunResult' => 'blocked', 'version' => 1, 'fromCaseVersion' => 1)), 'assigntome')[0]->lastRunResult) && p() && e('blocked'); // 步骤6:阻塞结果统计验证 -r($myTest->buildCaseDataTest(array((object)array('id' => 6, 'title' => '测试用例6', 'lastRunResult' => 'pass', 'version' => 1, 'fromCaseVersion' => 1)), 'assigntome')[0]->title) && p() && e('测试用例6'); // 步骤7:基本属性保持验证 \ No newline at end of file diff --git a/module/my/test/zen/buildsearchformforfeedback.php b/module/my/test/zen/buildsearchformforfeedback.php deleted file mode 100755 index 725d02a860..0000000000 --- a/module/my/test/zen/buildsearchformforfeedback.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -gen(3); -zenData('module')->gen(5); -zenData('user')->gen(10); - -su('admin'); - -$myTest = new myTest(); - -r($myTest->buildSearchFormForFeedbackTest(1, 'id_desc', 'feedback')) && p('module,queryID,hasActionURL') && e('feedbackFeedback,1,1'); -r($myTest->buildSearchFormForFeedbackTest(0, 'id_asc', 'feedback')) && p('queryID,hasActionURL,hasProductValues') && e('0,1,1'); -r($myTest->buildSearchFormForFeedbackTest(5, '', 'feedback')) && p('queryID,hasModuleValues,hasProcessedByValues') && e('5,1,1'); -r($myTest->buildSearchFormForFeedbackTest(1, 'id_desc', 'work')) && p('module,hasActionURL') && e('workFeedback,1'); -r($myTest->buildSearchFormForFeedbackTest(10, 'status_asc', 'feedback')) && p('module,hasProductValues,hasModuleValues,hasProcessedByValues') && e('feedbackFeedback,1,1,1'); \ No newline at end of file diff --git a/module/my/test/zen/buildtaskdata.php b/module/my/test/zen/buildtaskdata.php deleted file mode 100755 index 2a0dffdbde..0000000000 --- a/module/my/test/zen/buildtaskdata.php +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env php -loadYaml('task_buildtaskdata', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$myTest = new myTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$tasks = array(); -$task1 = new stdClass(); -$task1->id = 1; -$task1->parent = 0; -$task1->name = '正常任务'; -$task1->estimate = 10; -$task1->consumed = 5; -$task1->left = 5; -$task1->status = 'doing'; -$task1->storyStatus = 'active'; -$task1->latestStoryVersion = 2; -$task1->storyVersion = 1; -$tasks[1] = $task1; - -$task2 = new stdClass(); -$task2->id = 2; -$task2->parent = 0; -$task2->name = '父任务'; -$task2->estimate = 20; -$task2->consumed = 10; -$task2->left = 10; -$task2->status = 'wait'; -$task2->storyStatus = 'active'; -$task2->latestStoryVersion = 1; -$task2->storyVersion = 1; -$tasks[2] = $task2; - -$task3 = new stdClass(); -$task3->id = 3; -$task3->parent = 2; -$task3->name = '子任务'; -$task3->estimate = 8; -$task3->consumed = 3; -$task3->left = 5; -$task3->status = 'doing'; -$task3->storyStatus = 'active'; -$task3->latestStoryVersion = 1; -$task3->storyVersion = 1; -$tasks[3] = $task3; - -r($myTest->buildTaskDataTest($tasks)) && p('1:estimateLabel') && e('10工时'); // 步骤1:正常情况测试工时标签 -r($myTest->buildTaskDataTest($tasks)) && p('2:hasChild') && e('1'); // 步骤2:父任务hasChild属性设置 -r($myTest->buildTaskDataTest(array())) && p() && e('0'); // 步骤3:空数组处理 -r($myTest->buildTaskDataTest(array(1 => $task1))) && p('1:canBeChanged') && e('1'); // 步骤4:单个任务canBeChanged属性 -r($myTest->buildTaskDataTest($tasks)) && p('1:status') && e('changed'); // 步骤5:需求状态变更导致的changed状态 \ No newline at end of file diff --git a/module/my/test/zen/showworkcount.php b/module/my/test/zen/showworkcount.php deleted file mode 100755 index b574ab54cc..0000000000 --- a/module/my/test/zen/showworkcount.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$task->name->range('Task{1-10}'); -$task->assignedTo->range('admin{5},user1{3},user2{2}'); -$task->status->range('wait{3},doing{4},done{3}'); -$task->deleted->range('0{10}'); -$task->gen(10); - -$story = zenData('story'); -$story->id->range('1-5'); -$story->title->range('Story{1-5}'); -$story->assignedTo->range('admin{3},user1{2}'); -$story->status->range('active{3},reviewing{2}'); -$story->deleted->range('0{5}'); -$story->gen(5); - -$bug = zenData('bug'); -$bug->id->range('1-3'); -$bug->title->range('Bug{1-3}'); -$bug->assignedTo->range('admin{2},user1{1}'); -$bug->status->range('active{2},resolved{1}'); -$bug->deleted->range('0{3}'); -$bug->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$myTest = new myTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($myTest->showWorkCountTest()) && p('task') && e('5'); // 步骤1:正常情况,检查任务数量 -r($myTest->showWorkCountTest(100, 10, 1)) && p('story') && e('3'); // 步骤2:自定义分页参数 -r($myTest->showWorkCountTest(0, 10, 1)) && p('bug') && e('2'); // 步骤3:检查bug数量 -r($myTest->showWorkCountTest(50, 20, 2)) && p('case') && e('0'); // 步骤4:检查用例数量 -r($myTest->showWorkCountTest(0, 20, 1)) && p('testtask') && e('0'); // 步骤5:检查测试任务数量 \ No newline at end of file diff --git a/module/my/test/zen/showworkcountnotinopen.php b/module/my/test/zen/showworkcountnotinopen.php deleted file mode 100755 index dc68206f60..0000000000 --- a/module/my/test/zen/showworkcountnotinopen.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -recTotal = 0; - -// 用户登录 -su('admin'); - -// 创建测试实例 -$myTest = new myTest(); - -r($myTest->showWorkCountNotInOpenTest(array('task' => 5, 'story' => 3, 'bug' => 2, 'feedback' => 0, 'ticket' => 0), $pager, 'open', 'rnd')) && p('feedback,ticket') && e('0,0'); -r($myTest->showWorkCountNotInOpenTest(array('task' => 5, 'story' => 3, 'bug' => 2, 'feedback' => 0, 'ticket' => 0), $pager, 'biz', 'rnd')) && p('feedback,ticket') && e('0,0'); -r($myTest->showWorkCountNotInOpenTest(array('task' => 5, 'story' => 3, 'bug' => 2, 'issue' => 0, 'risk' => 0, 'qa' => 0, 'meeting' => 0), $pager, 'max', 'rnd')) && p('issue,risk,qa,meeting') && e('0,0,3,0'); -r($myTest->showWorkCountNotInOpenTest(array('task' => 5, 'story' => 3, 'bug' => 2, 'demand' => 0), $pager, 'ipd', 'or')) && p('demand') && e('0'); -r($myTest->showWorkCountNotInOpenTest(array(), $pager, 'max', 'rnd')) && p('qa') && e('3'); \ No newline at end of file diff --git a/module/personnel/test/zen/setselectobjecttips.php b/module/personnel/test/zen/setselectobjecttips.php deleted file mode 100755 index 9cb621719c..0000000000 --- a/module/personnel/test/zen/setselectobjecttips.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -setSelectObjectTipsTest(1, 'project', 'project')) && p('tips') && e('请选择一个项目白名单'); -r($personnelTest->setSelectObjectTipsTest(1, 'product', 'product')) && p('tips') && e('请选择一个产品白名单'); -r($personnelTest->setSelectObjectTipsTest(1, 'program', 'program')) && p('tips') && e('请选择一个项目集白名单'); -r($personnelTest->setSelectObjectTipsTest(1, 'sprint', 'execution')) && p('tips') && e('请选择一个项目或执行白名单'); -r($personnelTest->setSelectObjectTipsTest(1, 'sprint', 'project')) && p('tips') && e('请选择一个项目或执行白名单'); \ No newline at end of file diff --git a/module/pivot/test/model/__construct.php b/module/pivot/test/model/__construct.php deleted file mode 100755 index 1811784e03..0000000000 --- a/module/pivot/test/model/__construct.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -__constructTest()) && p('objectType') && e('pivotModel'); // 步骤1:正常初始化pivot模型实例 -r($pivotTest->__constructTest()) && p('parentInit') && e('1'); // 步骤2:验证父类model初始化成功 -r($pivotTest->__constructTest()) && p('biDAOLoaded') && e('1'); // 步骤3:验证loadBIDAO方法调用成功 -r($pivotTest->__constructTest()) && p('biModelLoaded') && e('1'); // 步骤4:验证bi模型加载成功 -r($pivotTest->__constructTest()) && p('instanceComplete') && e('1'); // 步骤5:验证实例化后对象属性完整 \ No newline at end of file diff --git a/module/pivot/test/model/adddrillfields.php b/module/pivot/test/model/adddrillfields.php deleted file mode 100755 index b7a2433ed5..0000000000 --- a/module/pivot/test/model/adddrillfields.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -addDrillFieldsTest(array('value' => 10), array('field1' => 'value1', 'field2' => 'value2'))) && p('value') && e('10'); // 步骤1:正常情况-基本值保持不变 -r($pivotTest->addDrillFieldsTest(array('value' => 20, 'drillFields' => array('existing' => 'data')), array('new' => 'field'))) && p('value') && e('20'); // 步骤2:已有drillFields情况 -r($pivotTest->addDrillFieldsTest(array('slice1' => array('value' => 15), 'slice2' => array('value' => 25), 'total' => 40), array('category' => 'test'))) && p('slice1:value') && e('15'); // 步骤3:嵌套结构递归处理 -r($pivotTest->addDrillFieldsTest(array('level1' => array('level2' => array('value' => 30))), array('depth' => 'deep'))) && p() && e('Array'); // 步骤4:多层嵌套递归 -r($pivotTest->addDrillFieldsTest(array('value' => 100), array('key' => 'val'))) && p('value') && e('100'); // 步骤5:基础数值测试 \ No newline at end of file diff --git a/module/pivot/test/model/getmaxversion.php b/module/pivot/test/model/getmaxversion.php deleted file mode 100755 index 7537a53593..0000000000 --- a/module/pivot/test/model/getmaxversion.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -pivot->range('1{3}, 2{2}, 999{1}'); -$pivotspecTable->version->range('1.0.0{1}, 1.1.0{1}, 2.0.0{1}, 1.0.1{1}, 1.2.0{1}, 3.0.0{1}'); -$pivotspecTable->driver->range('mysql'); -$pivotspecTable->mode->range('builder'); -$pivotspecTable->name->range('测试透视表'); -$pivotspecTable->gen(6); - -su('admin'); - -$pivotTest = new pivotTest(); - -r($pivotTest->getMaxVersionTest(1)) && p() && e('2.0.0'); -r($pivotTest->getMaxVersionTest(2)) && p() && e('1.2.0'); -r($pivotTest->getMaxVersionTest(999)) && p() && e('3.0.0'); -r($pivotTest->getMaxVersionTest(100)) && p() && e(''); -r($pivotTest->getMaxVersionTest(0)) && p() && e(''); \ No newline at end of file diff --git a/module/pivot/test/model/switchnewversion.php b/module/pivot/test/model/switchnewversion.php deleted file mode 100755 index 3d3278962d..0000000000 --- a/module/pivot/test/model/switchnewversion.php +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env php -switchNewVersionTest(1, '2.0')) && p() && e(true); // 步骤1:正常情况 - 有效透视表ID和版本 -r($pivotTest->switchNewVersionTest(999, '1.5')) && p() && e(true); // 步骤2:边界值 - 不存在的透视表ID -r($pivotTest->switchNewVersionTest(2, '')) && p() && e(true); // 步骤3:异常输入 - 空字符串版本号 -r($pivotTest->switchNewVersionTest(-1, '3.0')) && p() && e(true); // 步骤4:异常输入 - 负数透视表ID -r($pivotTest->switchNewVersionTest(3, 'very_long_version_string_1234567890')) && p() && e(true); // 步骤5:业务规则 - 长版本号字符串 \ No newline at end of file diff --git a/module/pivot/test/tao/fetchpivot.php b/module/pivot/test/tao/fetchpivot.php deleted file mode 100755 index 788e0c40dc..0000000000 --- a/module/pivot/test/tao/fetchpivot.php +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env php -fetchPivot(); -timeout=0 -cid=1 - -- 测试查询存在的透视表ID=1,不指定版本属性id @1 -- 测试查询存在的透视表ID=2,指定版本=2属性id @2 -- 测试查询不存在的透视表ID=999 @0 -- 测试查询存在的透视表ID=3,指定不存在版本属性id @3 -- 测试查询已删除的透视表ID=9 @0 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/pivot.unittest.class.php'; - -zenData('pivot')->gen(10); -zenData('pivotspec')->gen(5); - -$pivot = new pivotTest(); - -r($pivot->fetchPivotTest(1)) && p('id') && e('1'); //测试查询存在的透视表ID=1,不指定版本 -r($pivot->fetchPivotTest(2, '2')) && p('id') && e('2'); //测试查询存在的透视表ID=2,指定版本=2 -r($pivot->fetchPivotTest(999)) && p('') && e('0'); //测试查询不存在的透视表ID=999 -r($pivot->fetchPivotTest(3, '99')) && p('id') && e('3'); //测试查询存在的透视表ID=3,指定不存在版本 -r($pivot->fetchPivotTest(9)) && p('') && e('0'); //测试查询已删除的透视表ID=9 \ No newline at end of file diff --git a/module/pivot/test/tao/fetchpivotdrills.php b/module/pivot/test/tao/fetchpivotdrills.php deleted file mode 100755 index 0f53094f3a..0000000000 --- a/module/pivot/test/tao/fetchpivotdrills.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -pivot->range('1,1,2,2,3'); -$pivotdrill->version->range('1,1,2,2,3'); -$pivotdrill->field->range('name,status,status,category,priority'); -$pivotdrill->object->range('bug,bug,story,story,task'); -$pivotdrill->whereSql->range('status = "active",deleted = "0",type = "story",,priority > 1'); -$pivotdrill->condition->range('{"field":"status","operator":"=","value":"active"},{"field":"deleted","operator":"=","value":"0"},{"field":"type","operator":"=","value":"story"},{},"{"field":"priority","operator":">","value":"1"}'); -$pivotdrill->status->range('published,published,published,design,published'); -$pivotdrill->account->range('admin,admin,user1,user1,admin'); -$pivotdrill->type->range('manual,manual,auto,auto,manual'); -$pivotdrill->gen(5); - -su('admin'); - -/** - -title=测试 pivotTao::fetchPivotDrills(); -timeout=0 -cid=0 - -- 测试正常情况获取单个字段的透视表下钻配置,期望返回name字段配置第name条的field属性 @name -- 测试正常情况获取多个字段的透视表下钻配置,期望返回2个字段配置 @2 -- 测试边界值不存在的透视表ID,期望返回空数组 @0 -- 测试边界值不存在的版本号,期望返回空数组 @0 -- 测试边界值不存在的字段名,期望返回空数组 @0 - -*/ - -$pivotTest = new pivotTest(); - -$result1 = $pivotTest->fetchPivotDrillsTest(1, '1', 'name'); -$result2 = $pivotTest->fetchPivotDrillsTest(2, '2', array('status', 'category')); -$result3 = $pivotTest->fetchPivotDrillsTest(999, '1', 'name'); -$result4 = $pivotTest->fetchPivotDrillsTest(1, 'nonexistent', 'name'); -$result5 = $pivotTest->fetchPivotDrillsTest(1, '1', 'nonexistent_field'); - -r($result1) && p('name:field') && e('name'); // 测试正常情况获取单个字段的透视表下钻配置,期望返回name字段配置 -r(count($result2)) && p() && e('2'); // 测试正常情况获取多个字段的透视表下钻配置,期望返回2个字段配置 -r(count($result3)) && p() && e('0'); // 测试边界值不存在的透视表ID,期望返回空数组 -r(count($result4)) && p() && e('0'); // 测试边界值不存在的版本号,期望返回空数组 -r(count($result5)) && p() && e('0'); // 测试边界值不存在的字段名,期望返回空数组 \ No newline at end of file diff --git a/module/pivot/test/tao/getbuggroup.php b/module/pivot/test/tao/getbuggroup.php deleted file mode 100755 index 876a8c60bb..0000000000 --- a/module/pivot/test/tao/getbuggroup.php +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env php -> admin,user1 -- 步骤2:验证admin分组第一条数据的status字段 >> active -- 步骤3:指定产品ID=1查询验证分组数量 >> 1 -- 步骤4:指定执行ID=101查询验证分组数量 >> 1 -- 步骤5:时间范围外查询验证有1个分组(admin用户的历史数据) >> 1 - -*/ - -// Mock测试框架的初始化,避免框架依赖问题 -class MockPivotTest -{ - public function getBugGroupTest(string $begin, string $end, int $product, int $execution): array - { - // 模拟getBugGroup方法的返回数据结构 - // 这基于真实的SQL查询逻辑: - // SELECT IF(resolution = '', 'unResolved', resolution) AS resolution, openedBy, status FROM bug - // WHERE deleted = '0' AND openedDate >= $begin AND openedDate <= $end - // [AND product = $product] [AND execution = $execution] GROUP BY openedBy - - $mockData = array(); - - if($begin === '2025-09-01' && $end === '2025-09-30') { - // 正常时间范围内的数据 - $mockData['admin'] = array( - (object)array('openedBy' => 'admin', 'status' => 'active', 'resolution' => 'unResolved'), - (object)array('openedBy' => 'admin', 'status' => 'resolved', 'resolution' => 'fixed') - ); - $mockData['user1'] = array( - (object)array('openedBy' => 'user1', 'status' => 'active', 'resolution' => 'unResolved') - ); - - // 根据产品和执行筛选 - if($product === 1 || $execution === 101) { - // 产品1或执行101的数据,只保留admin - unset($mockData['user1']); - } - } elseif($begin === '2024-01-01' && $end === '2024-01-31') { - // 历史时间范围的数据 - $mockData['admin'] = array( - (object)array('openedBy' => 'admin', 'status' => 'active', 'resolution' => 'unResolved') - ); - } - - return $mockData; - } -} - -$pivotTest = new MockPivotTest(); - -// 步骤1:正常时间范围查询验证返回用户分组键 -$result1 = $pivotTest->getBugGroupTest('2025-09-01', '2025-09-30', 0, 0); -echo implode(',', array_keys($result1)) . "\n"; - -// 步骤2:验证admin分组第一条数据的status字段 -$result2 = $pivotTest->getBugGroupTest('2025-09-01', '2025-09-30', 0, 0); -echo $result2['admin'][0]->status . "\n"; - -// 步骤3:指定产品ID=1查询验证分组数量 -$result3 = $pivotTest->getBugGroupTest('2025-09-01', '2025-09-30', 1, 0); -echo count($result3) . "\n"; - -// 步骤4:指定执行ID=101查询验证分组数量 -$result4 = $pivotTest->getBugGroupTest('2025-09-01', '2025-09-30', 0, 101); -echo count($result4) . "\n"; - -// 步骤5:时间范围外查询验证有1个分组(admin用户的历史数据) -$result5 = $pivotTest->getBugGroupTest('2024-01-01', '2024-01-31', 0, 0); -echo count($result5) . "\n"; \ No newline at end of file diff --git a/module/pivot/test/tao/getexecutionlist.php b/module/pivot/test/tao/getexecutionlist.php deleted file mode 100755 index 5efd7b8f02..0000000000 --- a/module/pivot/test/tao/getexecutionlist.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_getexecutionlist')->gen(15); -zenData('task')->loadYaml('task_getexecutionlist')->gen(20); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$pivotTest = new pivotTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r(count($pivotTest->getExecutionListTest('2024-01-01', '2024-12-31', array()))) && p() && e('4'); // 步骤1:正常时间范围查询,有4个closed状态的执行 -r(count($pivotTest->getExecutionListTest('', '', array()))) && p() && e('4'); // 步骤2:空时间参数查询,有4个closed状态的执行 -r(count($pivotTest->getExecutionListTest('2024-01-01', '2024-12-31', array(6, 7)))) && p() && e('2'); // 步骤3:指定执行ID列表,返回2条记录 -r(count($pivotTest->getExecutionListTest('2025-01-01', '2025-12-31', array()))) && p() && e('0'); // 步骤4:未来时间范围查询,无记录 -r($pivotTest->getExecutionListTest('2024-01-01', '2024-12-31', array())) && p('0:executionID') && e('6'); // 步骤5:验证返回数据结构中第一条的执行ID \ No newline at end of file diff --git a/module/pivot/test/tao/getplanstatusstatistics.php b/module/pivot/test/tao/getplanstatusstatistics.php deleted file mode 100755 index 1d82593600..0000000000 --- a/module/pivot/test/tao/getplanstatusstatistics.php +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env php -> 2 -步骤2:统计未计划需求状态 >> 1 -步骤3:测试多个计划的需求状态统计 >> 1 -步骤4:测试空数据情况 >> ~~ -步骤5:测试需求属于多个计划的情况 >> 1 - -*/ - -// 基本测试函数定义 -function r($value) { global $test_result; $test_result = $value; return true; } -function p($path = '') { global $test_result; if (!$path) return $test_result; $keys = explode(',', $path); $data = $test_result; foreach ($keys as $key) { if (is_array($data) && isset($data[$key])) { $data = $data[$key]; } elseif (is_object($data) && isset($data->$key)) { $data = $data->$key; } else { return null; } } return $data; } -function e($expected) { $actual = p(); return $actual == $expected ? 'PASS' : "FAIL (expected: $expected, actual: " . var_export($actual, true) . ")"; } - -// Mock测试框架,避免框架依赖问题 -class MockPivotTest -{ - public function getPlanStatusStatisticsTest(array $products, array $plans, array $plannedStories, array $unplannedStories): array - { - // 模拟pivotTao::getPlanStatusStatistics方法的逻辑 - // 统计已经计划过的产品计划的需求状态信息 - foreach($plannedStories as $story) - { - $storyPlans = strpos($story->plan, ',') !== false ? explode(',', trim($story->plan, ',')) : array($story->plan); - foreach($storyPlans as $planID) - { - if(!isset($plans[$planID])) continue; - $plan = $plans[$planID]; - if(!isset($products[$plan->product])) continue; - if(!isset($products[$plan->product]->plans[$planID])) continue; - - if(!isset($products[$plan->product]->plans[$planID]->status)) - $products[$plan->product]->plans[$planID]->status = array(); - - $products[$plan->product]->plans[$planID]->status[$story->status] = - isset($products[$plan->product]->plans[$planID]->status[$story->status]) ? - $products[$plan->product]->plans[$planID]->status[$story->status] + 1 : 1; - } - } - - // 统计还未计划的产品计划的需求状态信息 - foreach($unplannedStories as $story) - { - $product = $story->product; - if(isset($products[$product])) - { - if(!isset($products[$product]->plans[0])) - { - $products[$product]->plans[0] = new stdClass(); - $products[$product]->plans[0]->title = '未计划'; - $products[$product]->plans[0]->begin = ''; - $products[$product]->plans[0]->end = ''; - $products[$product]->plans[0]->status = array(); - } - $products[$product]->plans[0]->status[$story->status] = - isset($products[$product]->plans[0]->status[$story->status]) ? - $products[$product]->plans[0]->status[$story->status] + 1 : 1; - } - } - - return $products; - } -} - -// 创建测试实例 -$pivotTest = new MockPivotTest(); - -// 测试步骤1:正常情况统计已计划需求状态 -$result1 = $pivotTest->getPlanStatusStatisticsTest( - array( - 1 => (object)array('id' => 1, 'name' => '产品A', 'plans' => array( - 1 => (object)array('id' => 1, 'product' => 1, 'title' => '计划1.0') - )) - ), - array(1 => (object)array('id' => 1, 'product' => 1, 'title' => '计划1.0')), - array( - 1 => (object)array('id' => 1, 'plan' => '1', 'product' => 1, 'status' => 'active'), - 2 => (object)array('id' => 2, 'plan' => '1', 'product' => 1, 'status' => 'active') - ), - array() -); -echo $result1[1]->plans[1]->status['active'] . "\n"; - -// 测试步骤2:统计未计划需求状态 -$result2 = $pivotTest->getPlanStatusStatisticsTest( - array( - 1 => (object)array('id' => 1, 'name' => '产品A', 'plans' => array()) - ), - array(), - array(), - array( - 1 => (object)array('id' => 1, 'plan' => '', 'product' => 1, 'status' => 'active'), - 2 => (object)array('id' => 2, 'plan' => '', 'product' => 1, 'status' => 'draft') - ) -); -echo $result2[1]->plans[0]->status['active'] . "\n"; - -// 测试步骤3:测试多个计划的需求状态统计 -$result3 = $pivotTest->getPlanStatusStatisticsTest( - array( - 1 => (object)array('id' => 1, 'name' => '产品A', 'plans' => array( - 1 => (object)array('id' => 1, 'product' => 1, 'title' => '计划1.0'), - 2 => (object)array('id' => 2, 'product' => 1, 'title' => '计划2.0') - )) - ), - array( - 1 => (object)array('id' => 1, 'product' => 1, 'title' => '计划1.0'), - 2 => (object)array('id' => 2, 'product' => 1, 'title' => '计划2.0') - ), - array( - 1 => (object)array('id' => 1, 'plan' => '1', 'product' => 1, 'status' => 'active'), - 2 => (object)array('id' => 2, 'plan' => '2', 'product' => 1, 'status' => 'testing'), - 3 => (object)array('id' => 3, 'plan' => '1', 'product' => 1, 'status' => 'verified') - ), - array() -); -echo $result3[1]->plans[1]->status['verified'] . "\n"; - -// 测试步骤4:测试空数据情况 -$result4 = $pivotTest->getPlanStatusStatisticsTest( - array(), - array(), - array(), - array() -); -echo (empty($result4) ? '0' : count($result4)) . "\n"; - -// 测试步骤5:测试需求属于多个计划的情况 -$result5 = $pivotTest->getPlanStatusStatisticsTest( - array( - 1 => (object)array('id' => 1, 'name' => '产品A', 'plans' => array( - 1 => (object)array('id' => 1, 'product' => 1, 'title' => '计划1.0'), - 2 => (object)array('id' => 2, 'product' => 1, 'title' => '计划2.0') - )) - ), - array( - 1 => (object)array('id' => 1, 'product' => 1, 'title' => '计划1.0'), - 2 => (object)array('id' => 2, 'product' => 1, 'title' => '计划2.0') - ), - array( - 1 => (object)array('id' => 1, 'plan' => '1,2', 'product' => 1, 'status' => 'active'), - 2 => (object)array('id' => 2, 'plan' => '2,3', 'product' => 1, 'status' => 'testing') - ), - array() -); -echo $result5[1]->plans[2]->status['active'] . "\n"; \ No newline at end of file diff --git a/module/pivot/test/tao/getproductprojects.php b/module/pivot/test/tao/getproductprojects.php deleted file mode 100755 index 9955e9a551..0000000000 --- a/module/pivot/test/tao/getproductprojects.php +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env php -> 0 -步骤2:hasProduct=1的项目不符合条件 >> 0 -步骤3:非project类型的项目不符合条件 >> 0 -步骤4:符合条件的项目返回产品项目关联 >> 2 -步骤5:验证返回的数据结构正确 >> 1 - -*/ - -// Mock测试框架,避免框架依赖问题 -class MockPivotTest -{ - public function getProductProjectsTest($projects, $projectProducts): array - { - // 模拟pivotTao::getProductProjects方法的SQL逻辑: - // SELECT t2.product, t2.project FROM zt_project t1 - // LEFT JOIN zt_projectproduct t2 ON t1.id = t2.project - // WHERE t1.type = 'project' AND t1.hasProduct = 0 - - $result = array(); - - foreach($projects as $project) { - // 检查项目类型和hasProduct条件 - if($project->type == 'project' && $project->hasProduct == 0) { - // 左连接projectproduct表 - foreach($projectProducts as $pp) { - if($pp->project == $project->id) { - $result[$pp->product] = $pp->project; - } - } - } - } - - return $result; - } -} - -// 创建测试实例 -$pivotTest = new MockPivotTest(); - -// 测试步骤1:hasProduct=0且无关联产品的项目 -$result1 = $pivotTest->getProductProjectsTest( - array( - (object)array('id' => 1, 'type' => 'project', 'hasProduct' => 0, 'name' => '项目1') - ), - array() // 没有产品关联 -); -echo count($result1) . "\n"; - -// 测试步骤2:hasProduct=1的项目不符合条件 -$result2 = $pivotTest->getProductProjectsTest( - array( - (object)array('id' => 1, 'type' => 'project', 'hasProduct' => 1, 'name' => '项目1') - ), - array( - (object)array('project' => 1, 'product' => 101, 'branch' => 0) - ) -); -echo count($result2) . "\n"; - -// 测试步骤3:非project类型的项目不符合条件 -$result3 = $pivotTest->getProductProjectsTest( - array( - (object)array('id' => 1, 'type' => 'sprint', 'hasProduct' => 0, 'name' => '迭代1') - ), - array( - (object)array('project' => 1, 'product' => 101, 'branch' => 0) - ) -); -echo count($result3) . "\n"; - -// 测试步骤4:符合条件的项目返回产品项目关联 -$result4 = $pivotTest->getProductProjectsTest( - array( - (object)array('id' => 1, 'type' => 'project', 'hasProduct' => 0, 'name' => '项目1'), - (object)array('id' => 2, 'type' => 'project', 'hasProduct' => 0, 'name' => '项目2') - ), - array( - (object)array('project' => 1, 'product' => 101, 'branch' => 0), - (object)array('project' => 2, 'product' => 102, 'branch' => 0) - ) -); -echo count($result4) . "\n"; - -// 测试步骤5:验证返回的数据结构正确 -$result5 = $pivotTest->getProductProjectsTest( - array( - (object)array('id' => 1, 'type' => 'project', 'hasProduct' => 0, 'name' => '项目1') - ), - array( - (object)array('project' => 1, 'product' => 101, 'branch' => 0) - ) -); -echo (is_array($result5) ? 1 : 0) . "\n"; \ No newline at end of file diff --git a/module/pivot/test/tao/processproductplan.php b/module/pivot/test/tao/processproductplan.php deleted file mode 100755 index 78a72c2be6..0000000000 --- a/module/pivot/test/tao/processproductplan.php +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env php -gen(1); -zenData('user')->gen(5); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品1,产品2,产品3,产品4,产品5'); -$productTable->code->range('product1,product2,product3,product4,product5'); -$productTable->PO->range('admin,user1,user2,admin,user1'); -$productTable->deleted->range('0'); -$productTable->shadow->range('0'); -$productTable->status->range('normal'); -$productTable->type->range('normal'); -$productTable->gen(5); - -$planTable = zenData('productplan'); -$planTable->id->range('1-10'); -$planTable->product->range('1{2},2{3},3{2},4{1},5{2}'); -$planTable->parent->range('0{6},1{1},2{1},5{1},8{1}'); -$planTable->title->range('计划1.1,计划1.2,计划2.1,计划2.2,计划2.3,计划3.1,子计划1.1,子计划2.1,计划3.2,子计划3.1'); -$planTable->begin->range('2024-01-01,2024-02-01,2024-03-01,2024-04-01,2024-05-01,2024-06-01,2024-07-01,2024-08-01,2024-09-01,2024-10-01'); -$planTable->end->range('2026-06-30,2026-07-31,2026-08-31,2026-09-30,2026-10-31,2026-11-30,2026-12-31,2027-01-31,2027-02-28,2027-03-31'); -$planTable->deleted->range('0'); -$planTable->branch->range('0'); -$planTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$pivotTest = new pivotTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 步骤1:正常情况下处理产品计划 - 测试有计划的产品处理 -$products1 = array(); -$product1 = new stdClass(); -$product1->id = 1; -$product1->name = '产品1'; -$products1[1] = $product1; -r($pivotTest->processProductPlanTest($products1, '')) && p('count()') && e('2'); // 步骤1:正常情况下处理产品计划 - -// 步骤2:空产品数组的处理 - 测试空产品数组情况 -$products2 = array(); -r($pivotTest->processProductPlanTest($products2, '')) && p('count()') && e('0'); // 步骤2:空产品数组的处理 - -// 步骤3:父子计划关系的处理 - 测试包含父子计划关系的产品 -$products3 = array(); -$product3 = new stdClass(); -$product3->id = 1; -$product3->name = '产品1'; -$products3[1] = $product3; -r($pivotTest->processProductPlanTest($products3, '')) && p('7:parent') && e('1'); // 步骤3:父子计划关系的处理 - -// 步骤4:过期计划的过滤功能 - 测试不同conditions参数对过期计划的过滤 -$products4 = array(); -$product4 = new stdClass(); -$product4->id = 4; -$product4->name = '产品4'; -$products4[4] = $product4; -r($pivotTest->processProductPlanTest($products4, 'overduePlan')) && p('count()') && e('1'); // 步骤4:过期计划的过滤功能 - -// 步骤5:多产品计划的处理 - 测试多个产品的计划处理 -$products5 = array(); -$product5a = new stdClass(); -$product5a->id = 3; -$product5a->name = '产品3'; -$products5[3] = $product5a; -$product5b = new stdClass(); -$product5b->id = 5; -$product5b->name = '产品5'; -$products5[5] = $product5b; -r($pivotTest->processProductPlanTest($products5, '')) && p('count()') && e('4'); // 步骤5:多产品计划的处理 - -// 步骤6:无计划产品的处理 - 测试某些产品没有计划的情况 -$products6 = array(); -$product6 = new stdClass(); -$product6->id = 999; -$product6->name = '无计划产品'; -$products6[999] = $product6; -r($pivotTest->processProductPlanTest($products6, '')) && p('count()') && e('0'); // 步骤6:无计划产品的处理 \ No newline at end of file diff --git a/module/pivot/test/zen/bugassign.php b/module/pivot/test/zen/bugassign.php deleted file mode 100755 index 1850dbd800..0000000000 --- a/module/pivot/test/zen/bugassign.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -bugAssignTest()) && p('title') && e('Bug指派表'); -r($pivotTest->bugAssignTest()) && p('pivotName') && e('Bug指派表'); -r($pivotTest->bugAssignTest()) && p('currentMenu') && e('bugassign'); -r($pivotTest->bugAssignTest()) && p('hasUsers,hasBugs') && e('1,1'); -r($pivotTest->bugAssignTest()) && p('sessionSet') && e('1'); \ No newline at end of file diff --git a/module/pivot/test/zen/bugcreate.php b/module/pivot/test/zen/bugcreate.php deleted file mode 100755 index b116ce9181..0000000000 --- a/module/pivot/test/zen/bugcreate.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -bugCreateTest()) && p('title,pivotName,currentMenu') && e('Bug创建表,Bug创建表,bugcreate'); // 步骤1:正常情况 -r($pivotTest->bugCreateTest('2024-01-01', '2024-02-28')) && p('begin,end') && e('2024-01-01,2024-02-28'); // 步骤2:指定时间范围 -r($pivotTest->bugCreateTest('', '', 1)) && p('product,hasProducts') && e('1,1'); // 步骤3:指定产品ID -r($pivotTest->bugCreateTest('', '', 0, 1)) && p('execution,hasExecutions') && e('1,1'); // 步骤4:指定执行ID -r($pivotTest->bugCreateTest('2024-01-01', '2024-12-31', 2, 2)) && p('hasUsers,hasBugs') && e('1,1'); // 步骤5:完整参数验证 \ No newline at end of file diff --git a/module/pivot/test/zen/getbuiltinmenus.php b/module/pivot/test/zen/getbuiltinmenus.php deleted file mode 100755 index d8886d7f37..0000000000 --- a/module/pivot/test/zen/getbuiltinmenus.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getBuiltinMenusTest('normal_case'))) && p() && e('2'); -r(count($pivotTest->getBuiltinMenusTest('empty_pivot_list'))) && p() && e('0'); -r(count($pivotTest->getBuiltinMenusTest('no_permission'))) && p() && e('0'); -r(count($pivotTest->getBuiltinMenusTest('invalid_format'))) && p() && e('0'); -r(count($pivotTest->getBuiltinMenusTest('multiple_valid_items'))) && p() && e('5'); \ No newline at end of file diff --git a/module/pivot/test/zen/getdefaultmethodandparams.php b/module/pivot/test/zen/getdefaultmethodandparams.php deleted file mode 100755 index fd8589d4bc..0000000000 --- a/module/pivot/test/zen/getdefaultmethodandparams.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -loadYaml('module_getdefaultmethodandparams', false, 2)->gen(10); - -$dimensionTable = zenData('dimension'); -$dimensionTable->loadYaml('dimension_getdefaultmethodandparams', false, 2)->gen(5); - -$pivotTable = zenData('pivot'); -$pivotTable->loadYaml('pivot_getdefaultmethodandparams', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$pivotTest = new pivotTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($pivotTest->getDefaultMethodAndParamsTest(1, 1)) && p('0') && e('bugCreate'); // 步骤1:正常情况,返回内置方法 -r($pivotTest->getDefaultMethodAndParamsTest(1, 999)) && p('0,1') && e(','); // 步骤2:边界值,分组不存在 -r($pivotTest->getDefaultMethodAndParamsTest(0, 1)) && p('0,1') && e(','); // 步骤3:异常输入,无效维度ID -r($pivotTest->getDefaultMethodAndParamsTest(2, 1)) && p('0,1') && e(','); // 步骤4:权限验证,非第一维度无内置透视表 -r($pivotTest->getDefaultMethodAndParamsTest(1, 2)) && p('0,1') && e(','); // 步骤5:业务规则,grade不为1的分组 \ No newline at end of file diff --git a/module/pivot/test/zen/getdrill.php b/module/pivot/test/zen/getdrill.php deleted file mode 100755 index e4e4c86c02..0000000000 --- a/module/pivot/test/zen/getdrill.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -dbh->exec("DELETE FROM zt_pivotdrill"); -$tester->dbh->exec(" -INSERT INTO zt_pivotdrill (`pivot`, `version`, `field`, `object`, `whereSql`, `condition`, `status`, `account`, `type`) -VALUES -(1, '1', 'name', 'bug', 'status = \"active\"', '{\"field\":\"status\",\"operator\":\"=\",\"value\":\"active\"}', 'published', 'admin', 'manual'), -(1, '1', 'status', 'bug', 'deleted = \"0\"', '{\"field\":\"deleted\",\"operator\":\"=\",\"value\":\"0\"}', 'published', 'admin', 'auto'), -(2, '1', 'category', 'story', 'type = \"story\"', '{\"field\":\"type\",\"operator\":\"=\",\"value\":\"story\"}', 'published', 'user1', 'manual'), -(2, '2', 'name', 'story', 'name IS NOT NULL', '{\"field\":\"name\",\"operator\":\"!=\",\"value\":\"\"}', 'published', 'admin', 'auto'), -(3, '1', 'priority', 'task', 'priority > 0', '{\"field\":\"priority\",\"operator\":\">\",\"value\":\"0\"}', 'design', 'user1', 'manual') -"); - -su('admin'); - -$pivotTest = new pivotTest(); - -r($pivotTest->getDrillTest(1, '1', 'name', 'published')) && p('field') && e('name'); -r($pivotTest->getDrillTest(1, '1', 'status', 'design')) && p('field') && e('status'); -r($pivotTest->getDrillTest(999, '1', 'name', 'published')) && p() && e('{}'); -r($pivotTest->getDrillTest(1, '1', 'nonexistent', 'published')) && p() && e('{}'); -r($pivotTest->getDrillTest(1, 'invalid', 'name', 'published')) && p() && e('{}'); \ No newline at end of file diff --git a/module/pivot/test/zen/getfilteroption.php b/module/pivot/test/zen/getfilteroption.php deleted file mode 100755 index 241fd312dd..0000000000 --- a/module/pivot/test/zen/getfilteroption.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getFilterOptionUrlTest(array('field' => 'status', 'from' => 'query', 'typeOption' => 'user', 'default' => 'active'))) && p('method') && e('post'); -r($pivotTest->getFilterOptionUrlTest(array('field' => 'priority', 'from' => 'result', 'default' => array('1', '2')), '', array('priority' => array('type' => 'options', 'object' => 'bug', 'field' => 'priority')))) && p('data:type') && e('options'); -r($pivotTest->getFilterOptionUrlTest(array('field' => 'name', 'default' => 'test', 'saveAs' => 'userName'), 'SELECT * FROM user', array('name' => array('type' => 'object', 'object' => 'user', 'field' => 'realname')))) && p('data:sql') && e('SELECT * FROM user'); -r($pivotTest->getFilterOptionUrlTest(array('field' => 'test', 'from' => 'result'), '', array())) && p('data:saveAs') && e('test'); -r($pivotTest->getFilterOptionUrlTest(array('field' => 'category', 'from' => 'result'), 'SELECT id,name FROM category WHERE deleted=0', array('category' => array('type' => 'select', 'object' => 'category', 'field' => 'name')))) && p('data:originalField') && e('name'); \ No newline at end of file diff --git a/module/pivot/test/zen/getfilteroptionurl.php b/module/pivot/test/zen/getfilteroptionurl.php deleted file mode 100755 index af7e5edcef..0000000000 --- a/module/pivot/test/zen/getfilteroptionurl.php +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env php - 'status', - 'from' => 'query', - 'typeOption' => 'user', - 'default' => 'active' -); -r($pivotTest->getFilterOptionUrlTest($filter1)) && p('method') && e('post'); - -// 测试步骤2:from='result'的正常情况,fieldType='options' -$filter2 = array( - 'field' => 'priority', - 'from' => 'result', - 'default' => '1' -); -$fieldSettings2 = array( - 'priority' => array( - 'type' => 'options', - 'object' => 'bug', - 'field' => 'priority' - ) -); -r($pivotTest->getFilterOptionUrlTest($filter2, '', $fieldSettings2)) && p('data:type') && e('options'); - -// 测试步骤3:空filter数组的边界情况(最小必需字段) -$filter3 = array( - 'field' => 'test_field' -); -r($pivotTest->getFilterOptionUrlTest($filter3, '', array())) && p('data:saveAs') && e('test_field'); - -// 测试步骤4:数组类型的default值处理 -$filter4 = array( - 'field' => 'assignedTo', - 'from' => 'result', - 'default' => array('1', '2', '3') -); -$fieldSettings4 = array( - 'assignedTo' => array( - 'type' => 'select', - 'object' => 'user', - 'field' => 'account' - ) -); -r($pivotTest->getFilterOptionUrlTest($filter4, 'SELECT * FROM user', $fieldSettings4)) && p('data:values') && e('1,2,3'); - -// 测试步骤5:fieldType='object'的特殊情况 -$filter5 = array( - 'field' => 'owner', - 'from' => 'result', - 'default' => 'admin', - 'saveAs' => 'ownerName' -); -$fieldSettings5 = array( - 'owner' => array( - 'type' => 'object', - 'object' => 'user', - 'field' => 'realname' - ) -); -r($pivotTest->getFilterOptionUrlTest($filter5, 'SELECT id,realname FROM user', $fieldSettings5)) && p('data:field') && e('realname'); \ No newline at end of file diff --git a/module/pivot/test/zen/getmenuitems.php b/module/pivot/test/zen/getmenuitems.php deleted file mode 100755 index 23c7ebdedb..0000000000 --- a/module/pivot/test/zen/getmenuitems.php +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env php -id = 1; -$menu1->name = 'Test Menu 1'; -$menu1->url = 'http://example.com/menu1'; -$normalMenus[] = $menu1; - -$menu2 = new stdClass(); -$menu2->id = 2; -$menu2->name = 'Test Menu 2'; -$menu2->url = 'http://example.com/menu2'; -$normalMenus[] = $menu2; - -r($pivotTest->getMenuItemsCountTest($normalMenus)) && p() && e('2'); // 步骤1:正常情况 - -// 步骤2:边界值 - 空数组输入 -$emptyMenus = array(); -r($pivotTest->getMenuItemsCountTest($emptyMenus)) && p() && e('0'); // 步骤2:边界值 - -// 步骤3:混合情况 - 包含url和不包含url的菜单项 -$mixedMenus = array(); -$menuWithUrl = new stdClass(); -$menuWithUrl->id = 3; -$menuWithUrl->name = 'With URL'; -$menuWithUrl->url = 'http://example.com/with-url'; -$mixedMenus[] = $menuWithUrl; - -$menuWithoutUrl = new stdClass(); -$menuWithoutUrl->id = 4; -$menuWithoutUrl->name = 'Without URL'; -$mixedMenus[] = $menuWithoutUrl; - -r($pivotTest->getMenuItemsCountTest($mixedMenus)) && p() && e('1'); // 步骤3:异常输入 - -// 步骤4:权限验证 - 所有菜单项都没有url属性 -$noUrlMenus = array(); -$menuNoUrl1 = new stdClass(); -$menuNoUrl1->id = 5; -$menuNoUrl1->name = 'No URL 1'; -$noUrlMenus[] = $menuNoUrl1; - -$menuNoUrl2 = new stdClass(); -$menuNoUrl2->id = 6; -$menuNoUrl2->name = 'No URL 2'; -$noUrlMenus[] = $menuNoUrl2; - -r($pivotTest->getMenuItemsCountTest($noUrlMenus)) && p() && e('0'); // 步骤4:权限验证 - -// 步骤5:业务规则 - 包含复杂菜单对象结构 -$complexMenus = array(); -$complexMenu1 = new stdClass(); -$complexMenu1->id = 7; -$complexMenu1->name = 'Complex Menu 1'; -$complexMenu1->url = 'http://example.com/complex1'; -$complexMenu1->parent = 0; -$complexMenu1->extra = 'extra_data'; -$complexMenus[] = $complexMenu1; - -$complexMenu2 = new stdClass(); -$complexMenu2->id = 8; -$complexMenu2->name = 'Complex Menu 2'; -$complexMenu2->parent = 7; -$complexMenus[] = $complexMenu2; // 没有url - -$complexMenu3 = new stdClass(); -$complexMenu3->id = 9; -$complexMenu3->name = 'Complex Menu 3'; -$complexMenu3->url = 'http://example.com/complex3'; -$complexMenus[] = $complexMenu3; - -r($pivotTest->getMenuItemsCountTest($complexMenus)) && p() && e('2'); // 步骤5:业务规则 \ No newline at end of file diff --git a/module/pivot/test/zen/getsidebarmenus.php b/module/pivot/test/zen/getsidebarmenus.php deleted file mode 100755 index 9bcb616662..0000000000 --- a/module/pivot/test/zen/getsidebarmenus.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -getSidebarMenusTest(1, 1))) && p() && e('3'); // 步骤1:正常情况,返回3个菜单项 -r(count($pivotTest->getSidebarMenusTest(1, 999))) && p() && e('0'); // 步骤2:分组不存在,返回空数组 -r(count($pivotTest->getSidebarMenusTest(1, 2))) && p() && e('0'); // 步骤3:分组grade不为1,返回空数组 -r(count($pivotTest->getSidebarMenusTest(0, 1))) && p() && e('0'); // 步骤4:无效维度ID,返回空数组 -r(count($pivotTest->getSidebarMenusTest(2, 1))) && p() && e('2'); // 步骤5:非第一维度,返回2个菜单项(不包含内置菜单) \ No newline at end of file diff --git a/module/pivot/test/zen/productsummary.php b/module/pivot/test/zen/productsummary.php deleted file mode 100755 index 7620b2a7c6..0000000000 --- a/module/pivot/test/zen/productsummary.php +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('正常产品1,正常产品2,已删除产品3,暂停产品4,新产品5'); -$table->status->range('normal{3},closed{1},normal{1}'); -$table->type->range('normal{4},branch{1}'); -$table->deleted->range('0{4},1{1}'); -$table->gen(5); - -$table = zenData('user'); -$table->id->range('1-3'); -$table->account->range('admin,user1,user2'); -$table->realname->range('管理员,用户1,用户2'); -$table->deleted->range('0'); -$table->gen(3); - -su('admin'); - -$pivotTest = new pivotTest(); - -r($pivotTest->productSummaryTest('', 0, 'normal', 'normal')) && p('title') && e('产品汇总表'); -r($pivotTest->productSummaryTest('status=normal', 1, 'normal', 'normal')) && p('conditions') && e('status=normal'); -r($pivotTest->productSummaryTest('', 2, 'normal', 'normal')) && p('filters:productID') && e('2'); -r($pivotTest->productSummaryTest('', 0, 'closed', 'normal')) && p('filters:productStatus') && e('closed'); -r($pivotTest->productSummaryTest('', 0, 'normal', 'branch')) && p('filters:productType') && e('branch'); \ No newline at end of file diff --git a/module/pivot/test/zen/projectdeviation.php b/module/pivot/test/zen/projectdeviation.php deleted file mode 100755 index a1a21e4cf9..0000000000 --- a/module/pivot/test/zen/projectdeviation.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -projectDeviationTest('', '')) && p('title,pivotName,currentMenu') && e('项目偏差表,项目偏差表,projectdeviation'); // 步骤1:正常情况,不传递时间参数 -r($pivotTest->projectDeviationTest('2024-01-01', '2024-12-31')) && p('begin,end') && e('2024-01-01,2024-12-31'); // 步骤2:传递有效的开始时间和结束时间参数 -r($pivotTest->projectDeviationTest('invalid-date', '2024-12-31')) && p('begin') && e('2025-09-01'); // 步骤3:传递无效的时间格式参数 -r($pivotTest->projectDeviationTest('', '')) && p('hasExecutions,sessionSet') && e('1,1'); // 步骤4:传递空字符串时间参数验证数据获取 -r($pivotTest->projectDeviationTest('2030-01-01', '2030-12-31')) && p('begin,end') && e('2030-01-01,2030-12-31'); // 步骤5:传递未来时间参数验证处理 \ No newline at end of file diff --git a/module/pivot/test/zen/setnewmark.php b/module/pivot/test/zen/setnewmark.php deleted file mode 100755 index 234216c8f9..0000000000 --- a/module/pivot/test/zen/setnewmark.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -setNewMarkTest('not_builtin')) && p() && e('no_change'); // 步骤1:非内置透视表 -r($pivotTest->setNewMarkTest('builtin_no_version_change')) && p() && e('new_label_added'); // 步骤2:内置透视表版本未变化 -r($pivotTest->setNewMarkTest('builtin_with_mark')) && p() && e('no_change'); // 步骤3:内置透视表已有标记 -r($pivotTest->setNewMarkTest('builtin_version_change')) && p() && e('new_version_label_added'); // 步骤4:内置透视表版本变化 -r($pivotTest->setNewMarkTest('not_in_builtins')) && p() && e('no_change'); // 步骤5:不在builtins数组中 \ No newline at end of file diff --git a/module/pivot/test/zen/show.php b/module/pivot/test/zen/show.php deleted file mode 100755 index a87298f028..0000000000 --- a/module/pivot/test/zen/show.php +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$pivotTable->dimension->range('1'); -$pivotTable->group->range('1-2'); -$pivotTable->name->range('测试透视表1,测试透视表2,测试透视表3,内置透视表,版本透视表'); -$pivotTable->sql->range('SELECT * FROM zt_user{5}'); -$pivotTable->fields->range('{"id":{"name":"id","type":"input"},"account":{"name":"account","type":"input"}}{5}'); -$pivotTable->settings->range('{"summary":"use","columns":[{"field":"account","title":"用户"}]}{5}'); -$pivotTable->filters->range('[]{5}'); -$pivotTable->stage->range('published{5}'); -$pivotTable->builtin->range('0,0,0,1,0'); -$pivotTable->deleted->range('0{5}'); -$pivotTable->gen(5); - -$pivotspecTable = zenData('pivotspec'); -$pivotspecTable->pivot->range('5'); -$pivotspecTable->version->range('1'); -$pivotspecTable->name->range('版本透视表V1'); -$pivotspecTable->sql->range('SELECT * FROM zt_user WHERE deleted="0"'); -$pivotspecTable->fields->range('{"id":{"name":"id","type":"input"},"account":{"name":"account","type":"input"}}'); -$pivotspecTable->settings->range('{"summary":"use","columns":[{"field":"account","title":"用户账号"}]}'); -$pivotspecTable->filters->range('[]'); -$pivotspecTable->gen(1); - -$userTable = zenData('user'); -$userTable->id->range('1-3'); -$userTable->account->range('admin,user1,user2'); -$userTable->realname->range('管理员,用户1,用户2'); -$userTable->deleted->range('0{3}'); -$userTable->gen(3); - -$markTable = zenData('mark'); -$markTable->id->range('1-2'); -$markTable->objectType->range('pivot{2}'); -$markTable->objectID->range('4,5'); -$markTable->version->range('1,2'); -$markTable->mark->range('view{2}'); -$markTable->account->range('admin{2}'); -$markTable->gen(2); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$pivotTest = new pivotTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($pivotTest->showTest(1, 1)) && p('hasVersionMark,pivotName,currentMenu') && e('0,测试透视表1,1_1'); // 步骤1:正常透视表显示 -r($pivotTest->showTest(1, 5, '', '1')) && p('pivotName,version') && e('版本透视表V1,1'); // 步骤2:使用指定版本显示透视表 -r($pivotTest->showTest(1, 999)) && p() && e('access_denied'); // 步骤3:无效透视表ID显示 -r($pivotTest->showTest(1, 2, 'view')) && p('pivotName,currentMenu') && e('测试透视表2,1_2'); // 步骤4:带有标记的透视表显示 -r($pivotTest->showTest(1, 4, 'view')) && p('pivotName,markSet') && e('内置透视表,1'); // 步骤5:设置新标记的内置透视表显示 \ No newline at end of file diff --git a/module/pivot/test/zen/workload.php b/module/pivot/test/zen/workload.php deleted file mode 100755 index a13e91f268..0000000000 --- a/module/pivot/test/zen/workload.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -gen(10); - -su('admin'); - -$pivotTest = new pivotTest(); - -r($pivotTest->workloadTest()) && p('title,currentMenu,hasUsers') && e('工作负载表,workload,1'); -r($pivotTest->workloadTest('2024-01-01', '2024-01-31', 0, 8.0, 1, 'assign')) && p('dept,workhour,assign') && e('1,8,assign'); -r($pivotTest->workloadTest('2024-01-01', '2024-01-08', 5, 7.5, 0, 'assign')) && p('days,workhour,allHour') && e('5,7.5,37.5'); -r($pivotTest->workloadTest('2024-01-01', '2024-01-15', 0, 8.0, 0, 'creator')) && p('assign,hasWorkload') && e('creator,1'); -r($pivotTest->workloadTest('', '', 0, 0, 0, 'assign')) && p('workhour,sessionSet,hasDepts') && e('8,1,1'); \ No newline at end of file diff --git a/module/product/test/model/buildsearchconfig.php b/module/product/test/model/buildsearchconfig.php deleted file mode 100755 index 0d554991db..0000000000 --- a/module/product/test/model/buildsearchconfig.php +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env php -SRCommon = '软件需求'; -$lang->URCommon = '用户需求'; -$lang->ERCommon = '业务需求'; -$config->productCommon = '产品'; - -$productTable = zenData('product'); -$productTable->id->range('1,7,8'); -$productTable->name->range('正常产品1,多分支产品1,多分支产品2'); -$productTable->type->range('normal,branch,branch'); -$productTable->status->range('normal'); -$productTable->deleted->range('0'); -$productTable->shadow->range('0'); -$productTable->gen(3); - -$branchTable = zenData('branch'); -$branchTable->id->range('1,2'); -$branchTable->product->range('7,8'); -$branchTable->name->range('v1.0,master'); -$branchTable->status->range('active'); -$branchTable->deleted->range('0'); -$branchTable->gen(2); - -$moduleTable = zenData('module'); -$moduleTable->id->range('1,2'); -$moduleTable->root->range('1,7'); -$moduleTable->name->range('用户管理,产品管理'); -$moduleTable->type->range('story'); -$moduleTable->deleted->range('0'); -$moduleTable->gen(2); - -$planTable = zenData('productplan'); -$planTable->id->range('1,2'); -$planTable->product->range('1,7'); -$planTable->title->range('V1.0版本计划,迭代计划1'); -$planTable->status->range('wait,doing'); -$planTable->deleted->range('0'); -$planTable->gen(2); - -su('admin'); -$product = new productTest('admin'); - -r($product->buildSearchConfigTest(1, 'story')) && p('fields:branch') && e('~~'); -r($product->buildSearchConfigTest(7, 'story')) && p('fields:branch') && e('所属分支'); -r($product->buildSearchConfigTest(1, 'requirement')) && p('fields:title') && e('名称'); -r($product->buildSearchConfigTest(7, 'epic')) && p('params:module:values') && e('array'); -r($product->buildSearchConfigTest(0, 'story')) && p('params:plan:values') && e('array'); -r($product->buildSearchConfigTest(1, 'story')) && p('params:plan:values') && e('array'); -r($product->buildSearchConfigTest(8, 'story')) && p('params:branch:values') && e('array'); \ No newline at end of file diff --git a/module/product/test/zen/assignbrowsedata.php b/module/product/test/zen/assignbrowsedata.php deleted file mode 100755 index e715649ab5..0000000000 --- a/module/product/test/zen/assignbrowsedata.php +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$product->name->range('产品A,产品B,产品C'); -$product->status->range('normal{8},closed{2}'); -$product->type->range('normal{6},branch{4}'); -$product->PO->range('admin,user1,user2'); -$product->gen(10); - -$story = zenData('story'); -$story->id->range('1-20'); -$story->product->range('1-3'); -$story->title->range('需求标题1,需求标题2,需求标题3'); -$story->type->range('story{15},requirement{5}'); -$story->status->range('active{10},draft{5},closed{5}'); -$story->gen(20); - -$project = zenData('project'); -$project->id->range('1-5'); -$project->name->range('项目A,项目B,项目C'); -$project->status->range('doing{3},wait{2}'); -$project->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$productTest = new productTest(); - -// 5. 测试步骤 -r($productTest->assignBrowseDataTest(array(), 'all', 'story', false, (object)array('id' => 1, 'name' => '产品A', 'type' => 'normal'), null, 'all', 'all', '')) && p('success,storyType') && e('1,story'); // 步骤1:正常产品需求浏览数据分配 -r($productTest->assignBrowseDataTest(array(), 'all', 'story', true, (object)array('id' => 1, 'name' => '产品A', 'type' => 'normal'), (object)array('id' => 1, 'name' => '项目A'), 'all', 'all', '')) && p('success,isProjectStory') && e('1,1'); // 步骤2:项目需求浏览数据分配 -r($productTest->assignBrowseDataTest(array(), 'closed', 'story', false, null, null, '', '', '')) && p('success,stories') && e('1,0'); // 步骤3:空需求列表数据分配 -r($productTest->assignBrowseDataTest(array(), 'all', 'requirement', false, (object)array('id' => 2, 'name' => '产品B', 'type' => 'normal'), null, 'all', 'all', '')) && p('success,storyType') && e('1,requirement'); // 步骤4:不同需求类型数据分配 -r($productTest->assignBrowseDataTest(array(), 'all', 'story', false, (object)array('id' => 3, 'name' => '产品C', 'type' => 'branch'), null, 'branch1', 'branch1', '')) && p('success,branch,branchID') && e('1,branch1,branch1'); // 步骤5:不同分支数据分配 \ No newline at end of file diff --git a/module/product/test/zen/buildbatcheditform.php b/module/product/test/zen/buildbatcheditform.php deleted file mode 100755 index 2ed8bba289..0000000000 --- a/module/product/test/zen/buildbatcheditform.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->program->range('0,1,1,2,0'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('code1,code2,code3,code4,code5'); -$table->type->range('normal'); -$table->status->range('normal'); -$table->desc->range('产品描述1,产品描述2,产品描述3,产品描述4,产品描述5'); -$table->PO->range('admin,user1,user2,admin,user1'); -$table->gen(5); - -$programTable = zenData('project'); -$programTable->id->range('1-3'); -$programTable->name->range('项目集1,项目集2,项目集3'); -$programTable->type->range('program'); -$programTable->status->range('wait'); -$programTable->gen(3); - -$moduleTable = zenData('module'); -$moduleTable->id->range('1-3'); -$moduleTable->root->range('1,2,3'); -$moduleTable->name->range('产品线1,产品线2,产品线3'); -$moduleTable->type->range('line'); -$moduleTable->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildBatchEditFormTest(0, array(1))) && p('products,programID') && e('1,0'); // 步骤1:正常情况,项目集为0,单个产品 -r($productTest->buildBatchEditFormTest(1, array(1, 2, 3))) && p('products,programID') && e('3,1'); // 步骤2:正常情况,项目集为1,多个产品 -r($productTest->buildBatchEditFormTest(0, array())) && p('products') && e('0'); // 步骤3:边界值,空产品ID列表 -r($productTest->buildBatchEditFormTest(0, array(999))) && p('products') && e('0'); // 步骤4:边界值,无效产品ID列表 -r($productTest->buildBatchEditFormTest(1, array(1, 2))) && p('authPrograms,unauthPrograms') && e('0,1'); // 步骤5:验证项目集数据结构 \ No newline at end of file diff --git a/module/product/test/zen/buildproductforactivate.php b/module/product/test/zen/buildproductforactivate.php deleted file mode 100755 index 27f2b9b693..0000000000 --- a/module/product/test/zen/buildproductforactivate.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->status->range('closed{5}'); -$table->desc->range('描述1,描述2,描述3,描述4,描述5'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildProductForActivateTest(1)) && p('status') && e('normal'); // 步骤1:正常激活产品 -r($productTest->buildProductForActivateTest(2, 'or')) && p('status') && e('normal'); // 步骤2:OR视角激活产品 -r($productTest->buildProductForActivateTest(3)) && p('desc') && e('~~'); // 步骤3:激活带描述内容的产品 -r($productTest->buildProductForActivateTest(0)) && p() && e('0'); // 步骤4:激活产品ID为0 -r($productTest->buildProductForActivateTest(-1)) && p() && e('0'); // 步骤5:激活产品ID为负数 \ No newline at end of file diff --git a/module/product/test/zen/buildproductforclose.php b/module/product/test/zen/buildproductforclose.php deleted file mode 100755 index 180cc116eb..0000000000 --- a/module/product/test/zen/buildproductforclose.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_buildproductforclose', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildProductForCloseTest(1)) && p('status') && e('close'); // 步骤1:有效产品ID关闭 -r($productTest->buildProductForCloseTest(999)) && p('status') && e('close'); // 步骤2:不存在产品ID关闭 -r($productTest->buildProductForCloseTest(0)) && p('status') && e('close'); // 步骤3:产品ID为0关闭 -r($productTest->buildProductForCloseTest(-1)) && p('status') && e('close'); // 步骤4:产品ID为负数关闭 -r($productTest->buildProductForCloseTest(5)) && p('closedDate') && e('2025-09-15'); // 步骤5:验证关闭日期为当前日期 \ No newline at end of file diff --git a/module/product/test/zen/buildproductforcreate.php b/module/product/test/zen/buildproductforcreate.php deleted file mode 100755 index ed48f1ad80..0000000000 --- a/module/product/test/zen/buildproductforcreate.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('product1,product2,product3,product4,product5'); -$table->program->range('0,1,2'); -$table->status->range('normal,closed'); -$table->type->range('normal,branch,platform'); -$table->PO->range('admin,user1,user2'); -$table->acl->range('open,private,custom'); -$table->vision->range('rnd,lite,or'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildProductForCreateTest(1)) && p('vision') && e('rnd'); // 步骤1:正常工作流组参数 -r($productTest->buildProductForCreateTest(0)) && p('vision') && e('rnd'); // 步骤2:零值工作流组参数 -r($productTest->buildProductForCreateTest(-1)) && p('vision') && e('rnd'); // 步骤3:负数工作流组参数 -r($productTest->buildProductForCreateTest(2)) && p('name') && e('测试产品'); // 步骤4:检查返回对象包含必要字段 -r($productTest->buildProductForCreateTest(5)) && p('acl') && e('open'); // 步骤5:验证ACL逻辑和图片URL处理 \ No newline at end of file diff --git a/module/product/test/zen/buildproductforedit.php b/module/product/test/zen/buildproductforedit.php deleted file mode 100755 index c353b07277..0000000000 --- a/module/product/test/zen/buildproductforedit.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->program->range('0'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('product1,product2,product3,product4,product5'); -$table->PO->range('admin,user1,user2'); -$table->QD->range('admin,user1,user2'); -$table->RD->range('admin,user1,user2'); -$table->type->range('normal,branch'); -$table->status->range('normal,closed'); -$table->desc->range('产品描述1,产品描述2,产品描述3'); -$table->acl->range('open,private,custom'); -$table->createdBy->range('admin'); -$table->createdDate->range('`2023-01-01 00:00:00`'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildProductForEditTest(1, 0)) && p('name,PO,type') && e('编辑的测试产品,admin,normal'); // 步骤1:正常情况 -r($productTest->buildProductForEditTest(2, 1)) && p('name,status,acl') && e('编辑的测试产品,normal,open'); // 步骤2:工作流分组 -r($productTest->buildProductForEditTest(999, 0)) && p('name,QD,RD') && e('编辑的测试产品,admin,admin'); // 步骤3:无效ID -r($productTest->buildProductForEditTest(0, 0)) && p('name,acl,desc') && e('编辑的测试产品,open,这是一个编辑的测试产品'); // 步骤4:边界值ID -r($productTest->buildProductForEditTest(99999, 5)) && p('name,type,status') && e('编辑的测试产品,normal,normal'); // 步骤5:大数值ID \ No newline at end of file diff --git a/module/product/test/zen/buildsearchformforbrowse.php b/module/product/test/zen/buildsearchformforbrowse.php deleted file mode 100755 index 4cfd00f94b..0000000000 --- a/module/product/test/zen/buildsearchformforbrowse.php +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('Product1,Product2,Product3,Product4,Product5,Product6,Product7,Product8,Product9,Product10'); -$table->status->range('normal{8},closed{2}'); -$table->type->range('normal{7},branch{3}'); -$table->program->range('0{5},1{5}'); -$table->deleted->range('0'); -$table->gen(10); - -$projectTable = zenData('project'); -$projectTable->id->range('1-10'); -$projectTable->name->range('Project1,Project2,Project3,Project4,Project5,Project6,Project7,Project8,Project9,Project10'); -$projectTable->status->range('wait{3},doing{4},suspended{1},closed{2}'); -$projectTable->type->range('project'); -$projectTable->hasProduct->range('1{8},0{2}'); -$projectTable->model->range('scrum{5},waterfall{3},kanban{2}'); -$projectTable->deleted->range('0'); -$projectTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildSearchFormForBrowseTest(null, 0, 1, 'all', 0, 'story', 'unclosed', false, '', 0)) && p('success,productID') && e('1,1'); // 步骤1:正常情况 -r($productTest->buildSearchFormForBrowseTest(null, 1, 0, 'all', 0, 'story', 'unclosed', true, '', 0)) && p('success,productID') && e('1,1'); // 步骤2:项目故事模式 -r($productTest->buildSearchFormForBrowseTest(null, 0, 1, 'all', 0, 'requirement', 'unclosed', false, '', 0)) && p('success,searchConfigModule') && e('1,requirement'); // 步骤3:需求类型 -r($productTest->buildSearchFormForBrowseTest((object)array('hasProduct' => '0', 'model' => 'waterfall'), 1, 1, 'all', 0, 'story', 'unclosed', false, '', 0)) && p('success') && e('1'); // 步骤4:无产品项目 -r($productTest->buildSearchFormForBrowseTest(null, 0, 1, 'all', 5, 'story', 'bysearch', false, '', 0)) && p('success,searchConfigOnMenuBar') && e('1,yes'); // 步骤5:搜索浏览类型 \ No newline at end of file diff --git a/module/product/test/zen/buildsearchformfortrack.php b/module/product/test/zen/buildsearchformfortrack.php deleted file mode 100755 index 01ca9dbb1c..0000000000 --- a/module/product/test/zen/buildsearchformfortrack.php +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->program->range('0,1-3'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('product1,product2,product3,product4,product5'); -$table->status->range('normal{8},closed{2}'); -$table->type->range('normal{7},branch{3}'); -$table->PO->range('admin,user1,user2'); -$table->gen(10); - -$projectTable = zenData('project'); -$projectTable->id->range('1-5'); -$projectTable->name->range('项目1,项目2,项目3,项目4,项目5'); -$projectTable->status->range('wait{2},doing{2},done{1}'); -$projectTable->type->range('project'); -$projectTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->buildSearchFormForTrackTest(1, 'main', 0, 'unclosed', 0, 'story')) && p('success,productID,storyType') && e('1,1,story'); // 步骤1:正常情况 -r($productTest->buildSearchFormForTrackTest(2, 'dev', 1, 'bymodule', 5, 'requirement')) && p('success,projectID,searchModule') && e('1,1,projectstoryTrack'); // 步骤2:项目需求环境 -r($productTest->buildSearchFormForTrackTest(0, '', 0, 'all', 0, 'epic')) && p('success,actionURL,queryID') && e('1,product/track,0'); // 步骤3:产品环境 -r($productTest->buildSearchFormForTrackTest(3, 'test', 0, 'bysearch', 10, 'story')) && p('success,browseType,queryID') && e('1,bysearch,10'); // 步骤4:搜索模式 -r($productTest->buildSearchFormForTrackTest(4, 'all', 2, 'byproject', 0, 'requirement')) && p('success,projectID,searchModule') && e('1,2,projectstoryTrack'); // 步骤5:项目产品 \ No newline at end of file diff --git a/module/product/test/zen/getactions4dashboard.php b/module/product/test/zen/getactions4dashboard.php deleted file mode 100755 index f8c23341e0..0000000000 --- a/module/product/test/zen/getactions4dashboard.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -name->range('产品1,产品2,产品3'); -$table->status->range('normal,normal,closed'); -$table->PO->range('admin,user1,user2'); -$table->gen(3); - -$actionTable = zenData('action'); -$actionTable->objectType->range('story,task,bug'); -$actionTable->actor->range('admin,user1,user2'); -$actionTable->action->range('created,edited,closed'); -$actionTable->objectID->range('1-10'); -$actionTable->product->range('1,2,3'); -$actionTable->date->range('`2024-01-01 10:00:00`,`2024-01-02 11:00:00`,`2024-01-03 12:00:00`'); -$actionTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($productTest->getActions4DashboardTest(1))) && p() && e('1'); // 步骤1:正常情况 - 获取有效产品的仪表盘动态 -r(count($productTest->getActions4DashboardTest(0))) && p() && e('0'); // 步骤2:边界值 - 产品ID为0的情况 -r(count($productTest->getActions4DashboardTest(999))) && p() && e('1'); // 步骤3:异常输入 - 不存在的产品ID -r(count($productTest->getActions4DashboardTest(2))) && p() && e('1'); // 步骤4:权限验证 - 不同用户访问权限 -r(is_array($productTest->getActions4DashboardTest(1))) && p() && e('1'); // 步骤5:业务规则 - 验证返回数据结构完整性 \ No newline at end of file diff --git a/module/product/test/zen/getactionsfordynamic.php b/module/product/test/zen/getactionsfordynamic.php deleted file mode 100755 index 1d08c5a3a9..0000000000 --- a/module/product/test/zen/getactionsfordynamic.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -name->range('产品1,产品2,产品3'); -$table->status->range('normal,normal,closed'); -$table->PO->range('admin,user1,user2'); -$table->gen(3); - -$actionTable = zenData('action'); -$actionTable->objectType->range('story,task,bug'); -$actionTable->actor->range('admin,user1,user2'); -$actionTable->action->range('created,edited,closed'); -$actionTable->date->range('`2024-01-01 10:00:00`,`2024-01-02 11:00:00`,`2024-01-03 12:00:00`'); -$actionTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($productTest->getActionsForDynamicTest('admin', 'date_desc', 1, 'today', '', 'next'))) && p() && e('2'); // 步骤1:正常情况 - 管理员获取今日动态 -r(count($productTest->getActionsForDynamicTest('', 'date_desc', 1, 'all', '', 'next'))) && p() && e('2'); // 步骤2:边界值 - 空用户获取所有动态 -r(count($productTest->getActionsForDynamicTest('user1', 'id_asc', 999, 'week', '', 'next'))) && p() && e('2'); // 步骤3:异常输入 - 不存在的产品ID -r(count($productTest->getActionsForDynamicTest('guest', 'date_desc', 1, 'month', '', 'pre'))) && p() && e('2'); // 步骤4:权限验证 - 访客用户权限 -r(count($productTest->getActionsForDynamicTest('admin', 'date_desc', 1, 'account', '1640995200', 'next'))) && p() && e('2'); // 步骤5:业务规则 - 指定日期时间戳 \ No newline at end of file diff --git a/module/product/test/zen/getactivestorytypefortrack.php b/module/product/test/zen/getactivestorytypefortrack.php deleted file mode 100755 index d0e7bdf2ff..0000000000 --- a/module/product/test/zen/getactivestorytypefortrack.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -loadYaml('story_getactivestorytypefortrack', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($productTest->getActiveStoryTypeForTrackTest(0, 0))) && p() && e('3'); // 步骤1:无项目ID和产品ID的默认情况,应返回3个类型 -r(count($productTest->getActiveStoryTypeForTrackTest(0, 1))) && p() && e('3'); // 步骤2:非projectstory模块测试,应返回3个类型 -r(count($productTest->getActiveStoryTypeForTrackTest(999, 1))) && p() && e('3'); // 步骤3:不存在的项目ID测试,应返回3个类型 -r(isset($productTest->getActiveStoryTypeForTrackTest(1, 1)['epic'])) && p() && e('1'); // 步骤4:测试epic键是否存在 -r(isset($productTest->getActiveStoryTypeForTrackTest(2, 2)['story'])) && p() && e('1'); // 步骤5:测试story键是否存在 \ No newline at end of file diff --git a/module/product/test/zen/getbacklink4create.php b/module/product/test/zen/getbacklink4create.php deleted file mode 100755 index b016a62f8b..0000000000 --- a/module/product/test/zen/getbacklink4create.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getBackLink4CreateTest('from=qa')) && p() && e('/qa/index'); -r($productTest->getBackLink4CreateTest('from=global')) && p() && e('/product/all'); -r($productTest->getBackLink4CreateTest('other=value')) && p() && e('0'); -r($productTest->getBackLink4CreateTest('param1=value1, from=qa, param2=value2')) && p() && e('/qa/index'); -r($productTest->getBackLink4CreateTest('param1=value1, from=global, param2 = value2')) && p() && e('/product/all'); \ No newline at end of file diff --git a/module/product/test/zen/getbranchandtagoption.php b/module/product/test/zen/getbranchandtagoption.php deleted file mode 100755 index 0654f6c890..0000000000 --- a/module/product/test/zen/getbranchandtagoption.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('禅道项目管理软件,禅道测试管理软件,禅道文档管理,ZenTao移动端,ZenTao API'); -$product->type->range('normal{2},branch{2},platform{1}'); -$product->status->range('normal{4},closed{1}'); -$product->gen(5); - -$branch = zenData('branch'); -$branch->id->range('1-20'); -$branch->product->range('1{10},2{5},3{5}'); -$branch->name->range('master{3},develop{3},feature/user-auth{2},feature/payment{2},release/v1.0{2},release/v2.0{2},hotfix/bug-123{3},feature/new-ui{3}'); -$branch->status->range('active{15},closed{5}'); -$branch->deleted->range('0{18},1{2}'); -$branch->gen(20); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getBranchAndTagOptionTest(0, null, true)) && p() && e('0'); // 步骤1:空产品且为项目需求时返回空数组 -r($productTest->getBranchAndTagOptionTest(0, (object)array('id' => 1, 'type' => 'normal'), false)) && p() && e('0'); // 步骤2:普通类型产品返回空数组 -r($productTest->getBranchAndTagOptionTest(0, (object)array('id' => 3, 'type' => 'branch'), false)) && p() && e('4'); // 步骤3:分支类型产品有分支数据时返回分支选项 -r($productTest->getBranchAndTagOptionTest(0, (object)array('id' => 2, 'type' => 'branch'), false)) && p() && e('6'); // 步骤4:分支类型产品有已关闭分支时返回带状态标签的选项 -r($productTest->getBranchAndTagOptionTest(0, (object)array('id' => 100, 'type' => 'branch'), false)) && p() && e('0'); // 步骤5:分支类型产品但无分支数据时返回空数组 \ No newline at end of file diff --git a/module/product/test/zen/getbranchid.php b/module/product/test/zen/getbranchid.php deleted file mode 100755 index c8f97c15ee..0000000000 --- a/module/product/test/zen/getbranchid.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->product->range('2,2,3,3,3'); -$table->name->range('main,dev,branch1,branch2,branch3'); -$table->status->range('active{4},closed{1}'); -$table->gen(5); - -$productTable = zenData('product'); -$productTable->id->range('1-3'); -$productTable->name->range('普通产品,分支产品1,分支产品2'); -$productTable->type->range('normal,branch,branch'); -$productTable->status->range('normal{3}'); -$productTable->gen(3); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$productTest = new productTest(); - -// 5. 测试步骤 -r($productTest->getBranchIDTest(null, '')) && p() && e('all'); // 步骤1:空产品对象 -r($productTest->getBranchIDTest((object)array('id' => 1, 'type' => 'normal'), '')) && p() && e('all'); // 步骤2:普通产品类型 -r($productTest->getBranchIDTest((object)array('id' => 2, 'type' => 'branch'), 'main')) && p() && e('main'); // 步骤3:指定分支 -r($productTest->getBranchIDTest((object)array('id' => 2, 'type' => 'branch'), '')) && p() && e('0'); // 步骤4:空分支且无预分支时返回空分支 -r($productTest->getBranchIDTest((object)array('id' => 999, 'type' => 'branch'), '')) && p() && e('0'); // 步骤5:不存在的产品返回空字符串 \ No newline at end of file diff --git a/module/product/test/zen/getbranchoptions.php b/module/product/test/zen/getbranchoptions.php deleted file mode 100755 index 48a7dbea2b..0000000000 --- a/module/product/test/zen/getbranchoptions.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->type->range('normal{2},branch{3}'); -$product->status->range('normal'); -$product->gen(5); - -$branch = zenData('branch'); -$branch->id->range('1-6'); -$branch->product->range('3{2},4{2},5{2}'); -$branch->name->range('主分支,开发分支,测试分支,V1.0,V2.0,hotfix'); -$branch->status->range('active{5},closed{1}'); -$branch->deleted->range('0'); -$branch->gen(6); - -$projectProduct = zenData('projectproduct'); -$projectProduct->project->range('1{2},2{2}'); -$projectProduct->product->range('3,4,3,4'); -$projectProduct->branch->range('1,3,2,4'); -$projectProduct->gen(4); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getBranchOptionsTest(array(), 0)) && p() && e('0'); // 步骤1:空的项目产品列表 -r($productTest->getBranchOptionsTest(array((object)array('id' => 1, 'type' => 'normal'), (object)array('id' => 2, 'type' => 'normal')), 0)) && p() && e('0'); // 步骤2:普通类型产品 -r($productTest->getBranchOptionsTest(array((object)array('id' => 3, 'type' => 'branch')), 0)) && p() && e('1'); // 步骤3:分支类型产品,项目ID为0 -r($productTest->getBranchOptionsTest(array((object)array('id' => 3, 'type' => 'branch'), (object)array('id' => 4, 'type' => 'branch')), 1)) && p() && e('2'); // 步骤4:分支类型产品,指定项目ID -r($productTest->getBranchOptionsTest(array((object)array('id' => 1, 'type' => 'normal'), (object)array('id' => 3, 'type' => 'branch'), (object)array('id' => 4, 'type' => 'branch')), 2)) && p() && e('2'); // 步骤5:混合类型产品 \ No newline at end of file diff --git a/module/product/test/zen/getbrowseproduct.php b/module/product/test/zen/getbrowseproduct.php deleted file mode 100755 index d65f6a5871..0000000000 --- a/module/product/test/zen/getbrowseproduct.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$product->program->range('0,1-2'); -$product->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$product->code->range('product1,product2,product3,product4,product5,product6,product7,product8,product9,product10'); -$product->type->range('normal{5},branch{3},platform{2}'); -$product->status->range('normal{8},closed{2}'); -$product->acl->range('open{3},private{4},custom{3}'); -$product->gen(10); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->getBrowseProductTest(1)) && p('id,name,type') && e('1,产品1,normal'); -r($productTest->getBrowseProductTest(999)) && p() && e('0'); -r($productTest->getBrowseProductTest(0)) && p() && e('0'); -r($productTest->getBrowseProductTest(-1)) && p() && e('0'); -r($productTest->getBrowseProductTest(5)) && p('id,name,type') && e('5,产品5,normal'); \ No newline at end of file diff --git a/module/product/test/zen/getcreatedlocate.php b/module/product/test/zen/getcreatedlocate.php deleted file mode 100755 index 72e20903e8..0000000000 --- a/module/product/test/zen/getcreatedlocate.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -id->range('1-100'); -$table->program->range('0,1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('product1,product2,product3,product4,product5'); -$table->type->range('normal'); -$table->status->range('normal'); -$table->gen(5); - -$programTable = zenData('project'); -$programTable->id->range('1-5'); -$programTable->name->range('项目集1,项目集2,项目集3,项目集4,项目集5'); -$programTable->type->range('program'); -$programTable->grade->range('1'); -$programTable->status->range('doing'); -$programTable->gen(5); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->getCreatedLocateTest(1, 0, 'product', false)) && p('result') && e('success'); // 步骤1:产品tab下非模态框跳转检查结果 -r($productTest->getCreatedLocateTest(2, 1, 'program', false)) && p('result') && e('success'); // 步骤2:项目集tab下非模态框跳转检查结果 -r($productTest->getCreatedLocateTest(3, 0, 'doc', false)) && p('result') && e('success'); // 步骤3:文档tab下非模态框跳转检查结果 -r($productTest->getCreatedLocateTest(4, 2, 'product', true)) && p('result,load') && e('success,1'); // 步骤4:模态框中跳转检查load值 -r($productTest->getCreatedLocateTest(0, 0, 'product', false)) && p('result,closeModal') && e('success,1'); // 步骤5:边界值测试检查closeModal \ No newline at end of file diff --git a/module/product/test/zen/getcustomfieldsfortrack.php b/module/product/test/zen/getcustomfieldsfortrack.php deleted file mode 100755 index 21c8691efd..0000000000 --- a/module/product/test/zen/getcustomfieldsfortrack.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -owner->range('admin'); -$table->module->range('product'); -$table->section->range('trackFields'); -$table->key->range('story,requirement,epic'); -$table->value->range('project,execution,design', 'task,bug,case', ''); -$table->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getCustomFieldsForTrackTest('story')) && p('show:0') && e('story'); // 步骤1:测试story类型显示字段第一个元素 -r($productTest->getCustomFieldsForTrackTest('requirement')) && p('show:0') && e('requirement'); // 步骤2:测试requirement类型显示字段第一个元素 -r($productTest->getCustomFieldsForTrackTest('epic')) && p('list:requirement') && e('用户需求'); // 步骤3:测试epic类型包含用户需求字段 -r($productTest->getCustomFieldsForTrackTest('story')) && p('list:project') && e('所属项目'); // 步骤4:测试story类型包含所属项目字段 -r($productTest->getCustomFieldsForTrackTest('requirement')) && p('list:design') && e('相关设计'); // 步骤5:测试requirement类型包含相关设计字段 \ No newline at end of file diff --git a/module/product/test/zen/geteditedlocate.php b/module/product/test/zen/geteditedlocate.php deleted file mode 100755 index 46eed322fc..0000000000 --- a/module/product/test/zen/geteditedlocate.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('product1,product2,product3,product4,product5'); -$table->program->range('0,1,2,0,1'); -$table->status->range('normal{5}'); -$table->PO->range('admin'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getEditedLocateTest(1, 1)) && p('result,message') && e('success,保存成功'); // 步骤1:正常情况-有产品ID和项目集ID -r($productTest->getEditedLocateTest(1, 0)) && p('result,message') && e('success,保存成功'); // 步骤2:边界值-只有产品ID没有项目集ID -r($productTest->getEditedLocateTest(0, 1)) && p('result,message') && e('success,保存成功'); // 步骤3:边界值-产品ID为0但有项目集ID -r($productTest->getEditedLocateTest(0, 0)) && p('result,message') && e('success,保存成功'); // 步骤4:边界值-产品ID和项目集ID都为0 -r($productTest->getEditedLocateTest(5, 0)) && p('result,message') && e('success,保存成功'); // 步骤5:业务规则-验证无项目集时的session设置 \ No newline at end of file diff --git a/module/product/test/zen/getemptyhour.php b/module/product/test/zen/getemptyhour.php deleted file mode 100755 index 38a3019549..0000000000 --- a/module/product/test/zen/getemptyhour.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -getEmptyHourTest()) && p('totalEstimate,totalConsumed,totalLeft,progress') && e('0,0,0,0'); // 步骤1:正常调用情况 - 获取空小时对象 -r($productTest->getEmptyHourTest()) && p('totalEstimate') && e('0'); // 步骤2:验证totalEstimate字段 - 检查预估工时初始值 -r($productTest->getEmptyHourTest()) && p('totalConsumed') && e('0'); // 步骤3:验证totalConsumed字段 - 检查消耗工时初始值 -r($productTest->getEmptyHourTest()) && p('totalLeft') && e('0'); // 步骤4:验证totalLeft字段 - 检查剩余工时初始值 -r($productTest->getEmptyHourTest()) && p('progress') && e('0'); // 步骤5:验证progress字段 - 检查进度初始值 \ No newline at end of file diff --git a/module/product/test/zen/getexportdata.php b/module/product/test/zen/getexportdata.php deleted file mode 100755 index 200386c749..0000000000 --- a/module/product/test/zen/getexportdata.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getExportDataTest(1, 'all', 'id_desc', 0, null)) && p('0:name') && e('产品1'); -r($productTest->getExportDataTest(0, 'bysearch', 'id_desc', 1, null)) && p('0:name') && e('产品1'); -r($productTest->getExportDataTest(0, 'all', 'id_desc', 0, null)) && p('0:id') && e('1'); -r($productTest->getExportDataTest(-1, 'invalid', 'id_desc', 999, null)) && p() && e('0'); -r($productTest->getExportDataTest(1, 'all', 'name_asc', 0, 'mockPager')) && p('0:code') && e('product1'); \ No newline at end of file diff --git a/module/product/test/zen/getexportfields.php b/module/product/test/zen/getexportfields.php deleted file mode 100755 index e973be347c..0000000000 --- a/module/product/test/zen/getexportfields.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -gen(5); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->getExportFieldsTest()) && p('fieldCount') && e('7'); -r($productTest->getExportFieldsTest('light')) && p('noProductLine,noProgram') && e('1,1'); -r($productTest->getExportFieldsTest('normal', true)) && p('hasExtendFields') && e('1'); -r($productTest->getExportFieldsTest('normal', false, true)) && p('hasHeaderGroup') && e('1'); -r($productTest->getExportFieldsTest()) && p('type') && e('array'); \ No newline at end of file diff --git a/module/product/test/zen/getformfields4activate.php b/module/product/test/zen/getformfields4activate.php deleted file mode 100755 index c99fb7b84e..0000000000 --- a/module/product/test/zen/getformfields4activate.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -getFormFields4ActivateTest())) && p() && e('2'); // 步骤1:基本表单字段结构验证 - 返回2个字段 -r($productTest->getFormFields4ActivateTest()) && p('status:type') && e('string'); // 步骤2:status字段类型验证 -r($productTest->getFormFields4ActivateTest()) && p('status:control') && e('hidden'); // 步骤3:status字段控件验证 -r($productTest->getFormFields4ActivateTest()) && p('status:default') && e('normal'); // 步骤4:status字段默认值验证 -r($productTest->getFormFields4ActivateTest()) && p('comment:control') && e('editor'); // 步骤5:comment字段控件验证 \ No newline at end of file diff --git a/module/product/test/zen/getformfields4close.php b/module/product/test/zen/getformfields4close.php deleted file mode 100755 index d2022d3c7c..0000000000 --- a/module/product/test/zen/getformfields4close.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$table->code->range('product1,product2,product3,product4,product5,product6,product7,product8,product9,product10'); -$table->status->range('normal{5},closed{3},normal{2}'); -$table->program->range('0-2'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getFormFields4CloseTest()) && p('status:type') && e('string'); // 步骤1:验证status字段类型 -r($productTest->getFormFields4CloseTest()) && p('status:control') && e('hidden'); // 步骤2:验证status字段控制类型 -r($productTest->getFormFields4CloseTest()) && p('status:default') && e('close'); // 步骤3:验证status字段默认值 -r($productTest->getFormFields4CloseTest()) && p('comment:type') && e('string'); // 步骤4:验证comment字段类型 -r($productTest->getFormFields4CloseTest()) && p('comment:control') && e('editor'); // 步骤5:验证comment字段控制类型 \ No newline at end of file diff --git a/module/product/test/zen/getformfields4create.php b/module/product/test/zen/getformfields4create.php deleted file mode 100755 index 865bd73e83..0000000000 --- a/module/product/test/zen/getformfields4create.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -gen(10); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->getFormFields4CreateTest(1, '')) && p('program:default') && e('1'); -r($productTest->getFormFields4CreateTest(0, '')) && p('program:default') && e('~~'); -r($productTest->getFormFields4CreateTest(1, 'name=testProduct,type=normal')) && p('name:default') && e('testProduct'); -r($productTest->getFormFields4CreateTest(1, '')) && p('name:control') && e('text'); -r($productTest->getFormFields4CreateTest(1, 'name=test product, type=branch')) && p('type:default') && e('branch'); \ No newline at end of file diff --git a/module/product/test/zen/getformfields4edit.php b/module/product/test/zen/getformfields4edit.php deleted file mode 100755 index b25ca06ba4..0000000000 --- a/module/product/test/zen/getformfields4edit.php +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->program->range('0,1,2,0,1'); -$product->name->range('产品A,产品B,产品C,产品D,产品E'); -$product->code->range('productA,productB,productC,productD,productE'); -$product->type->range('normal'); -$product->status->range('normal'); -$product->PO->range('admin'); -$product->QD->range('admin'); -$product->RD->range('admin'); -$product->acl->range('open'); -$product->line->range('0'); -$product->desc->range('这是产品的描述'); -$product->gen(5); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->getFormFields4EditTest($productTest->getByIdTest(1))) && p('name:required') && e('1'); -r($productTest->getFormFields4EditTest($productTest->getByIdTest(1))) && p('changeProjects:type') && e('string'); -r($productTest->getFormFields4EditTest($productTest->getByIdTest(1))) && p('name:default') && e('产品A'); -r($productTest->getFormFields4EditTest($productTest->getByIdTest(1))) && p('program:control') && e('select'); -r($productTest->getFormFields4EditTest($productTest->getByIdTest(1))) && p('desc:width') && e('full'); \ No newline at end of file diff --git a/module/product/test/zen/getkanbanlist.php b/module/product/test/zen/getkanbanlist.php deleted file mode 100755 index cbf59df00b..0000000000 --- a/module/product/test/zen/getkanbanlist.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -getKanbanListTest('my')) && p() && e('0'); -r($productTest->getKanbanListTest('all')) && p() && e('2'); -r($productTest->getKanbanListTest('closed')) && p() && e('2'); -r($productTest->getKanbanListTest('other')) && p() && e('2'); -r($productTest->getKanbanListTest()) && p() && e('0'); \ No newline at end of file diff --git a/module/product/test/zen/getmoduleid.php b/module/product/test/zen/getmoduleid.php deleted file mode 100755 index 0fd8fcbf09..0000000000 --- a/module/product/test/zen/getmoduleid.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -getModuleIdTest(123, 'bymodule')) && p() && e('123'); // 步骤1:browseType为bymodule时直接返回param -r($productTest->getModuleIdTest(456, 'unclosed', 'product', '789', '')) && p() && e('789'); // 步骤2:product tab下有storyModule cookie -r($productTest->getModuleIdTest(456, 'unclosed', 'project', '', '999')) && p() && e('999'); // 步骤3:project tab下有storyModuleParam cookie -r($productTest->getModuleIdTest(456, 'bysearch', 'product', '789', '')) && p() && e('0'); // 步骤4:bysearch类型忽略cookie -r($productTest->getModuleIdTest(456, 'bybranch', 'product', '789', '')) && p() && e('0'); // 步骤5:bybranch类型忽略cookie \ No newline at end of file diff --git a/module/product/test/zen/getmoduletree.php b/module/product/test/zen/getmoduletree.php deleted file mode 100755 index 6fd6dba27e..0000000000 --- a/module/product/test/zen/getmoduletree.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->root->range('1-3'); -$table->branch->range('0'); -$table->name->range('模块1,模块2,模块3,子模块1,子模块2,功能模块,测试模块,开发模块,管理模块,系统模块'); -$table->path->range('`,1,`, `,2,`, `,3,`, `,1,4,`, `,1,5,`, `,2,6,`, `,2,7,`, `,3,8,`, `,3,9,`, `,1,10,`'); -$table->grade->range('1-2'); -$table->type->range('story'); -$table->deleted->range('0'); -$table->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品A,产品B,产品C,产品D,产品E'); -$productTable->type->range('normal{3},branch{2}'); -$productTable->status->range('normal'); -$productTable->deleted->range('0'); -$productTable->gen(5); - -$projectTable = zenData('project'); -$projectTable->id->range('1-3'); -$projectTable->name->range('项目A,项目B,项目C'); -$projectTable->type->range('project'); -$projectTable->status->range('doing'); -$projectTable->hasProduct->range('1'); -$projectTable->deleted->range('0'); -$projectTable->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getModuleTreeTest(0, 1, 'all', 0, 'story', 'unclosed')) && p() && e('array'); // 步骤1:正常情况获取模块树 -r($productTest->getModuleTreeTest(0, 1, 'all', 0, 'requirement', 'unclosed', true)) && p() && e('array'); // 步骤2:教程模式下获取模块树 -r($productTest->getModuleTreeTest(1, 1, 'all', 0, 'story', 'unclosed', false, 'projectstory')) && p() && e('string'); // 步骤3:projectstory模块获取模块树 -r($productTest->getModuleTreeTest(0, 999, 'all', 0, 'story', 'unclosed')) && p() && e('array'); // 步骤4:无效产品ID获取模块树 -r($productTest->getModuleTreeTest(0, 1, 'all', 0, 'epic', 'unclosed')) && p() && e('array'); // 步骤5:不同需求类型获取模块树 \ No newline at end of file diff --git a/module/product/test/zen/getproductlines.php b/module/product/test/zen/getproductlines.php deleted file mode 100755 index 7a2c918b56..0000000000 --- a/module/product/test/zen/getproductlines.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_getproductlines', false, 2)->gen(5); - -$moduleTable = zenData('module'); -$moduleTable->loadYaml('module_getproductlines', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getProductLinesTest(array(), 'structure')) && p() && e('valid'); // 步骤1:空数组参数,期望返回有效的数组结构 -r($productTest->getProductLinesTest(array(1), 'count')) && p() && e('2'); // 步骤2:单个项目集ID,期望返回两个元素的数组 -r($productTest->getProductLinesTest(array(1, 2), 'pairCount')) && p() && e('2'); // 步骤3:多个项目集ID,期望有2个项目集映射 -r($productTest->getProductLinesTest(array(999), 'productCount')) && p() && e('0'); // 步骤4:不存在的项目集ID,期望产品线数量为0 -r($productTest->getProductLinesTest(array(1, 999), 'pairCount')) && p() && e('2'); // 步骤5:混合ID,期望有2个项目集映射 \ No newline at end of file diff --git a/module/product/test/zen/getproductlist4kanban.php b/module/product/test/zen/getproductlist4kanban.php deleted file mode 100755 index 4878813827..0000000000 --- a/module/product/test/zen/getproductlist4kanban.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -getProductList4KanbanTest(array(), array(), array(), array(), array())) && p() && e(0); // 步骤1:空参数测试 -r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'normal', 'program' => 1)), array(), array(), array(), array())) && p() && e(1); // 步骤2:正常产品列表测试 -r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'closed', 'program' => 1)), array(), array(), array(), array())) && p() && e(0); // 步骤3:产品状态过滤测试 -r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'normal', 'program' => 1)), array(1 => array((object)array('id' => 1, 'title' => '计划A'))), array(), array(), array())) && p() && e(1); // 步骤4:包含计划数据测试 -r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'normal', 'program' => 1)), array(), array(1 => (object)array('id' => 1, 'name' => '项目A')), array(), array(1 => array(1 => (object)array('id' => 1, 'name' => '项目A'))))) && p() && e(1); // 步骤5:项目关联测试 \ No newline at end of file diff --git a/module/product/test/zen/getproductplans.php b/module/product/test/zen/getproductplans.php deleted file mode 100755 index d0c898703b..0000000000 --- a/module/product/test/zen/getproductplans.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品A,产品B,产品C,产品D,产品E'); -$product->code->range('PA,PB,PC,PD,PE'); -$product->status->range('normal{5}'); -$product->type->range('normal{5}'); -$product->gen(5); - -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目A,项目B,项目C'); -$project->status->range('doing{3}'); -$project->type->range('project{3}'); -$project->gen(3); - -$projectProduct = zenData('projectproduct'); -$projectProduct->project->range('1{2},2{2}'); -$projectProduct->product->range('1,2,3,4'); -$projectProduct->branch->range('0{4}'); -$projectProduct->gen(4); - -$productPlan = zenData('productplan'); -$productPlan->id->range('1-6'); -$productPlan->product->range('1{2},2{2},3{2}'); -$productPlan->title->range('计划A1,计划A2,计划B1,计划B2,计划C1,计划C2'); -$productPlan->status->range('wait{2},doing{2},done{2}'); -$productPlan->begin->range('`2024-01-01`,`2024-02-01`,`2024-03-01`,`2024-04-01`,`2024-05-01`,`2024-06-01`'); -$productPlan->end->range('`2024-06-30`,`2024-07-31`,`2024-08-31`,`2024-09-30`,`2024-10-31`,`2024-11-30`'); -$productPlan->gen(6); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->getProductPlansTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), 1, 'story', true)) && p() && e('0'); // 步骤1:正常项目需求且需求类型为story,但由于getPlans方法逻辑实际返回0 -r($productTest->getProductPlansTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), 1, 'requirement', true)) && p() && e('0'); // 步骤2:项目需求但需求类型非story -r($productTest->getProductPlansTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), 1, 'story', false)) && p() && e('0'); // 步骤3:非项目需求情况 -r($productTest->getProductPlansTest(array(), 1, 'story', true)) && p() && e('0'); // 步骤4:空项目产品数组 -r($productTest->getProductPlansTest(array(1 => (object)array('id' => 1)), 0, 'story', true)) && p() && e('0'); // 步骤5:项目ID为0的边界情况 \ No newline at end of file diff --git a/module/product/test/zen/getproducts4dropmenu.php b/module/product/test/zen/getproducts4dropmenu.php deleted file mode 100755 index b2cef56fc5..0000000000 --- a/module/product/test/zen/getproducts4dropmenu.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$product->name->range('产品A,产品B,产品C,产品D,产品E,Shadow产品,Workflow产品,Feedback产品,Project产品,Normal产品'); -$product->code->range('PRODA,PRODB,PRODC,PRODD,PRODE,SHADOWS,WORKFLOW,FEEDBACK,PROJECT,NORMAL'); -$product->shadow->range('0{8},1{2}'); -$product->status->range('normal{7},closed{3}'); -$product->type->range('normal'); -$product->acl->range('open'); -$product->vision->range('rnd'); -$product->deleted->range('0'); -$product->gen(10); - -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目A,项目B,项目C'); -$project->status->range('doing'); -$project->type->range('project'); -$project->deleted->range('0'); -$project->gen(3); - -$projectproduct = zenData('projectproduct'); -$projectproduct->project->range('1-3'); -$projectproduct->product->range('1-3'); -$projectproduct->gen(3); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$productTest = new productTest(); - -// 5. 执行测试步骤 - 检查结果数量 -r($productTest->getProducts4DropMenuTest('0', '')) && p() && e('8'); // 步骤1:正常情况获取产品下拉菜单数据(不包含影子产品) -r($productTest->getProducts4DropMenuTest('all', '')) && p() && e('10'); // 步骤2:获取所有产品包括影子产品 -r($productTest->getProducts4DropMenuTest('0', 'testmodule')) && p() && e('8'); // 步骤3:指定module参数 -r($productTest->getProducts4DropMenuTest('0', '')) && p() && e('8'); // 步骤4:正常参数测试 -r($productTest->getProducts4DropMenuTest('all', 'any')) && p() && e('10'); // 步骤5:边界参数测试 \ No newline at end of file diff --git a/module/product/test/zen/getprojectproductlist.php b/module/product/test/zen/getprojectproductlist.php deleted file mode 100755 index 1952204955..0000000000 --- a/module/product/test/zen/getprojectproductlist.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_getprojectproductlist', false, 2)->gen(5); -zenData('projectproduct')->loadYaml('projectproduct_getprojectproductlist', false, 2)->gen(10); -zenData('project')->loadYaml('project_getprojectproductlist', false, 2)->gen(3); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->getProjectProductListZenTest(1, true)) && p() && e('0'); -r($productTest->getProjectProductListZenTest(0, true)) && p() && e('5'); -r($productTest->getProjectProductListZenTest(999, true)) && p() && e('0'); -r($productTest->getProjectProductListZenTest(1, false)) && p() && e('0'); -r($productTest->getProjectProductListZenTest(-1, true)) && p() && e('0'); \ No newline at end of file diff --git a/module/product/test/zen/getstories.php b/module/product/test/zen/getstories.php deleted file mode 100755 index b2e37567c6..0000000000 --- a/module/product/test/zen/getstories.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$product->name->range('产品{1-3}'); -$product->code->range('product{1-3}'); -$product->type->range('normal'); -$product->status->range('normal'); -$product->vision->range('rnd'); -$product->gen(3); - -$story = zenData('story'); -$story->id->range('1-10'); -$story->product->range('1-3'); -$story->title->range('需求{1-10}'); -$story->type->range('story{8},requirement{2}'); -$story->status->range('active{6},closed{2},draft{2}'); -$story->stage->range('wait,planned,projected,developing,testing,verified,released,closed'); -$story->vision->range('rnd'); -$story->module->range('0{5},1001-1003{5}'); -$story->gen(10); - -$module = zenData('module'); -$module->id->range('1001-1003'); -$module->root->range('1-3'); -$module->name->range('模块{1-3}'); -$module->type->range('story'); -$module->gen(3); - -$project = zenData('project'); -$project->id->range('1-2'); -$project->name->range('项目{1-2}'); -$project->type->range('project'); -$project->status->range('doing'); -$project->hasProduct->range('1'); -$project->gen(2); - -$projectproduct = zenData('projectproduct'); -$projectproduct->project->range('1-2'); -$projectproduct->product->range('1-2'); -$projectproduct->gen(2); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r(count($productTest->getStoriesZenTest(0, 1, '', 0, 0, 'story', 'allstory', 'id_desc', null))) && p() && e('3'); // 步骤1:正常获取产品需求列表 -r(count($productTest->getStoriesZenTest(1, 1, '', 0, 0, 'story', 'allstory', 'id_desc', null))) && p() && e('0'); // 步骤2:获取项目需求列表 -r(count($productTest->getStoriesZenTest(0, 1, '', 1001, 0, 'story', 'bymodule', 'id_desc', null))) && p() && e('1'); // 步骤3:按模块获取需求列表 -r(count($productTest->getStoriesZenTest(0, 1, '', 0, 0, 'requirement', 'allstory', 'id_desc', null))) && p() && e('1'); // 步骤4:按类型获取需求列表 -r(count($productTest->getStoriesZenTest(0, 999, '', 0, 0, 'story', 'allstory', 'id_desc', null))) && p() && e('0'); // 步骤5:无效产品ID测试 \ No newline at end of file diff --git a/module/product/test/zen/getstoriesbystorytype.php b/module/product/test/zen/getstoriesbystorytype.php deleted file mode 100755 index 697619e060..0000000000 --- a/module/product/test/zen/getstoriesbystorytype.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-20'); -$table->product->range('1-3'); -$table->type->range('story{5},requirement{5},epic{5}'); -$table->title->range('需求1,需求2,需求3,需求4,需求5,用户需求1,用户需求2,用户需求3,用户需求4,用户需求5,史诗1,史诗2,史诗3,史诗4,史诗5'); -$table->pri->range('1-4'); -$table->status->range('active{10},draft{5},closed{5}'); -$table->deleted->range('0{18},1{2}'); -$table->parent->range('0{18},1{2}'); -$table->isParent->range('0{18},1{2}'); -$table->version->range('1'); -$table->vision->range('rnd'); -$table->gen(20); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r(count($productTest->getStoriesByStoryTypeTest(1, '', 'all', 'id_desc'))) && p() && e('6'); // 步骤1:正常情况获取所有类型需求 -r(count($productTest->getStoriesByStoryTypeTest(1, '', 'requirement', 'id_desc'))) && p() && e('2'); // 步骤2:指定获取用户需求 -r(count($productTest->getStoriesByStoryTypeTest(1, '', 'story', 'id_desc'))) && p() && e('3'); // 步骤3:指定获取研发需求 -r(count($productTest->getStoriesByStoryTypeTest(999, '', 'all', 'id_desc'))) && p() && e('0'); // 步骤4:使用不存在的产品ID -r(count($productTest->getStoriesByStoryTypeTest(1, '', 'all', 'pri_desc'))) && p() && e('6'); // 步骤5:测试按优先级排序功能 \ No newline at end of file diff --git a/module/product/test/zen/getstoryidlist.php b/module/product/test/zen/getstoryidlist.php deleted file mode 100755 index 5cf3b682b9..0000000000 --- a/module/product/test/zen/getstoryidlist.php +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$story->title->range('需求{1-10}'); -$story->type->range('story'); -$story->status->range('active'); -$story->product->range('1'); -$story->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -// 步骤1:包含子需求的需求列表测试 -$storiesWithChildren = array(); -$story1 = new stdClass(); -$story1->id = 1; -$story1->children = array(); -$child1 = new stdClass(); -$child1->id = 2; -$child2 = new stdClass(); -$child2->id = 3; -$story1->children[] = $child1; -$story1->children[] = $child2; -$storiesWithChildren[] = $story1; - -$story2 = new stdClass(); -$story2->id = 4; -$storiesWithChildren[] = $story2; - -r(count($productTest->getStoryIdListTest($storiesWithChildren))) && p() && e('4'); // 步骤1:包含子需求的需求列表测试 - -// 步骤2:无子需求的普通需求列表测试 -$storiesWithoutChildren = array(); -$story3 = new stdClass(); -$story3->id = 5; -$storiesWithoutChildren[] = $story3; - -$story4 = new stdClass(); -$story4->id = 6; -$storiesWithoutChildren[] = $story4; - -r(count($productTest->getStoryIdListTest($storiesWithoutChildren))) && p() && e('2'); // 步骤2:无子需求的普通需求列表测试 - -// 步骤3:空需求列表测试 -$emptyStories = array(); -r(count($productTest->getStoryIdListTest($emptyStories))) && p() && e('0'); // 步骤3:空需求列表测试 - -// 步骤4:单个需求无子需求测试 -$singleStory = array(); -$story5 = new stdClass(); -$story5->id = 7; -$singleStory[] = $story5; - -r(count($productTest->getStoryIdListTest($singleStory))) && p() && e('1'); // 步骤4:单个需求无子需求测试 - -// 步骤5:多层嵌套子需求测试 -$complexStories = array(); -$story6 = new stdClass(); -$story6->id = 8; -$story6->children = array(); -$child3 = new stdClass(); -$child3->id = 9; -$child4 = new stdClass(); -$child4->id = 10; -$child5 = new stdClass(); -$child5->id = 11; -$story6->children[] = $child3; -$story6->children[] = $child4; -$story6->children[] = $child5; -$complexStories[] = $story6; - -r(count($productTest->getStoryIdListTest($complexStories))) && p() && e('4'); // 步骤5:多层嵌套子需求测试 \ No newline at end of file diff --git a/module/product/test/zen/getunauthprogramsofproducts.php b/module/product/test/zen/getunauthprogramsofproducts.php deleted file mode 100755 index 4658890d65..0000000000 --- a/module/product/test/zen/getunauthprogramsofproducts.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_getunauth', false, 2)->gen(10); - -$projectTable = zenData('project'); -$projectTable->loadYaml('project_getunauth', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 测试步骤1:正常情况下获取未授权项目集 -$products = array( - (object)array('id' => 1, 'program' => 1, 'name' => '产品1'), - (object)array('id' => 2, 'program' => 2, 'name' => '产品2'), - (object)array('id' => 3, 'program' => 3, 'name' => '产品3') -); -$authPrograms = array(1 => '项目集1'); -r($productTest->getUnauthProgramsOfProductsTest($products, $authPrograms)) && p('2,3') && e('项目集2,项目集3'); - -// 测试步骤2:产品列表为空时的处理 -$emptyProducts = array(); -$authPrograms = array(1 => '项目集1'); -r($productTest->getUnauthProgramsOfProductsTest($emptyProducts, $authPrograms)) && p() && e('0'); - -// 测试步骤3:已授权项目集包含所有产品项目集 -$products = array( - (object)array('id' => 1, 'program' => 1, 'name' => '产品1'), - (object)array('id' => 2, 'program' => 2, 'name' => '产品2') -); -$authPrograms = array(1 => '项目集1', 2 => '项目集2'); -r($productTest->getUnauthProgramsOfProductsTest($products, $authPrograms)) && p() && e('0'); - -// 测试步骤4:产品没有关联项目集的情况 -$products = array( - (object)array('id' => 1, 'program' => 0, 'name' => '产品1'), - (object)array('id' => 2, 'program' => '', 'name' => '产品2') -); -$authPrograms = array(1 => '项目集1'); -r($productTest->getUnauthProgramsOfProductsTest($products, $authPrograms)) && p() && e('0'); - -// 测试步骤5:混合场景:部分产品有未授权项目集 -$products = array( - (object)array('id' => 1, 'program' => 1, 'name' => '产品1'), // 已授权 - (object)array('id' => 2, 'program' => 0, 'name' => '产品2'), // 无项目集 - (object)array('id' => 3, 'program' => 3, 'name' => '产品3'), // 未授权 - (object)array('id' => 4, 'program' => 4, 'name' => '产品4') // 未授权 -); -$authPrograms = array(1 => '项目集1', 2 => '项目集2'); -r($productTest->getUnauthProgramsOfProductsTest($products, $authPrograms)) && p('3,4') && e('项目集3,项目集4'); \ No newline at end of file diff --git a/module/product/test/zen/preparemanagelineextras.php b/module/product/test/zen/preparemanagelineextras.php deleted file mode 100755 index 8458e541ba..0000000000 --- a/module/product/test/zen/preparemanagelineextras.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -> 产品线1 -步骤2:边界值-空数据 >> 0 -步骤4:空名称过滤 >> 产品线2 -步骤5:单个项目集多产品线 >> 3 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/product.unittest.class.php'; - -// 2. 用户登录(选择合适角色) -su('admin'); - -// 3. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 4. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->prepareManageLineExtrasTest(array( - 'modules' => array('1' => '产品线1', '2' => '产品线2'), - 'programs' => array('1' => '1', '2' => '2') -))) && p('1:1') && e('产品线1'); // 步骤1:正常情况-不同项目集 - -r($productTest->prepareManageLineExtrasTest(array( - 'modules' => array(), - 'programs' => array() -))) && p() && e('0'); // 步骤2:边界值-空数据 - -r($productTest->prepareManageLineExtrasTest(array( - 'modules' => array('1' => '产品线1', '2' => '产品线1'), - 'programs' => array('1' => '1', '2' => '1') -))) && p() && e(false); // 步骤3:异常输入-重复名称 - -r($productTest->prepareManageLineExtrasTest(array( - 'modules' => array('1' => '', '2' => '产品线2'), - 'programs' => array('1' => '1', '2' => '2') -))) && p('2:2') && e('产品线2'); // 步骤4:空名称过滤 - -r($productTest->prepareManageLineExtrasTest(array( - 'modules' => array('1' => '产品线1', '2' => '产品线2', '3' => '产品线3'), - 'programs' => array('1' => '1', '2' => '1', '3' => '1') -))) && p('1,count') && e('3'); // 步骤5:单个项目集多产品线 \ No newline at end of file diff --git a/module/product/test/zen/processprojectlistdata.php b/module/product/test/zen/processprojectlistdata.php deleted file mode 100755 index 847989d620..0000000000 --- a/module/product/test/zen/processprojectlistdata.php +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env php -id = 1; -$project1->name = '测试项目1'; -$project1->PM = 'admin'; -$project1->status = 'doing'; -$project1->budget = '100000'; -$project1->budgetUnit = 'CNY'; -$project1->estimate = 0; -$project1->consumed = 0; -$project1->left = 0; -$project1->hasProduct = 1; -$projectList[] = $project1; - -$project2 = new stdClass(); -$project2->id = 2; -$project2->name = '测试项目2'; -$project2->PM = 'user1'; -$project2->status = 'wait'; -$project2->budget = '200000'; -$project2->budgetUnit = 'CNY'; -$project2->estimate = 0; -$project2->consumed = 0; -$project2->left = 0; -$project2->hasProduct = 1; -$projectList[] = $project2; - -$emptyProjectList = array(); - -$singleProject = array(); -$project = new stdClass(); -$project->id = 1; -$project->name = '单个测试项目'; -$project->PM = 'admin'; -$project->status = 'doing'; -$project->budget = '150000'; -$project->budgetUnit = 'CNY'; -$project->estimate = 0; -$project->consumed = 0; -$project->left = 0; -$project->hasProduct = 1; -$singleProject[] = $project; - -r($productTest->processProjectListDataTest($projectList)) && p('0:name') && e('测试项目1'); // 步骤1:正常项目列表数据处理 -r($productTest->processProjectListDataTest($emptyProjectList)) && p() && e('0'); // 步骤2:空项目列表数据处理 -r($productTest->processProjectListDataTest($singleProject)) && p('0:name') && e('单个测试项目'); // 步骤3:单个项目数据处理验证 -r($productTest->processProjectListDataTest($projectList)) && p() && e('2'); // 步骤4:多个项目数据批量处理 -r($productTest->processProjectListDataTest($projectList)) && p('0:from') && e('project'); // 步骤5:项目数据字段完整性验证 \ No newline at end of file diff --git a/module/product/test/zen/responseafterbatchedit.php b/module/product/test/zen/responseafterbatchedit.php deleted file mode 100755 index 6161f185a7..0000000000 --- a/module/product/test/zen/responseafterbatchedit.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->program->range('1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->code->range('product1,product2,product3,product4,product5'); -$table->type->range('normal{3},branch{2}'); -$table->status->range('normal{4},closed{1}'); -$table->createdBy->range('admin{5}'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->responseAfterBatchEditTest(1, 'program')) && p('result,message,load') && e('success,保存成功,test_link_program_product_programID=programID=1'); // 步骤1:有项目集ID的情况 -r($productTest->responseAfterBatchEditTest(0, 'program')) && p('result,message,load') && e('success,保存成功,test_link_program_productView'); // 步骤2:无项目集ID的情况 -r($productTest->responseAfterBatchEditTest(0, 'product')) && p('result,message,load') && e('success,保存成功,test_link_product_all'); // 步骤3:在产品模块下 -r($productTest->responseAfterBatchEditTest(0, 'program')) && p('result,message,load') && e('success,保存成功,test_link_program_productView'); // 步骤4:空项目集ID情况 -r($productTest->responseAfterBatchEditTest(-1, 'program')) && p('result,message,load') && e('success,保存成功,test_link_program_product_programID=programID=-1'); // 步骤5:负数项目集ID情况 \ No newline at end of file diff --git a/module/product/test/zen/responseaftercreate.php b/module/product/test/zen/responseaftercreate.php deleted file mode 100755 index 5f8534628f..0000000000 --- a/module/product/test/zen/responseaftercreate.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->program->range('1-3'); -$table->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$table->code->range('PRD001-PRD010'); -$table->status->range('normal{8},closed{2}'); -$table->type->range('normal{10}'); -$table->gen(10); - -$programTable = zenData('project'); -$programTable->id->range('1-3'); -$programTable->name->range('项目集1,项目集2,项目集3'); -$programTable->type->range('program{3}'); -$programTable->status->range('wait{3}'); -$programTable->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->responseAfterCreateTest(1, 1)) && p('result,message') && e('success,保存成功'); // 步骤1:正常情况 -r($productTest->responseAfterCreateTest(2, 2, 'json')) && p('result,id') && e('success,2'); // 步骤2:JSON视图 -r($productTest->responseAfterCreateTest(3, 3, '', 'hook message')) && p('result,message') && e('success,hook message'); // 步骤3:钩子消息 -r($productTest->responseAfterCreateTest(999, 1)) && p('result') && e('success'); // 步骤4:无效产品ID -r($productTest->responseAfterCreateTest(4, 0)) && p('result') && e('success'); // 步骤5:无项目集ID \ No newline at end of file diff --git a/module/product/test/zen/responseafteredit.php b/module/product/test/zen/responseafteredit.php deleted file mode 100755 index dfb90604eb..0000000000 --- a/module/product/test/zen/responseafteredit.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('产品A,产品B,产品C'); -$table->status->range('normal'); -$table->program->range('0,1,2'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->responseAfterEditTest(1, 0, '')) && p('result,load') && e('success,test_link_product_view'); // 步骤1:正常产品编辑,无钩子消息 -r($productTest->responseAfterEditTest(2, 1, '')) && p('result,load') && e('success,test_link_program_product'); // 步骤2:程序集产品编辑,无钩子消息 -r($productTest->responseAfterEditTest(3, 0, '自定义钩子消息')) && p('result,message') && e('success,自定义钩子消息'); // 步骤3:正常产品编辑,有钩子消息 -r($productTest->responseAfterEditTest(4, 2, '钩子执行成功')) && p('result,load') && e('success,test_link_program_product'); // 步骤4:程序集产品编辑,有钩子消息 -r($productTest->responseAfterEditTest(0, 0, '')) && p('result') && e('success'); // 步骤5:无效productID测试 \ No newline at end of file diff --git a/module/product/test/zen/responsenotfound4view.php b/module/product/test/zen/responsenotfound4view.php deleted file mode 100755 index b2a156703f..0000000000 --- a/module/product/test/zen/responsenotfound4view.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -responseNotFound4ViewTest('api')) && p('status') && e('fail'); // 步骤1:API模式返回失败状态 -r($productTest->responseNotFound4ViewTest('normal')) && p('result') && e('success'); // 步骤2:非API模式返回成功结果 -r($productTest->responseNotFound4ViewTest('api')) && p('code') && e(404); // 步骤3:API模式返回404错误码 -r($productTest->responseNotFound4ViewTest('normal')) && p('load:locate') && e('/zentao/product-all.html'); // 步骤4:非API模式跳转地址 -r($productTest->responseNotFound4ViewTest('api')) && p('message') && e('404 Not found'); // 步骤5:API模式错误消息 \ No newline at end of file diff --git a/module/product/test/zen/saveandmodifycookie4browse.php b/module/product/test/zen/saveandmodifycookie4browse.php deleted file mode 100755 index 7ade000380..0000000000 --- a/module/product/test/zen/saveandmodifycookie4browse.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -loadYaml('product', false, 2)->gen(10); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->saveAndModifyCookie4BrowseTest(1, 'main', 0, '', 'id_desc')) && p() && e('1'); -r($productTest->saveAndModifyCookie4BrowseTest(2, 'main', 0, '', 'id_desc')) && p() && e('1'); -r($productTest->saveAndModifyCookie4BrowseTest(1, 'main', 10, 'bymodule', 'id_desc')) && p() && e('1'); -r($productTest->saveAndModifyCookie4BrowseTest(1, 'dev', 0, 'bybranch', 'id_desc')) && p() && e('1'); -r($productTest->saveAndModifyCookie4BrowseTest(1, 'main', 5, 'bymodule', 'id_desc')) && p() && e('1'); \ No newline at end of file diff --git a/module/product/test/zen/savebackurisession4dashboard.php b/module/product/test/zen/savebackurisession4dashboard.php deleted file mode 100755 index 831f57eeac..0000000000 --- a/module/product/test/zen/savebackurisession4dashboard.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -saveBackUriSession4DashboardTest(1)) && p() && e('void'); -r($productTest->saveBackUriSession4DashboardTest(2)) && p() && e('not empty'); -r($productTest->saveBackUriSession4DashboardTest(3)) && p() && e('not empty'); -r($productTest->saveBackUriSession4DashboardTest(4)) && p() && e('true'); -r($productTest->saveBackUriSession4DashboardTest(5)) && p() && e('true'); \ No newline at end of file diff --git a/module/product/test/zen/savebackurisessionfordynamic.php b/module/product/test/zen/savebackurisessionfordynamic.php deleted file mode 100755 index c9d7ec5fa3..0000000000 --- a/module/product/test/zen/savebackurisessionfordynamic.php +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env php -saveBackUriSessionForDynamicTest()) && p('result') && e('1'); -r($productTest->saveBackUriSessionForDynamicTest()) && p('productList') && e('/test/uri'); -r($productTest->saveBackUriSessionForDynamicTest()) && p('productPlanList') && e('/test/uri'); -r($productTest->saveBackUriSessionForDynamicTest()) && p('releaseList') && e('/test/uri'); -r($productTest->saveBackUriSessionForDynamicTest()) && p('sessionCount') && e('11'); \ No newline at end of file diff --git a/module/product/test/zen/savesession4browse.php b/module/product/test/zen/savesession4browse.php deleted file mode 100755 index bf2e40f32e..0000000000 --- a/module/product/test/zen/savesession4browse.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->type->range('normal{3},branch{2}'); -$table->status->range('normal'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->saveSession4BrowseTest((object)array('id' => 1, 'type' => 'normal'), 'unclosed')) && p('productList,storyList') && e('true,true'); // 步骤1:正常情况 -r($productTest->saveSession4BrowseTest(null, 'closed')) && p('currentProductType') && e('empty'); // 步骤2:空产品对象 -r($productTest->saveSession4BrowseTest((object)array('id' => 2, 'type' => 'branch'), 'bymodule')) && p('storyBrowseType') && e('empty'); // 步骤3:bymodule类型 -r($productTest->saveSession4BrowseTest((object)array('id' => 3, 'type' => 'normal'), 'bybranch')) && p('storyBrowseType') && e('empty'); // 步骤4:bybranch类型 -r($productTest->saveSession4BrowseTest((object)array('id' => 4, 'type' => 'normal'), 'active', 'project')) && p('storyList') && e('true'); // 步骤5:项目标签 \ No newline at end of file diff --git a/module/product/test/zen/savesession4roadmap.php b/module/product/test/zen/savesession4roadmap.php deleted file mode 100755 index f701345b96..0000000000 --- a/module/product/test/zen/savesession4roadmap.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -saveSession4RoadmapTest('/product/roadmap/')) && p('product_releaseList') && e('/product/roadmap/'); // 步骤1:正常情况 -r($productTest->saveSession4RoadmapTest('/empty/test/')) && p('product_releaseList') && e('/empty/test/'); // 步骤2:另一个URI -r($productTest->saveSession4RoadmapTest('/custom/path/')) && p('product_releaseList') && e('/custom/path/'); // 步骤3:自定义URI -r($productTest->saveSession4RoadmapTest('/test/uri/')) && p('product_productPlanList') && e('/test/uri/'); // 步骤4:验证productPlanList -r($productTest->saveSession4RoadmapTest('/final/test/')) && p('product_releaseList,product_productPlanList') && e('/final/test/,/final/test/'); // 步骤5:完整验证 \ No newline at end of file diff --git a/module/product/test/zen/setcreatemenu.php b/module/product/test/zen/setcreatemenu.php deleted file mode 100755 index dbc5022a9d..0000000000 --- a/module/product/test/zen/setcreatemenu.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -setMenu属性productMenuCalled @1 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/product.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -$table = zenData('product'); -$table->id->range('1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->status->range('normal{3},closed{2}'); -$table->type->range('normal'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->setCreateMenuTest(1)) && p('programTabHandled') && e('1'); // 步骤1:program tab调用setMenuVars功能 -r($productTest->setCreateMenuTest(2)) && p('docSubMenuRemoved') && e('1'); // 步骤2:doc tab移除子菜单功能 -r($productTest->setCreateMenuTest(0)) && p('nonMhtmlReturn') && e('1'); // 步骤3:非mhtml视图类型直接返回 -r($productTest->setCreateMenuTest(3)) && p('projectStoryHandled') && e('1'); // 步骤4:projectstory模块story方法特殊处理 -r($productTest->setCreateMenuTest(4)) && p('productMenuCalled') && e('1'); // 步骤5:常规mhtml视图调用product->setMenu \ No newline at end of file diff --git a/module/product/test/zen/seteditmenu.php b/module/product/test/zen/seteditmenu.php deleted file mode 100755 index a8ef09ac90..0000000000 --- a/module/product/test/zen/seteditmenu.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->program->range('1-5,0{5}'); -$table->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$table->status->range('normal{8},closed{2}'); -$table->type->range('normal'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->setEditMenuTest(1, 1)) && p('setMenuVarsCalled') && e('1'); // 步骤1:项目集ID存在时调用setMenuVars功能 -r($productTest->setEditMenuTest(1, 0)) && p('productMenuSet') && e('1'); // 步骤2:项目集ID不存在时调用产品菜单设置 -r($productTest->setEditMenuTest(1, 2)) && p('paramsValid') && e('1'); // 步骤3:参数有效性验证 -r($productTest->setEditMenuTest(2, 3)) && p('branchLogic') && e('1'); // 步骤4:条件分支逻辑验证 -r($productTest->setEditMenuTest(3, 0)) && p('methodCompleted') && e('1'); // 步骤5:方法执行完整性验证 \ No newline at end of file diff --git a/module/product/test/zen/setmenu4all.php b/module/product/test/zen/setmenu4all.php deleted file mode 100755 index 8b56eb88e4..0000000000 --- a/module/product/test/zen/setmenu4all.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->status->range('normal{3},closed{2}'); -$table->type->range('normal'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($productTest->setMenu4AllTest()) && p('normalView') && e('1'); // 步骤1:常规视图情况 -r($productTest->setMenu4AllTest()) && p('mobileView') && e('1'); // 步骤2:移动视图情况 -r($productTest->setMenu4AllTest()) && p('hasProducts') && e('1'); // 步骤3:产品访问权限检查 -r($productTest->setMenu4AllTest()) && p('uriSaved') && e('1'); // 步骤4:URI保存功能 -r($productTest->setMenu4AllTest()) && p('normalView,mobileView,hasProducts,uriSaved') && e('1,1,1,1'); // 步骤5:综合功能测试 \ No newline at end of file diff --git a/module/product/test/zen/setprojectmenu.php b/module/product/test/zen/setprojectmenu.php deleted file mode 100755 index 9fd56afd4c..0000000000 --- a/module/product/test/zen/setprojectmenu.php +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$table->code->range('product1,product2,product3,product4,product5,product6,product7,product8,product9,product10'); -$table->status->range('normal'); -$table->PO->range('admin'); -$table->program->range('1-3:R'); -$table->type->range('normal'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($productTest->setProjectMenuTest(1, 'main', '')) && p('branchLogic,paramsValid') && e('1,1'); // 步骤1:正常情况 -r($productTest->setProjectMenuTest(2, '', 'dev')) && p('branchLogic,paramsValid') && e('1,1'); // 步骤2:分支逻辑处理 -r($productTest->setProjectMenuTest(3, 'release', '')) && p('cookieSet,paramsValid') && e('1,1'); // 步骤3:Cookie设置验证 -r($productTest->setProjectMenuTest(4, 'master', 'feature')) && p('sessionSet,paramsValid') && e('1,1'); // 步骤4:Session设置验证 -r($productTest->setProjectMenuTest(0, 'main', '')) && p('branchLogic,paramsValid') && e('1,0'); // 步骤5:边界值测试 \ No newline at end of file diff --git a/module/product/test/zen/setselectformoptions.php b/module/product/test/zen/setselectformoptions.php deleted file mode 100755 index d43f3f0a4e..0000000000 --- a/module/product/test/zen/setselectformoptions.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -> name -步骤2:空项目集ID的字段处理 >> name -步骤3:包含用户选项的字段处理 >> QD -步骤4:包含分组选项的字段处理 >> groups -步骤5:包含产品线选项的字段处理 >> line - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/product.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -// 简化数据准备,避免数据库字段不匹配的问题 - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productTest = new productTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($productTest->setSelectFormOptionsTest(1, array( - 'name' => array('type' => 'string', 'control' => 'input'), - 'PO' => array('type' => 'string', 'control' => 'picker', 'options' => 'users') -))) && p('name:name') && e('name'); // 步骤1:正常情况带项目集ID的字段处理 - -r($productTest->setSelectFormOptionsTest(0, array( - 'name' => array('type' => 'string', 'control' => 'input'), - 'code' => array('type' => 'string', 'control' => 'input') -))) && p('name:name') && e('name'); // 步骤2:空项目集ID的字段处理 - -r($productTest->setSelectFormOptionsTest(1, array( - 'QD' => array('type' => 'string', 'control' => 'picker', 'options' => 'users'), - 'RD' => array('type' => 'string', 'control' => 'picker', 'options' => 'users') -))) && p('QD:name') && e('QD'); // 步骤3:包含用户选项的字段处理 - -r($productTest->setSelectFormOptionsTest(1, array( - 'groups' => array('type' => 'array', 'control' => 'picker'), - 'status' => array('type' => 'string', 'control' => 'radio') -))) && p('groups:name') && e('groups'); // 步骤4:包含分组选项的字段处理 - -r($productTest->setSelectFormOptionsTest(1, array( - 'line' => array('type' => 'int', 'control' => 'picker'), - 'program' => array('type' => 'int', 'control' => 'picker') -))) && p('line:name') && e('line'); // 步骤5:包含产品线选项的字段处理 \ No newline at end of file diff --git a/module/product/test/zen/setshowerrornonemenu.php b/module/product/test/zen/setshowerrornonemenu.php deleted file mode 100755 index d418678cc8..0000000000 --- a/module/product/test/zen/setshowerrornonemenu.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -setShowErrorNoneMenuTest('mhtml', 'testcase', 1)) && p('mhtmlMenuCalled') && e('1'); -r($productTest->setShowErrorNoneMenuTest('qa', 'testcase', 1)) && p('qaTestcaseHandled') && e('1'); -r($productTest->setShowErrorNoneMenuTest('project', 'bug', 1)) && p('projectMenuCalled,projectSubModuleSet') && e('1,1'); -r($productTest->setShowErrorNoneMenuTest('execution', 'testtask', 1)) && p('executionMenuCalled,executionSubModuleSet') && e('1,1'); -r($productTest->setShowErrorNoneMenuTest('invalid', 'test', 0)) && p('paramsValid') && e('0'); \ No newline at end of file diff --git a/module/product/test/zen/setshowerrornonemenu4execution.php b/module/product/test/zen/setshowerrornonemenu4execution.php deleted file mode 100755 index 1fdb835a5d..0000000000 --- a/module/product/test/zen/setshowerrornonemenu4execution.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('执行1,执行2,执行3,执行4,执行5,执行6,执行7,执行8,执行9,执行10'); -$table->type->range('sprint{10}'); -$table->status->range('doing{5},wait{3},closed{2}'); -$table->grade->range('2'); -$table->parent->range('11-20'); -$table->path->range(',11,1,,12,2,,13,3,,14,4,,15,5,,16,6,,17,7,,18,8,,19,9,,20,10,'); -$table->gen(10); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->setShowErrorNoneMenu4ExecutionTest('bug', 1)) && p('executionMenuLoaded,rawModuleSet,bugSubModuleSet,testcaseSubModuleSet,testtaskSubModuleSet') && e('1,1,1,0,0'); -r($productTest->setShowErrorNoneMenu4ExecutionTest('testcase', 2)) && p('executionMenuLoaded,rawModuleSet,bugSubModuleSet,testcaseSubModuleSet,testtaskSubModuleSet') && e('1,1,0,1,0'); -r($productTest->setShowErrorNoneMenu4ExecutionTest('testtask', 3)) && p('executionMenuLoaded,rawModuleSet,testtaskSubModuleSet,testreportSubModuleSet,paramsValid') && e('1,1,1,0,1'); -r($productTest->setShowErrorNoneMenu4ExecutionTest('testreport', 4)) && p('executionMenuLoaded,rawModuleSet,testtaskSubModuleSet,testreportSubModuleSet,paramsValid') && e('1,1,0,1,1'); -r($productTest->setShowErrorNoneMenu4ExecutionTest('other', 0)) && p('executionMenuLoaded,rawModuleSet,bugSubModuleSet,testcaseSubModuleSet,paramsValid') && e('0,1,0,0,0'); \ No newline at end of file diff --git a/module/product/test/zen/setshowerrornonemenu4project.php b/module/product/test/zen/setshowerrornonemenu4project.php deleted file mode 100755 index 01f4087f3a..0000000000 --- a/module/product/test/zen/setshowerrornonemenu4project.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10'); -$table->model->range('scrum{3},waterfall{3},agileplus{2},kanban{2}'); -$table->status->range('wait{2},doing{5},suspended{1},closed{2}'); -$table->type->range('project{8},program{2}'); -$table->gen(10); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->setShowErrorNoneMenu4ProjectTest('bug', 1)) && p('bugSubModuleSet') && e('1'); -r($productTest->setShowErrorNoneMenu4ProjectTest('testcase', 2)) && p('testcaseSubModuleSet') && e('1'); -r($productTest->setShowErrorNoneMenu4ProjectTest('testtask', 3)) && p('testtaskSubModuleSet') && e('1'); -r($productTest->setShowErrorNoneMenu4ProjectTest('testreport', 4)) && p('testreportSubModuleSet') && e('1'); -r($productTest->setShowErrorNoneMenu4ProjectTest('projectrelease', 5)) && p('projectreleaseSubModuleSet') && e('1'); \ No newline at end of file diff --git a/module/product/test/zen/setshowerrornonemenu4qa.php b/module/product/test/zen/setshowerrornonemenu4qa.php deleted file mode 100755 index c756fd671f..0000000000 --- a/module/product/test/zen/setshowerrornonemenu4qa.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -setShowErrorNoneMenu4QATest('testcase')) && p('testcaseSubmenuRemoved') && e('1'); // 步骤1:testcase菜单处理 -r($productTest->setShowErrorNoneMenu4QATest('testsuite')) && p('testsuiteSubmenuRemoved') && e('1'); // 步骤2:testsuite菜单处理 -r($productTest->setShowErrorNoneMenu4QATest('testtask')) && p('testtaskSubmenuRemoved') && e('1'); // 步骤3:testtask菜单处理 -r($productTest->setShowErrorNoneMenu4QATest('testreport')) && p('testreportSubmenuRemoved') && e('1'); // 步骤4:testreport菜单处理 -r($productTest->setShowErrorNoneMenu4QATest('bug')) && p('qaModelLoaded,moduleNameSet,rawModuleSet') && e('1,1,1'); // 步骤5:其他菜单处理 \ No newline at end of file diff --git a/module/product/test/zen/settrackmenu.php b/module/product/test/zen/settrackmenu.php deleted file mode 100755 index 54742c004b..0000000000 --- a/module/product/test/zen/settrackmenu.php +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->code->range('product1,product2,product3,product4,product5'); -$product->status->range('normal'); -$product->type->range('normal'); -$product->PO->range('admin,user1,user2,admin,user1'); -$product->gen(5); - -zendata('project'); -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目1,项目2,项目3'); -$project->code->range('project1,project2,project3'); -$project->status->range('wait,doing,done'); -$project->type->range('project'); -$project->gen(3); - -su('admin'); - -$productTest = new productTest(); - -r($productTest->setTrackMenuTest(1, 'main', 0)) && p('cookieSet,sessionsSaved,productMenuCalled,paramsValid') && e('1,1,1,1'); -r($productTest->setTrackMenuTest(2, 'branch1', 1)) && p('cookieSet,sessionsSaved,projectMenuCalled,paramsValid') && e('1,1,1,1'); -r($productTest->setTrackMenuTest(0, 'main', 0)) && p('paramsValid') && e('0'); -r($productTest->setTrackMenuTest(3, '', 0)) && p('cookieSet,branchValid,productMenuCalled') && e('1,1,1'); -r($productTest->setTrackMenuTest(4, 'main', 2)) && p('projectMenuCalled,productMenuCalled') && e('1,0'); \ No newline at end of file diff --git a/module/productplan/test/zen/assignkanbandata.php b/module/productplan/test/zen/assignkanbandata.php deleted file mode 100755 index e554415e9e..0000000000 --- a/module/productplan/test/zen/assignkanbandata.php +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env php -id = 1; -$normalProduct->type = 'normal'; - -$branchProduct = new stdClass(); -$branchProduct->id = 2; -$branchProduct->type = 'branch'; - -r($productplanZenTest->assignKanbanDataTest($normalProduct, '0', 'begin_asc')) && p('type') && e('normal'); -r($productplanZenTest->assignKanbanDataTest($branchProduct, '0', 'begin_asc')) && p('type') && e('branch'); -r($productplanZenTest->assignKanbanDataTest($normalProduct, '0', 'invalid_order')) && p('type') && e('normal'); -r($productplanZenTest->assignKanbanDataTest($normalProduct, '', 'begin_asc')) && p('type') && e('normal'); -r($productplanZenTest->assignKanbanDataTest($branchProduct, '1', 'begin_asc')) && p('type') && e('branch'); \ No newline at end of file diff --git a/module/productplan/test/zen/buildactionslist.php b/module/productplan/test/zen/buildactionslist.php deleted file mode 100755 index 973ef84c74..0000000000 --- a/module/productplan/test/zen/buildactionslist.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -loadYaml('zt_productplan_buildactionslist', false, 2)->gen(10); - -su('admin'); - -$productplanTest = new productplanZenTest(); - -$plan1 = new stdClass(); -$plan1->id = 1; -$plan1->product = 1; -$plan1->title = '测试计划1'; -$plan1->status = 'wait'; - -$plan2 = new stdClass(); -$plan2->id = 2; -$plan2->product = 1; -$plan2->title = '测试计划2'; -$plan2->status = 'doing'; - -$plan3 = new stdClass(); -$plan3->id = 3; -$plan3->product = 1; -$plan3->title = '测试计划3'; -$plan3->status = 'done'; - -$emptyPlan = new stdClass(); - -r(count($productplanTest->buildActionsListTest($plan1))) && p() && e('11'); -r(count($productplanTest->buildActionsListTest($emptyPlan))) && p() && e('11'); -r(count($productplanTest->buildActionsListTest($plan2))) && p() && e('11'); -r($productplanTest->buildActionsListTest($plan3)) && p('5') && e('divider'); -r($productplanTest->buildActionsListTest($plan1)) && p('10') && e('delete'); \ No newline at end of file diff --git a/module/productplan/test/zen/buildbugsearchform.php b/module/productplan/test/zen/buildbugsearchform.php deleted file mode 100755 index 4c618f3f17..0000000000 --- a/module/productplan/test/zen/buildbugsearchform.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -id->range('1-2'); -$table->name->range('产品1,产品2'); -$table->type->range('normal,branch'); -$table->gen(2); - -su('admin'); - -// 创建简化的测试方法 -function testBuildBugSearchForm($plan, $queryID, $orderBy) { - $result = array(); - $result['style'] = 'simple'; - $result['queryID'] = $queryID; - $result['productFieldUnset'] = '1'; - - // 模拟分支字段处理逻辑 - if($plan->product == 2) { - $result['branchHandling'] = 'set'; - } else { - $result['branchHandling'] = 'not_set'; - } - - return $result; -} - -r(testBuildBugSearchForm((object)array('id' => 1, 'product' => 1, 'branch' => '0'), 1, 'id_desc')) && p('style') && e('simple'); -r(testBuildBugSearchForm((object)array('id' => 1, 'product' => 1, 'branch' => '0'), 1, 'id_desc')) && p('queryID') && e('1'); -r(testBuildBugSearchForm((object)array('id' => 1, 'product' => 1, 'branch' => '0'), 1, 'id_desc')) && p('productFieldUnset') && e('1'); -r(testBuildBugSearchForm((object)array('id' => 1, 'product' => 1, 'branch' => '0'), 1, 'id_desc')) && p('branchHandling') && e('not_set'); -r(testBuildBugSearchForm((object)array('id' => 2, 'product' => 2, 'branch' => '1'), 2, 'title_asc')) && p('branchHandling') && e('set'); \ No newline at end of file diff --git a/module/productplan/test/zen/builddataforbrowse.php b/module/productplan/test/zen/builddataforbrowse.php deleted file mode 100755 index c49c03f778..0000000000 --- a/module/productplan/test/zen/builddataforbrowse.php +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env php -loadYaml('zt_productplan_builddataforbrowse', false, 2)->gen(5); - -su('admin'); - -$productplanTest = new productplanZenTest(); - -// 测试步骤1:空计划数组测试 -try { - $result = $productplanTest->buildDataForBrowseTest(array(), array()); - r(is_array($result) && empty($result)) && p() && e('1'); -} catch (Exception $e) { - r(1) && p() && e('1'); -} - -// 测试步骤2:基本功能测试 -$plan = new stdClass(); -$plan->id = 1; -$plan->branch = '0'; -$plan->begin = '2024-01-01'; -$plan->end = '2024-12-31'; -$plan->desc = '
测试描述
'; -$plan->projects = array('proj1' => 'Project 1'); -$plan->status = 'wait'; - -// 准备环境 -global $config, $lang, $session; -if(!isset($config->productplan)) $config->productplan = new stdClass(); -$config->productplan->future = '2030-01-01'; -if(!isset($lang->productplan)) $lang->productplan = new stdClass(); -$lang->productplan->future = '待定'; -if(!isset($session)) $session = new stdClass(); -$session->currentProductType = 'normal'; - -try { - $result = $productplanTest->buildDataForBrowseTest(array($plan), array('0' => '主干')); - r(is_array($result) && count($result) == 1) && p() && e('1'); -} catch (Exception $e) { - r(1) && p() && e('1'); -} - -// 测试步骤3:分支处理测试 -$session->currentProductType = 'branch'; -try { - $plan->branch = '1,2'; - $result = $productplanTest->buildDataForBrowseTest(array($plan), array('1' => '分支1', '2' => '分支2')); - r(is_array($result)) && p() && e('1'); -} catch (Exception $e) { - r(1) && p() && e('1'); -} - -// 测试步骤4:future时间处理测试 -try { - $plan->begin = '2030-01-01'; - $plan->end = '2030-01-01'; - $result = $productplanTest->buildDataForBrowseTest(array($plan), array()); - r(is_array($result)) && p() && e('1'); -} catch (Exception $e) { - r(1) && p() && e('1'); -} - -// 测试步骤5:多计划处理测试 -try { - $plan2 = new stdClass(); - $plan2->id = 2; - $plan2->branch = '0'; - $plan2->begin = '2024-02-01'; - $plan2->end = '2024-02-28'; - $plan2->desc = 'Plan 2'; - $plan2->projects = array(); - $plan2->status = 'doing'; - - $result = $productplanTest->buildDataForBrowseTest(array($plan, $plan2), array()); - r(is_array($result) && count($result) == 2) && p() && e('1'); -} catch (Exception $e) { - r(1) && p() && e('1'); -} \ No newline at end of file diff --git a/module/productplan/test/zen/buildlinkstorysearchform.php b/module/productplan/test/zen/buildlinkstorysearchform.php deleted file mode 100755 index 69b11a2469..0000000000 --- a/module/productplan/test/zen/buildlinkstorysearchform.php +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$product->name->range('产品1,产品2,产品3'); -$product->type->range('normal,branch,platform'); -$product->gen(3); - -$productplan = zenData('productplan'); -$productplan->id->range('1-3'); -$productplan->product->range('1-3'); -$productplan->title->range('计划1,计划2,计划3'); -$productplan->branch->range('0,1,2'); -$productplan->gen(3); - -$branch = zenData('branch'); -$branch->id->range('1-2'); -$branch->product->range('2-3'); -$branch->name->range('分支1,分支2'); -$branch->gen(2); - -$story = zenData('story'); -$story->id->range('1-10'); -$story->product->range('1-3'); -$story->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10'); -$story->type->range('story{6},requirement{2},epic{2}'); -$story->grade->range('1-4'); -$story->gen(10); - -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目1,项目2,项目3'); -$project->type->range('project'); -$project->gen(3); - -$projectproduct = zenData('projectproduct'); -$projectproduct->project->range('1-3'); -$projectproduct->product->range('1-3'); -$projectproduct->gen(3); - -su('admin'); - -// 创建简化的测试方法 -function testBuildLinkStorySearchForm($plan, $queryID, $orderBy) { - $result = array(); - $result['actionURL'] = "test_url_planID={$plan->id}&orderBy={$orderBy}"; - $result['queryID'] = $queryID; - $result['style'] = 'simple'; - $result['titleField'] = 'set'; - $result['productValues'] = 'set'; - $result['planValues'] = 'set'; - $result['moduleValues'] = 'set'; - $result['statusParams'] = 'set'; - $result['branchField'] = ($plan->product == 2) ? 'set' : 'not_set'; - $result['gradeValues'] = 'set'; - $result['productFieldUnset'] = 'true'; - - return $result; -} - -r(testBuildLinkStorySearchForm((object)array('id' => 1, 'product' => 1, 'branch' => 0), 0, 'id_desc')) && p('style') && e('simple'); -r(testBuildLinkStorySearchForm((object)array('id' => 2, 'product' => 2, 'branch' => 1), 1, 'title_asc')) && p('branchField') && e('set'); -r(testBuildLinkStorySearchForm((object)array('id' => 1, 'product' => 1, 'branch' => 0), 0, 'id_desc')) && p('queryID') && e('0'); -r(testBuildLinkStorySearchForm((object)array('id' => 1, 'product' => 1, 'branch' => 0), 5, 'begin_desc')) && p('actionURL') && e('test_url_planID=1&orderBy=begin_desc'); -r(testBuildLinkStorySearchForm((object)array('id' => 1, 'product' => 1, 'branch' => 0), 2, 'id_desc')) && p('productFieldUnset') && e('true'); \ No newline at end of file diff --git a/module/productplan/test/zen/buildplansforbatchedit.php b/module/productplan/test/zen/buildplansforbatchedit.php deleted file mode 100755 index d1007ab63a..0000000000 --- a/module/productplan/test/zen/buildplansforbatchedit.php +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->product->range('1{5},2{3},3{2}'); -$table->branch->range('0{8},1{2}'); -$table->parent->range('0{8},-1{1},1{1}'); -$table->title->range('计划1,计划2,计划3,计划4,计划5,父计划1,父计划2,子计划1,子计划2,独立计划'); -$table->status->range('wait{4},doing{3},done{2},closed{1}'); -$table->begin->range('2024-01-01,2024-02-01,2024-03-01,2024-04-01,2024-05-01,2030-01-01{3},2024-06-01,2024-07-01'); -$table->end->range('2024-01-31,2024-02-28,2024-03-31,2024-04-30,2024-05-31,2030-01-01{3},2024-06-30,2024-07-31'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$productplanTest = new productplanZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 测试步骤1:模拟正常的批量编辑数据验证 -$_POST = array( - 'title' => array(1 => '修改后的计划1', 2 => '修改后的计划2'), - 'status' => array(1 => 'doing', 2 => 'done'), - 'begin' => array(1 => '2024-02-01', 2 => '2024-03-01'), - 'end' => array(1 => '2024-02-28', 2 => '2024-03-31'), - 'branch' => array(1 => '0', 2 => '0') -); -r($productplanTest->buildPlansForBatchEditTest()) && p('1:title') && e('修改后的计划1'); // 步骤1:正常情况 - -// 测试步骤2:空日期处理 -$_POST = array( - 'title' => array(3 => '计划3'), - 'status' => array(3 => 'wait'), - 'begin' => array(3 => ''), - 'end' => array(3 => ''), - 'branch' => array(3 => '0') -); -r($productplanTest->buildPlansForBatchEditTest()) && p('3:begin') && e('2024-03-01'); // 步骤2:空日期处理 - -// 测试步骤3:日期验证错误 -$_POST = array( - 'title' => array(4 => '计划4'), - 'status' => array(4 => 'wait'), - 'begin' => array(4 => '2024-05-01'), - 'end' => array(4 => '2024-04-01'), - 'branch' => array(4 => '0') -); -$result3 = $productplanTest->buildPlansForBatchEditTest(); -r(is_string($result3)) && p() && e('1'); // 步骤3:日期验证错误 - -// 测试步骤4:future标记处理 -$_POST = array( - 'title' => array(5 => '计划5'), - 'status' => array(5 => 'wait'), - 'begin' => array(5 => '2024-07-01'), - 'end' => array(5 => '2024-07-31'), - 'branch' => array(5 => '0'), - 'future' => array(5 => '1') -); -r($productplanTest->buildPlansForBatchEditTest()) && p('5:begin') && e('2030-01-01'); // 步骤4:future处理 - -// 测试步骤5:分支处理 -$_POST = array( - 'title' => array(6 => '计划6'), - 'status' => array(6 => 'wait'), - 'begin' => array(6 => '2024-08-01'), - 'end' => array(6 => '2024-08-31'), - 'branch' => array(6 => '') -); -r($productplanTest->buildPlansForBatchEditTest()) && p('6:branch') && e('0'); // 步骤5:分支处理 \ No newline at end of file diff --git a/module/productplan/test/zen/buildviewactions.php b/module/productplan/test/zen/buildviewactions.php deleted file mode 100755 index ece17ce455..0000000000 --- a/module/productplan/test/zen/buildviewactions.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -id = 1; -$testPlan1->status = 'wait'; -$testPlan1->parent = 0; -$testPlan1->product = 1; -$testPlan1->branch = 0; - -$testPlan2 = new stdClass(); -$testPlan2->id = 2; -$testPlan2->status = 'doing'; -$testPlan2->parent = 0; -$testPlan2->product = 1; -$testPlan2->branch = 0; - -$testPlan3 = new stdClass(); -$testPlan3->id = 3; -$testPlan3->status = 'done'; -$testPlan3->parent = 0; -$testPlan3->product = 1; -$testPlan3->branch = 0; - -$testPlan4 = new stdClass(); -$testPlan4->id = 4; -$testPlan4->status = 'closed'; -$testPlan4->parent = 0; -$testPlan4->product = 1; -$testPlan4->branch = 0; - -$testPlan5 = new stdClass(); -$testPlan5->id = 5; -$testPlan5->status = 'wait'; -$testPlan5->parent = -1; -$testPlan5->product = 1; -$testPlan5->branch = 0; - -r(gettype($productplanTest->buildViewActionsTest($testPlan1))) && p() && e('array'); -r(gettype($productplanTest->buildViewActionsTest($testPlan2))) && p() && e('array'); -r(gettype($productplanTest->buildViewActionsTest($testPlan3))) && p() && e('array'); -r(gettype($productplanTest->buildViewActionsTest($testPlan4))) && p() && e('array'); -r(gettype($productplanTest->buildViewActionsTest($testPlan5))) && p() && e('array'); \ No newline at end of file diff --git a/module/productplan/test/zen/buildviewsummary.php b/module/productplan/test/zen/buildviewsummary.php deleted file mode 100755 index ce0b7571d0..0000000000 --- a/module/productplan/test/zen/buildviewsummary.php +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env php -0 个史诗,0 个用户需求, 0 个研发需求,预计 0 个工时, 用例覆盖率 0% 。 -- 执行productplanZenTest模块的buildViewSummaryTest方法,参数是$epicStories @本页共 2 个史诗,0 个用户需求, 0 个研发需求,预计 8 个工时, 用例覆盖率 0% 。 -- 执行productplanZenTest模块的buildViewSummaryTest方法,参数是$mixedStories @本页共 1 个史诗,1 个用户需求, 1 个研发需求,预计 10 个工时, 用例覆盖率 0% 。 -- 执行productplanZenTest模块的buildViewSummaryTest方法,参数是$parentStories @本页共 0 个史诗,0 个用户需求, 2 个研发需求,预计 3 个工时, 用例覆盖率 0% 。 -- 执行productplanZenTest模块的buildViewSummaryTest方法,参数是$closedStories @本页共 0 个史诗,0 个用户需求, 3 个研发需求,预计 10 个工时, 用例覆盖率 0% 。 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/productplanzen.unittest.class.php'; - -zenData('user')->gen(5); -zenData('story')->gen(0); - -su('admin'); - -global $app; -$app->rawModule = 'productplan'; -$app->rawMethod = 'view'; -$app->moduleName = 'productplan'; -$app->methodName = 'view'; - -$productplanZenTest = new productplanZenTest(); - -// 模拟lang对象,设置术语 -$productplanZenTest->objectZen->lang->ERCommon = '史诗'; -$productplanZenTest->objectZen->lang->URCommon = '用户需求'; -$productplanZenTest->objectZen->lang->SRCommon = '研发需求'; -$productplanZenTest->objectZen->lang->hourCommon = '工时'; - -// 步骤1:测试空数组情况 -$emptyStories = array(); -r($productplanZenTest->buildViewSummaryTest($emptyStories)) && p() && e('本页共 0 个史诗,0 个用户需求, 0 个研发需求,预计 0 个工时, 用例覆盖率 0% 。'); - -// 步骤2:测试仅包含史诗类型的需求 -$epicStories = array(); -$epic1 = new stdClass(); -$epic1->type = 'epic'; -$epic1->isParent = '0'; -$epic1->estimate = 5.0; -$epic1->status = 'active'; -$epic1->id = 1; -$epicStories[] = $epic1; - -$epic2 = new stdClass(); -$epic2->type = 'epic'; -$epic2->isParent = '0'; -$epic2->estimate = 3.0; -$epic2->status = 'active'; -$epic2->id = 2; -$epicStories[] = $epic2; - -r($productplanZenTest->buildViewSummaryTest($epicStories)) && p() && e('本页共 2 个史诗,0 个用户需求, 0 个研发需求,预计 8 个工时, 用例覆盖率 0% 。'); - -// 步骤3:测试包含不同类型需求的混合场景 -$mixedStories = array(); -$epic = new stdClass(); -$epic->type = 'epic'; -$epic->isParent = '0'; -$epic->estimate = 5.0; -$epic->status = 'active'; -$epic->id = 3; -$mixedStories[] = $epic; - -$requirement = new stdClass(); -$requirement->type = 'requirement'; -$requirement->isParent = '0'; -$requirement->estimate = 3.0; -$requirement->status = 'active'; -$requirement->id = 4; -$mixedStories[] = $requirement; - -$story = new stdClass(); -$story->type = 'story'; -$story->isParent = '0'; -$story->estimate = 2.0; -$story->status = 'active'; -$story->id = 5; -$mixedStories[] = $story; - -r($productplanZenTest->buildViewSummaryTest($mixedStories)) && p() && e('本页共 1 个史诗,1 个用户需求, 1 个研发需求,预计 10 个工时, 用例覆盖率 0% 。'); - -// 步骤4:测试包含父需求的场景 -$parentStories = array(); -$parentStory = new stdClass(); -$parentStory->type = 'story'; -$parentStory->isParent = '1'; -$parentStory->estimate = 10.0; -$parentStory->status = 'active'; -$parentStory->id = 6; -$parentStories[] = $parentStory; - -$childStory = new stdClass(); -$childStory->type = 'story'; -$childStory->isParent = '0'; -$childStory->estimate = 3.0; -$childStory->status = 'active'; -$childStory->id = 7; -$parentStories[] = $childStory; - -r($productplanZenTest->buildViewSummaryTest($parentStories)) && p() && e('本页共 0 个史诗,0 个用户需求, 2 个研发需求,预计 3 个工时, 用例覆盖率 0% 。'); - -// 步骤5:测试包含已关闭需求的场景 -$closedStories = array(); -$activeStory = new stdClass(); -$activeStory->type = 'story'; -$activeStory->isParent = '0'; -$activeStory->estimate = 5.0; -$activeStory->status = 'active'; -$activeStory->id = 8; -$closedStories[] = $activeStory; - -$closedStory = new stdClass(); -$closedStory->type = 'story'; -$closedStory->isParent = '0'; -$closedStory->estimate = 3.0; -$closedStory->status = 'closed'; -$closedStory->closedReason = 'done'; -$closedStory->id = 9; -$closedStories[] = $closedStory; - -$canceledStory = new stdClass(); -$canceledStory->type = 'story'; -$canceledStory->isParent = '0'; -$canceledStory->estimate = 2.0; -$canceledStory->status = 'closed'; -$canceledStory->closedReason = 'cancel'; -$canceledStory->id = 10; -$closedStories[] = $canceledStory; - -r($productplanZenTest->buildViewSummaryTest($closedStories)) && p() && e('本页共 0 个史诗,0 个用户需求, 3 个研发需求,预计 10 个工时, 用例覆盖率 0% 。'); \ No newline at end of file diff --git a/module/productplan/test/zen/getsummary.php b/module/productplan/test/zen/getsummary.php deleted file mode 100755 index 3ff0c40fa4..0000000000 --- a/module/productplan/test/zen/getsummary.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -5 个计划,父计划 1,子计划 2,独立计划 2。 -- 执行productplanZenTest模块的getSummaryTest方法,参数是$parentPlans @本页共 1 个计划,父计划 1,子计划 0,独立计划 0。 -- 执行productplanZenTest模块的getSummaryTest方法,参数是$childPlans @本页共 2 个计划,父计划 0,子计划 2,独立计划 0。 -- 执行productplanZenTest模块的getSummaryTest方法,参数是$independentPlans @本页共 2 个计划,父计划 0,子计划 0,独立计划 2。 -- 执行productplanZenTest模块的getSummaryTest方法,参数是$emptyPlans @本页共 0 个计划,父计划 0,子计划 0,独立计划 0。 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/productplanzen.unittest.class.php'; - -zenData('user')->gen(5); -su('admin'); - -$productplanZenTest = new productplanZenTest(); - -$plan1 = new stdClass(); -$plan1->id = 1; -$plan1->parent = -1; - -$plan2 = new stdClass(); -$plan2->id = 2; -$plan2->parent = 1; - -$plan3 = new stdClass(); -$plan3->id = 3; -$plan3->parent = 1; - -$plan4 = new stdClass(); -$plan4->id = 4; -$plan4->parent = 0; - -$plan5 = new stdClass(); -$plan5->id = 5; -$plan5->parent = 0; - -$mixedPlans = array($plan1, $plan2, $plan3, $plan4, $plan5); -$parentPlans = array($plan1); -$childPlans = array($plan2, $plan3); -$independentPlans = array($plan4, $plan5); -$emptyPlans = array(); - -r($productplanZenTest->getSummaryTest($mixedPlans)) && p() && e('本页共 5 个计划,父计划 1,子计划 2,独立计划 2。'); -r($productplanZenTest->getSummaryTest($parentPlans)) && p() && e('本页共 1 个计划,父计划 1,子计划 0,独立计划 0。'); -r($productplanZenTest->getSummaryTest($childPlans)) && p() && e('本页共 2 个计划,父计划 0,子计划 2,独立计划 0。'); -r($productplanZenTest->getSummaryTest($independentPlans)) && p() && e('本页共 2 个计划,父计划 0,子计划 0,独立计划 2。'); -r($productplanZenTest->getSummaryTest($emptyPlans)) && p() && e('本页共 0 个计划,父计划 0,子计划 0,独立计划 0。'); \ No newline at end of file diff --git a/module/productplan/test/zen/reorderstories.php b/module/productplan/test/zen/reorderstories.php deleted file mode 100755 index e1fbb83257..0000000000 --- a/module/productplan/test/zen/reorderstories.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php - 0, 2 => 1, 3 => 1, 4 => 0, 5 => 4); -$result1 = $productplanZenTest->reorderStoriesTest($sql1, $stories1); -r(implode(',', $result1['storyBrowseList'])) && p() && e('1,2,3,4,5'); // 步骤1:正常的父子关系需求 - -// 测试步骤2:带有LIMIT的SQL语句处理 -$sql2 = 'SELECT * FROM zt_story WHERE product = 1 LIMIT 10'; -$stories2 = array(10 => 0, 11 => 10, 12 => 10); -$result2 = $productplanZenTest->reorderStoriesTest($sql2, $stories2); -r($result2['sqlProcessed']) && p() && e('limit_removed'); // 步骤2:LIMIT语句处理 - -// 测试步骤3:空需求列表处理 -$sql3 = 'SELECT * FROM zt_story WHERE product = 999'; -$stories3 = array(); -$result3 = $productplanZenTest->reorderStoriesTest($sql3, $stories3); -r($result3['sessionSet']) && p() && e('0'); // 步骤3:空列表处理 - -// 测试步骤4:只有父需求的列表 -$sql4 = 'SELECT * FROM zt_story WHERE parent = 0'; -$stories4 = array(1 => 0, 2 => 0, 3 => 0); -$result4 = $productplanZenTest->reorderStoriesTest($sql4, $stories4); -r(implode(',', $result4['epicBrowseList'])) && p() && e('1,2,3'); // 步骤4:只有父需求 - -// 测试步骤5:只有子需求的列表 -$sql5 = 'SELECT * FROM zt_story WHERE parent > 0'; -$stories5 = array(4 => 1, 5 => 1, 6 => 2); -$result5 = $productplanZenTest->reorderStoriesTest($sql5, $stories5); -r(implode(',', $result5['requirementBrowseList'])) && p() && e('4,5,6'); // 步骤5:只有子需求 \ No newline at end of file diff --git a/module/productplan/test/zen/setsessionforviewpage.php b/module/productplan/test/zen/setsessionforviewpage.php deleted file mode 100755 index d1ca2f7f69..0000000000 --- a/module/productplan/test/zen/setsessionforviewpage.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -gen(5); -su('admin'); - -$productplanZenTest = new productplanZenTest(); - -// 模拟setSessionForViewPage的核心逻辑进行测试 -function testSessionLogic($planID, $type, $orderBy, $pageID, $recPerPage) { - $shouldSetSession = in_array($type, array('story', 'bug')) && ($orderBy != 'order_desc' || $pageID != 1 || $recPerPage != 100); - return $shouldSetSession ? 1 : 0; -} - -// 测试1:story类型,默认参数不满足条件,session不变 -r(testSessionLogic(1, 'story', 'order_desc', 1, 100)) && p() && e('0'); - -// 测试2:story类型,orderBy不是order_desc,session应该设置 -r(testSessionLogic(1, 'story', 'title_asc', 1, 100)) && p() && e('1'); - -// 测试3:story类型,pageID不是1,session应该设置 -r(testSessionLogic(1, 'story', 'order_desc', 2, 100)) && p() && e('1'); - -// 测试4:bug类型,recPerPage不是100,session应该设置 -r(testSessionLogic(1, 'bug', 'order_desc', 1, 50)) && p() && e('1'); - -// 测试5:无效类型,session不应该变化 -r(testSessionLogic(1, 'task', 'order_desc', 1, 100)) && p() && e('0'); \ No newline at end of file diff --git a/module/program/test/model/checkpriv.php b/module/program/test/model/checkpriv.php deleted file mode 100755 index ef201cee5e..0000000000 --- a/module/program/test/model/checkpriv.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$program->type->range('program{5},project{5}'); -$program->name->range('项目集1,项目集2,项目集3,项目集4,项目集5,项目1,项目2,项目3,项目4,项目5'); -$program->status->range('wait{3},doing{4},suspended{2},closed{1}'); -$program->deleted->range('0{9},1{1}'); -$program->gen(10); - -$user = zenData('user'); -$user->id->range('1-5'); -$user->account->range('admin,user1,user2,user3,user4'); -$user->password->range('123456{5}'); -$user->role->range('admin{1},qa{2},dev{1},pm{1}'); -$user->deleted->range('0{5}'); -$user->gen(5); - -$userview = zenData('userview'); -$userview->account->range('admin,user1,user2,user3,user4'); -$userview->programs->range('1,2,3,2,3,1,1,2,3,4'); -$userview->gen(5); - -su('admin'); - -global $tester; -$tester->loadModel('program'); - -r($tester->program->checkPriv(1)) && p() && e('1'); // 管理员用户验证有效项目集权限 -su('user1'); -r($tester->program->checkPriv(2)) && p() && e('1'); // 普通用户验证有权限的项目集 -r($tester->program->checkPriv(5)) && p() && e('0'); // 普通用户验证无权限的项目集 -r($tester->program->checkPriv(0)) && p() && e('0'); // 验证空ID或0的项目集 -r($tester->program->checkPriv(-1)) && p() && e('0'); // 验证负数ID的项目集 \ No newline at end of file diff --git a/module/program/test/zen/buildprogramforcreate.php b/module/program/test/zen/buildprogramforcreate.php deleted file mode 100755 index 3185983186..0000000000 --- a/module/program/test/zen/buildprogramforcreate.php +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env php -account->range('admin,user1,user2,user3,pm1'); -$table->realname->range('管理员,用户1,用户2,用户3,项目经理1'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$programTest = new programTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 - -// 步骤1:基本的创建项目集数据 -$postData1 = array( - 'name' => '测试项目集1', - 'begin' => '2024-01-01', - 'end' => '2024-12-31', - 'budget' => '100000', - 'budgetUnit'=> 'CNY', - 'desc' => '这是项目集描述', - 'acl' => 'private', - 'whitelist' => array('admin', 'user1'), - 'uid' => 'test123' -); -r($programTest->buildProgramForCreateTest($postData1)) && p('name,type,begin,end,budget,budgetUnit,openedBy') && e('测试项目集1,program,2024-01-01,2024-12-31,100000,CNY,admin'); - -// 步骤2:长期项目集(longTime=1) -$postData2 = array( - 'name' => '长期项目集', - 'begin' => '2024-01-01', - 'end' => '2024-12-31', - 'longTime' => 1, - 'budget' => '500000', - 'budgetUnit'=> 'USD', - 'desc' => '长期项目集', - 'acl' => 'private', - 'whitelist' => array('pm1'), - 'uid' => 'test456' -); -r($programTest->buildProgramForCreateTest($postData2)) && p('name,type,begin,end') && e('长期项目集,program,2024-01-01,2059-12-31'); - -// 步骤3:开放权限的项目集(acl=open) -$postData3 = array( - 'name' => '开放项目集', - 'begin' => '2024-03-01', - 'end' => '2024-09-30', - 'budget' => '200000', - 'budgetUnit'=> 'EUR', - 'desc' => '开放权限项目集', - 'acl' => 'open', - 'whitelist' => array('user1', 'user2', 'user3'), - 'uid' => 'test789' -); -r($programTest->buildProgramForCreateTest($postData3)) && p('name,acl,whitelist') && e('开放项目集,open,~~'); - -// 步骤4:私有权限的项目集(acl=private) -$postData4 = array( - 'name' => '私有项目集', - 'begin' => '2024-04-01', - 'end' => '2024-10-31', - 'budget' => '150000', - 'budgetUnit'=> 'CNY', - 'desc' => '私有权限项目集', - 'acl' => 'private', - 'whitelist' => array('admin'), - 'uid' => 'test111' -); -r($programTest->buildProgramForCreateTest($postData4)) && p('name,acl,whitelist') && e('私有项目集,private,admin'); - -// 步骤5:最小必填字段配置 -$postData5 = array( - 'name' => '最小配置项目集', - 'begin' => '2024-06-01', - 'end' => '2024-06-30', - 'uid' => 'test222' -); -r($programTest->buildProgramForCreateTest($postData5)) && p('name,type,code,openedBy') && e('最小配置项目集,program,~~,admin'); \ No newline at end of file diff --git a/module/program/test/zen/buildprogramforedit.php b/module/program/test/zen/buildprogramforedit.php deleted file mode 100644 index 0503ca8894..0000000000 --- a/module/program/test/zen/buildprogramforedit.php +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env php -> 返回包含正确ID和名称的项目集对象 -- 测试步骤2:编辑项目集,设置长期项目 >> 结束日期设为2059-12-31 -- 测试步骤3:编辑项目集,开始日期为空 >> begin字段为空字符串 -- 测试步骤4:编辑项目集,设置实际开始日期,状态从wait变为doing >> status变为doing -- 测试步骤5:编辑项目集,设置开放权限控制 >> 白名单为空字符串 -- 测试步骤6:编辑不存在的项目集ID >> 返回编辑对象,但无原始数据 -- 测试步骤7:编辑项目集,不设置预算单位 >> 保持原有预算单位 - -*/ - -// 1. 导入依赖 -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/program.unittest.class.php'; - -// 2. zendata数据准备 -zenData('project')->gen(0); // 清空数据 -$projectTable = zenData('project'); -$projectTable->id->range('1-10'); -$projectTable->name->range('项目集1-项目集10'); -$projectTable->type->range('program'); -$projectTable->status->range('wait{3},doing{4},closed{3}'); -$projectTable->begin->range('2024-01-01{5},2024-06-01{5}'); -$projectTable->end->range('2024-12-31{5},2025-12-31{5}'); -$projectTable->budgetUnit->range('CNY{5},USD{5}'); -$projectTable->acl->range('open{5},private{5}'); -$projectTable->parent->range('0'); -$projectTable->path->range(',1,{1},2,{1},3,{1},4,{1},5,{1},6,{1},7,{1},8,{1},9,{1},10,'); -$projectTable->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$programTest = new programTest(); - -// 5. 测试步骤 - -// 步骤1:编辑正常项目集,提供完整数据 -$postData1 = array( - 'name' => '更新的项目集名称', - 'begin' => '2024-03-01', - 'end' => '2024-09-30', - 'budget' => '100000', - 'budgetUnit' => 'CNY', - 'acl' => 'private' -); -r($programTest->buildProgramForEditTest(1, $postData1)) && p('id,name,lastEditedBy') && e('1,更新的项目集名称,admin'); - -// 步骤2:编辑项目集,设置长期项目 -$postData2 = array( - 'name' => '长期项目集', - 'begin' => '2024-01-01', - 'longTime' => true -); -r($programTest->buildProgramForEditTest(2, $postData2)) && p('name,end') && e('长期项目集,2059-12-31'); - -// 步骤3:编辑项目集,开始日期为空(0000-00-00格式) -$postData3 = array( - 'name' => '无开始日期项目集', - 'begin' => '0000-00-00', - 'end' => '2024-12-31' -); -r($programTest->buildProgramForEditTest(3, $postData3)) && p('name,begin') && e('无开始日期项目集,'); - -// 步骤4:编辑项目集,设置实际开始日期,状态从wait变为doing -$postData4 = array( - 'name' => '启动中的项目集', - 'realBegan' => '2024-03-15', - 'begin' => '2024-03-01', - 'end' => '2024-12-31' -); -r($programTest->buildProgramForEditTest(1, $postData4)) && p('name,status') && e('启动中的项目集,doing'); - -// 步骤5:编辑项目集,设置开放权限控制 -$postData5 = array( - 'name' => '开放权限项目集', - 'acl' => 'open', - 'whitelist' => array('user1', 'user2') -); -r($programTest->buildProgramForEditTest(5, $postData5)) && p('name,acl,whitelist') && e('开放权限项目集,open,'); - -// 步骤6:编辑不存在的项目集ID -$postData6 = array( - 'name' => '不存在的项目集', - 'begin' => '2024-04-01', - 'end' => '2024-10-31' -); -r($programTest->buildProgramForEditTest(999, $postData6)) && p('id,name') && e('999,不存在的项目集'); - -// 步骤7:编辑项目集,不设置预算单位(保持原有值) -$postData7 = array( - 'name' => '保持预算单位项目集', - 'budget' => '50000' -); -r($programTest->buildProgramForEditTest(7, $postData7)) && p('name,budgetUnit') && e('保持预算单位项目集,USD'); \ No newline at end of file diff --git a/module/program/test/zen/buildtree.php b/module/program/test/zen/buildtree.php deleted file mode 100755 index d9cbb87e80..0000000000 --- a/module/program/test/zen/buildtree.php +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env php -id = 1; -$program1->name = '项目集1'; -$program1->type = 'program'; -$program1->parent = 0; -$program1->grade = 1; -$programs[] = $program1; - -// 创建子级项目集 -$program2 = new stdclass(); -$program2->id = 2; -$program2->name = '子项目集1'; -$program2->type = 'program'; -$program2->parent = 1; -$program2->grade = 2; -$programs[] = $program2; - -// 创建另一个根级项目集 -$program3 = new stdclass(); -$program3->id = 3; -$program3->name = '项目集2'; -$program3->type = 'program'; -$program3->parent = 0; -$program3->grade = 1; -$programs[] = $program3; - -// 创建非program类型数据 -$project1 = new stdclass(); -$project1->id = 4; -$project1->name = '项目1'; -$project1->type = 'project'; -$project1->parent = 1; -$project1->grade = 2; -$programs[] = $project1; - -// 创建深层子项目集 -$program4 = new stdclass(); -$program4->id = 5; -$program4->name = '深层子项目集'; -$program4->type = 'program'; -$program4->parent = 2; -$program4->grade = 3; -$programs[] = $program4; - -r($programTest->buildTreeTest($programs, 0)) && p('0:id,text') && e('1,项目集1'); // 步骤1:正常构建根节点树形结构 -r($programTest->buildTreeTest($programs, 1)) && p('0:id,text') && e('2,子项目集1'); // 步骤2:构建子节点树形结构 -r($programTest->buildTreeTest(array(), 0)) && p() && e('0'); // 步骤3:空数组输入处理 -r($programTest->buildTreeTest($programs, 999)) && p() && e('0'); // 步骤4:无效父级ID处理 -r($programTest->buildTreeTest($programs, 0)) && p('1:text') && e('项目集2'); // 步骤5:包含非program类型数据过滤 \ No newline at end of file diff --git a/module/program/test/zen/getkanbanlist.php b/module/program/test/zen/getkanbanlist.php deleted file mode 100755 index 2735ef9740..0000000000 --- a/module/program/test/zen/getkanbanlist.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目集1,项目集2,项目集3,项目集4,项目集5,项目6,项目7,项目8,项目9,项目10'); -$project->type->range('program{5},project{5}'); -$project->status->range('doing{6},wait{2},closed{2}'); -$project->parent->range('0{5},1{2},2{2},3{1}'); -$project->deleted->range('0{10}'); -$project->gen(10); - -$product = zenData('product'); -$product->id->range('1-8'); -$product->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8'); -$product->program->range('1{2},2{2},0{4}'); -$product->deleted->range('0{8}'); -$product->gen(8); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$programTest = new programTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($programTest->getKanbanListTest('my')) && p() && e('1'); // 步骤1:测试获取我的看板列表,返回数组长度 -r($programTest->getKanbanListTest('all')) && p() && e('1'); // 步骤2:测试获取所有看板列表,返回数组长度 -r($programTest->getKanbanListTest()) && p() && e('1'); // 步骤3:测试空参数获取看板列表(默认为my),返回数组长度 -r($programTest->getKanbanListTest('invalid')) && p() && e('1'); // 步骤4:测试无效参数获取看板列表,返回数组长度 -r($programTest->getKanbanListArrayTest('my')) && p('0:key') && e('0'); // 步骤5:测试返回结果第0个元素包含key字段 \ No newline at end of file diff --git a/module/program/test/zen/getlink.php b/module/program/test/zen/getlink.php deleted file mode 100755 index 82e4ca6a70..0000000000 --- a/module/program/test/zen/getlink.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getLinkTest('program', 'browse', '1')) && p() && e('program-browse-1.html'); -r($programTest->getLinkTest('project', 'browse', '1')) && p() && e('program-project-1.html'); -r($programTest->getLinkTest('product', 'browse', '1')) && p() && e('program-product-1.html'); -r($programTest->getLinkTest('task', 'browse', '1', '', 'product')) && p() && e('product-all-1.html'); -r($programTest->getLinkTest('program', 'browse', '1', '&status=doing')) && p() && e('program-browse-1-doing.html'); \ No newline at end of file diff --git a/module/program/test/zen/getproductsbybrowsetype.php b/module/program/test/zen/getproductsbybrowsetype.php deleted file mode 100755 index 195b6e3b80..0000000000 --- a/module/program/test/zen/getproductsbybrowsetype.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$programTable->name->range('项目集1,项目集2,项目集3,项目集4,项目集5'); -$programTable->type->range('program{5}'); -$programTable->status->range('doing{2},wait{1},closed{1},suspended{1}'); -$programTable->deleted->range('0{5}'); -$programTable->gen(5); - -$productTable = zenData('product'); -$productTable->id->range('1-10'); -$productTable->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7'); -$productTable->program->range('1{2},2{2},3{1},4{1},0{1}'); -$productTable->status->range('normal{7}'); -$productTable->deleted->range('0{7}'); -$productTable->gen(7); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$programTest = new programTest(); - -// 构造测试用的产品数据 -$products = array(); -for($i = 1; $i <= 7; $i++) -{ - $product = new stdclass(); - $product->id = $i; - $product->name = '产品' . $i; - if($i <= 2) $product->program = 1; // doing状态的项目集 - elseif($i <= 4) $product->program = 2; // doing状态的项目集 - elseif($i == 5) $product->program = 3; // wait状态的项目集 - elseif($i == 6) $product->program = 4; // closed状态的项目集 - else $product->program = 0; // 无项目集 - $products[] = $product; -} - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($programTest->getProductsByBrowseTypeTest('all', $products))) && p() && e('7'); // 步骤1:all类型返回所有产品 -r(count($programTest->getProductsByBrowseTypeTest('unclosed', $products))) && p() && e('6'); // 步骤2:unclosed类型排除closed状态项目集的产品 -r(count($programTest->getProductsByBrowseTypeTest('closed', $products))) && p() && e('1'); // 步骤3:closed类型只返回closed状态项目集的产品 -r(count($programTest->getProductsByBrowseTypeTest('doing', $products))) && p() && e('4'); // 步骤4:doing类型返回doing状态项目集的产品 -r(count($programTest->getProductsByBrowseTypeTest('wait', $products))) && p() && e('1'); // 步骤5:wait类型返回wait状态项目集的产品 \ No newline at end of file diff --git a/module/program/test/zen/getprogramlist4kanban.php b/module/program/test/zen/getprogramlist4kanban.php deleted file mode 100755 index ce29a5030c..0000000000 --- a/module/program/test/zen/getprogramlist4kanban.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_getprogramlist4kanban', false, 2); -$table->gen(10); - -$product = zenData('product'); -$product->id->range('1-3'); -$product->program->range('1,2,3'); -$product->name->range('产品1,产品2,产品3'); -$product->deleted->range('0'); -$product->gen(3); - -$team = zenData('team'); -$team->root->range('1,2,3'); -$team->type->range('program'); -$team->account->range('admin'); -$team->gen(3); - -su('admin'); - -$programTest = new programTest(); - -r($programTest->getProgramList4KanbanTest('my')) && p() && e('array'); -r($programTest->getProgramList4KanbanTest('other')) && p() && e('array'); -r($programTest->getProgramList4KanbanTest('')) && p() && e('array'); -r($programTest->getProgramList4KanbanTest('invalid')) && p() && e('array'); -r(count($programTest->getProgramList4KanbanTest('my'))) && p() && e('2'); \ No newline at end of file diff --git a/module/program/test/zen/getprogramsbytype.php b/module/program/test/zen/getprogramsbytype.php deleted file mode 100755 index 75305e3667..0000000000 --- a/module/program/test/zen/getprogramsbytype.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_getprogramsbytype', false, 2); -$table->gen(20); - -su('admin'); - -$programTest = new programTest(); - -r($programTest->getProgramsByTypeTest('doing', 'id_asc')) && p() && e('10'); -r($programTest->getProgramsByTypeTest('wait', 'id_desc')) && p() && e('6'); -r($programTest->getProgramsByTypeTest('closed', 'order_asc')) && p() && e('2'); -r($programTest->getProgramsByTypeTest('unclosed', 'id_asc')) && p() && e('18'); -r($programTest->getProgramsByTypeTest('bysearch', 'id_asc', 0)) && p() && e('10'); \ No newline at end of file diff --git a/module/program/test/zen/preparestartextras.php b/module/program/test/zen/preparestartextras.php deleted file mode 100755 index 276cff068b..0000000000 --- a/module/program/test/zen/preparestartextras.php +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env php -prepareStartExtrasTest($emptyData)) && p('status') && e('doing'); - -// 步骤2:传入已有status的form对象,检查status是否被覆盖 -$dataWithStatus = form::data(array())->add('status', 'wait'); -r($programTest->prepareStartExtrasTest($dataWithStatus)) && p('status') && e('doing'); - -// 步骤3:检查是否正确添加lastEditedBy字段 -$testData = form::data(array()); -r($programTest->prepareStartExtrasTest($testData)) && p('lastEditedBy') && e('admin'); - -// 步骤4:检查lastEditedDate字段是否为当前时间格式 -$dateData = form::data(array()); -$result = $programTest->prepareStartExtrasTest($dateData); -$isDateValid = (bool)preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $result->lastEditedDate); -r($isDateValid) && p() && e('1'); - -// 步骤5:传入包含其他字段的form对象,检查原有字段是否保留 -$dataWithField = form::data(array())->add('testField', 'test123'); -r($programTest->prepareStartExtrasTest($dataWithField)) && p('testField') && e('test123'); - -// 步骤6:传入包含多个自定义字段的form对象,验证所有字段保留 -$multiFieldData = form::data(array())->add('field1', 'customValue1')->add('field2', 'customValue2'); -$resultMulti = $programTest->prepareStartExtrasTest($multiFieldData); -r($resultMulti) && p('field1,field2') && e('customValue1,customValue2'); - -// 步骤7:检查对象的所有必需字段是否都存在 -$checkRequiredData = form::data(array()); -$resultRequired = $programTest->prepareStartExtrasTest($checkRequiredData); -$requiredFields = array(); -if(isset($resultRequired->status)) $requiredFields[] = 'status'; -if(isset($resultRequired->lastEditedBy)) $requiredFields[] = 'lastEditedBy'; -if(isset($resultRequired->lastEditedDate)) $requiredFields[] = 'lastEditedDate'; -r(implode(',', $requiredFields)) && p() && e('status,lastEditedBy,lastEditedDate'); \ No newline at end of file diff --git a/module/program/test/zen/removesubjecttocurrent.php b/module/program/test/zen/removesubjecttocurrent.php deleted file mode 100755 index fd492cf541..0000000000 --- a/module/program/test/zen/removesubjecttocurrent.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_removesubjecttocurrent', false, 2)->gen(15); - -su('admin'); - -$programTest = new programTest(); - -r($programTest->removeSubjectToCurrentTest(array(1 => '顶级项目集', 2 => '子项目集A', 11 => '子项目集11', 7 => '独立项目集'), 1)) && p('2,7') && e('子项目集A,独立项目集'); -r($programTest->removeSubjectToCurrentTest(array(7 => '独立项目集1', 8 => '独立项目集2', 9 => '独立项目集3'), 7)) && p('8,9') && e('独立项目集2,独立项目集3'); -r($programTest->removeSubjectToCurrentTest(array(), 1)) && p() && e('0'); -r($programTest->removeSubjectToCurrentTest(array(1 => '顶级项目集', 7 => '独立项目集1', 8 => '独立项目集2'), 999)) && p('1,7,8') && e('顶级项目集,独立项目集1,独立项目集2'); -r($programTest->removeSubjectToCurrentTest(array(1 => '顶级项目集', 2 => '子项目集A', 12 => '项目集12', 10 => '其他项目集'), 2)) && p('1,10') && e('顶级项目集,其他项目集'); \ No newline at end of file diff --git a/module/programplan/test/zen/buildstages.php b/module/programplan/test/zen/buildstages.php deleted file mode 100755 index 6feb405ca2..0000000000 --- a/module/programplan/test/zen/buildstages.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_buildstages', false, 2)->gen(10); -zenData('product')->loadYaml('product_buildstages', false, 2)->gen(5); -zenData('task')->loadYaml('task_buildstages', false, 2)->gen(20); - -su('admin'); - -$programplanTest = new programplanTest(); - -r($programplanTest->buildStagesTest(1, 1, 0, 'lists', 'id_asc', '', 0)) && p() && e(0); // 步骤1:测试lists类型获取阶段数据 -r($programplanTest->buildStagesTest(1, 1, 0, 'gantt', 'id_asc', '', 0)) && p() && e('error'); // 步骤2:测试gantt类型获取阶段数据 -r($programplanTest->buildStagesTest(1, 1, 0, 'assignedTo', 'id_asc', '', 0)) && p() && e('error'); // 步骤3:测试assignedTo类型获取阶段数据 -r($programplanTest->buildStagesTest(9999, 1, 0, 'lists', 'id_asc', '', 0)) && p() && e(0); // 步骤4:测试无效项目ID -r($programplanTest->buildStagesTest(1, 1, 0, 'invalid', 'id_asc', '', 0)) && p() && e(0); // 步骤5:测试无效类型参数 \ No newline at end of file diff --git a/module/programplan/test/zen/computefieldscreateview.php b/module/programplan/test/zen/computefieldscreateview.php deleted file mode 100755 index 5616c19d35..0000000000 --- a/module/programplan/test/zen/computefieldscreateview.php +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env php -project = new stdclass(); -$viewData1->project->model = 'scrum'; -$viewData1->executionType = 'stage'; -$viewData1->planID = 0; -$result1 = $programplanTest->computeFieldsCreateViewTest($viewData1); -r(isset($result1['error']) ? 1 : 0) && p() && e(1); - -// 测试步骤2:测试sprint执行类型的字段计算 -$viewData2 = new stdclass(); -$viewData2->project = new stdclass(); -$viewData2->project->model = 'scrum'; -$viewData2->executionType = 'sprint'; -$viewData2->planID = 0; -$result2 = $programplanTest->computeFieldsCreateViewTest($viewData2); -r(isset($result2['error']) ? 1 : 0) && p() && e(0); - -// 测试步骤3:测试ipd模型项目的字段计算 -$viewData3 = new stdclass(); -$viewData3->project = new stdclass(); -$viewData3->project->model = 'ipd'; -$viewData3->executionType = 'stage'; -$viewData3->planID = 0; -$result3 = $programplanTest->computeFieldsCreateViewTest($viewData3); -r(isset($result3['error']) ? 1 : 0) && p() && e(0); - -// 测试步骤4:测试waterfallplus模型项目的字段计算 -$viewData4 = new stdclass(); -$viewData4->project = new stdclass(); -$viewData4->project->model = 'waterfallplus'; -$viewData4->executionType = 'stage'; -$viewData4->planID = 0; -$result4 = $programplanTest->computeFieldsCreateViewTest($viewData4); -r(isset($result4['error']) ? 1 : 0) && p() && e(0); - -// 测试步骤5:测试带有planID的情况字段计算 -$viewData5 = new stdclass(); -$viewData5->project = new stdclass(); -$viewData5->project->model = 'scrum'; -$viewData5->executionType = 'stage'; -$viewData5->planID = 1; -$result5 = $programplanTest->computeFieldsCreateViewTest($viewData5); -r(isset($result5['error']) ? 1 : 0) && p() && e(1); \ No newline at end of file diff --git a/module/programplan/test/zen/prepareeditplan.php b/module/programplan/test/zen/prepareeditplan.php deleted file mode 100755 index 5d2c446e00..0000000000 --- a/module/programplan/test/zen/prepareeditplan.php +++ /dev/null @@ -1,103 +0,0 @@ -#!/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/project/test/model/getexecutionproductgroup.php b/module/project/test/model/getexecutionproductgroup.php deleted file mode 100755 index 0d5803588b..0000000000 --- a/module/project/test/model/getexecutionproductgroup.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -loadYaml('projectproduct_getexecutionproductgroup', false, 2)->gen(15); - -/** - -title=测试 projectModel->getExecutionProductGroup(); -timeout=0 -cid=0 - -- 测试获取多个执行ID的产品分组,检查项目11的第一个产品 @1 -- 测试获取多个执行ID的产品分组,检查项目12的第一个产品 @2 -- 测试获取单个执行ID的产品分组,检查结果的项目数量 @1 -- 测试传入空数组的情况,检查结果数量 @0 -- 测试传入不存在执行ID的情况,检查结果数量 @0 - -*/ - -global $tester; -$tester->loadModel('project'); - -$result1 = $tester->project->getExecutionProductGroup(array(11, 12, 13)); -$result2 = $tester->project->getExecutionProductGroup(array(11)); -$result3 = $tester->project->getExecutionProductGroup(array()); -$result4 = $tester->project->getExecutionProductGroup(array(999, 1000)); -$result5 = $tester->project->getExecutionProductGroup(array(11, 999, 12)); - -r($result1[11][0]) && p('') && e('1'); // 测试获取多个执行ID的产品分组,检查项目11的第一个产品 -r($result1[12][0]) && p('') && e('2'); // 测试获取多个执行ID的产品分组,检查项目12的第一个产品 -r(count($result2)) && p('') && e('1'); // 测试获取单个执行ID的产品分组,检查结果的项目数量 -r(count($result3)) && p('') && e('0'); // 测试传入空数组的情况,检查结果数量 -r(count($result4)) && p('') && e('0'); // 测试传入不存在执行ID的情况,检查结果数量 \ No newline at end of file diff --git a/module/project/test/tao/buildlinkforbug.php b/module/project/test/tao/buildlinkforbug.php deleted file mode 100755 index 32e15f48bb..0000000000 --- a/module/project/test/tao/buildlinkforbug.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -buildLinkForBugTest('create')) && p() && e('Undefined variable $module:'); -r($projectTest->buildLinkForBugTest('edit')) && p() && e('/home/z/rzto/module/project/test/tao/buildlinkforbug.php?m=project&f=bug&projectID=%s'); -r($projectTest->buildLinkForBugTest('')) && p() && e('projectTao::buildLinkForBug(): Return value must be of type string, none returned'); -r($projectTest->buildLinkForBugTest('invalid')) && p() && e('projectTao::buildLinkForBug(): Return value must be of type string, none returned'); -r($projectTest->buildLinkForBugTest('test')) && p() && e('projectTao::buildLinkForBug(): Return value must be of type string, none returned'); \ No newline at end of file diff --git a/module/project/test/tao/buildlinkforproject.php b/module/project/test/tao/buildlinkforproject.php deleted file mode 100755 index 751bc35272..0000000000 --- a/module/project/test/tao/buildlinkforproject.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -buildLinkForProjectTest('execution')) && p() && e('Undefined variable $module'); // 步骤1:测试execution方法错误 -r($projectTest->buildLinkForProjectTest('managePriv')) && p() && e('Undefined variable $module'); // 步骤2:测试managePriv方法错误 -r($projectTest->buildLinkForProjectTest('showerrornone')) && p() && e('m=projectstory&f=story&projectID=%s'); // 步骤3:测试showerrornone方法正常 -r($projectTest->buildLinkForProjectTest('bug')) && p() && e('Undefined variable $module'); // 步骤4:测试预定义方法bug错误 -r($projectTest->buildLinkForProjectTest('view')) && p() && e('Undefined variable $module'); // 步骤5:测试预定义方法view错误 -r($projectTest->buildLinkForProjectTest('testcase')) && p() && e('Undefined variable $module'); // 步骤6:测试预定义方法testcase错误 -r($projectTest->buildLinkForProjectTest('invalidmethod')) && p() && e('projectTao::buildLinkForProject(): Return value must be of type string, none returned'); // 步骤7:测试未定义方法错误 \ No newline at end of file diff --git a/module/project/test/tao/buildlinkforstory.php b/module/project/test/tao/buildlinkforstory.php deleted file mode 100755 index 3f030821fe..0000000000 --- a/module/project/test/tao/buildlinkforstory.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -createLink('projectstory', 'story', "projectID=%s"); - if($method == 'zerocase') - return $this->createLink('project', 'testcase', "projectID=%s"); - - return ''; - } - - private function createLink($module, $method, $vars = '') - { - return "test.php?m=$module&f=$method&$vars"; - } - } - $projectTest = new projectTest(); -} - -r($projectTest->buildLinkForStoryTest('change')) && p() && e('test.php?m=projectstory&f=story&projectID=%s'); // 测试change方法 -r($projectTest->buildLinkForStoryTest('create')) && p() && e('test.php?m=projectstory&f=story&projectID=%s'); // 测试create方法 -r($projectTest->buildLinkForStoryTest('zerocase')) && p() && e('test.php?m=project&f=testcase&projectID=%s'); // 测试zerocase方法 -r($projectTest->buildLinkForStoryTest('unknown')) && p() && e('0'); // 测试未定义方法 -r($projectTest->buildLinkForStoryTest('')) && p() && e('0'); // 测试空方法名 \ No newline at end of file diff --git a/module/project/test/zen/assigntesttaskvars.php b/module/project/test/zen/assigntesttaskvars.php deleted file mode 100755 index b61c5b5602..0000000000 --- a/module/project/test/zen/assigntesttaskvars.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->product->range('1{3},2{3},3{4}'); -$table->build->range('1,2,trunk,3{2},4{4},5'); -$table->status->range('wait{2},doing{3},blocked{2},done{3}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectzenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->assignTesttaskVarsTest('normal_tasks')) && p('waitCount,testingCount,blockedCount,doneCount') && e('2,3,2,3'); // 步骤1:正常情况 -r($projectTest->assignTesttaskVarsTest('empty_tasks')) && p('waitCount,testingCount,blockedCount,doneCount') && e('0,0,0,0'); // 步骤2:空列表 -r($projectTest->assignTesttaskVarsTest('mixed_status')) && p('waitCount,testingCount,blockedCount,doneCount') && e('1,2,1,1'); // 步骤3:混合状态 -r($projectTest->assignTesttaskVarsTest('trunk_build')) && p('trunkCount') && e('1'); // 步骤4:trunk版本 -r($projectTest->assignTesttaskVarsTest('grouped_products')) && p('productGroupsCount') && e('3'); // 步骤5:产品分组 \ No newline at end of file diff --git a/module/project/test/zen/buildactivateform.php b/module/project/test/zen/buildactivateform.php deleted file mode 100755 index dffa990b95..0000000000 --- a/module/project/test/zen/buildactivateform.php +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$project->name->range('项目1,项目2,项目3,项目4,项目5'); -$project->begin->range('`2023-01-01`,`2023-02-01`,`2023-03-01`,`2023-04-01`,`2023-05-01`'); -$project->end->range('`2023-12-31`,`2023-12-31`,`2023-12-31`,`2023-12-31`,`2023-12-31`'); -$project->status->range('wait,doing,suspended,closed,wait'); -$project->type->range('project{5}'); -$project->acl->range('open{5}'); -$project->gen(5); - -$user = zenData('user'); -$user->id->range('1-5'); -$user->account->range('admin,user1,user2,user3,user4'); -$user->realname->range('管理员,用户1,用户2,用户3,用户4'); -$user->deleted->range('0{5}'); -$user->gen(5); - -su('admin'); - -$projectTest = new projectTest(); - -// 测试步骤1:传入正常项目对象 -$normalProject = new stdClass(); -$normalProject->id = 1; -$normalProject->begin = '2023-01-01'; -$normalProject->end = '2023-12-31'; -r($projectTest->buildActivateFormTest($normalProject)) && p() && e('1'); - -// 测试步骤2:传入null项目对象(使用默认值) -r($projectTest->buildActivateFormTest(null)) && p() && e('1'); - -// 测试步骤3:传入不同日期的项目对象 -$project2 = new stdClass(); -$project2->id = 2; -$project2->begin = '2024-01-01'; -$project2->end = '2024-06-30'; -r($projectTest->buildActivateFormTest($project2)) && p() && e('1'); - -// 测试步骤4:传入长期项目对象 -$project3 = new stdClass(); -$project3->id = 3; -$project3->begin = '2023-01-01'; -$project3->end = '2025-12-31'; -r($projectTest->buildActivateFormTest($project3)) && p() && e('1'); - -// 测试步骤5:传入短期项目对象 -$project4 = new stdClass(); -$project4->id = 4; -$project4->begin = '2024-01-01'; -$project4->end = '2024-01-31'; -r($projectTest->buildActivateFormTest($project4)) && p() && e('1'); \ No newline at end of file diff --git a/module/project/test/zen/buildbugview.php b/module/project/test/zen/buildbugview.php deleted file mode 100755 index 6f6b14d47c..0000000000 --- a/module/project/test/zen/buildbugview.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10'); -$project->status->range('wait,doing,suspended,closed'); -$project->hasProduct->range('1{8},0{2}'); -$project->multiple->range('1{6},0{4}'); -$project->gen(10); - -$bug = zenData('bug'); -$bug->id->range('1-20'); -$bug->project->range('1-5'); -$bug->product->range('1-3'); -$bug->title->range('Bug1,Bug2,Bug3,Bug4,Bug5,Bug6,Bug7,Bug8,Bug9,Bug10,Bug11,Bug12,Bug13,Bug14,Bug15,Bug16,Bug17,Bug18,Bug19,Bug20'); -$bug->status->range('active,resolved,closed'); -$bug->openedBy->range('user1,user2,admin'); -$bug->assignedTo->range('user1,user2,user3'); -$bug->gen(20); - -$user = zenData('user'); -$user->id->range('1-10'); -$user->account->range('admin,user1,user2,user3,user4,user5,user6,user7,user8,user9'); -$user->realname->range('管理员,用户1,用户2,用户3,用户4,用户5,用户6,用户7,用户8,用户9'); -$user->gen(10); - -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->type->range('normal{3},branch{2}'); -$product->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->buildBugViewTest(1, 1, (object)array('id' => 1, 'name' => '项目1', 'hasProduct' => 1, 'multiple' => 1), 'all', 0, 'id_desc', 0, 'all', array(1 => (object)array('id' => 1, 'name' => '产品1')), 20, 20, 1)) && p() && e('success'); // 步骤1:正常情况 -r($projectTest->buildBugViewTest(0, 1, (object)array('id' => 1, 'name' => '项目1', 'hasProduct' => 1, 'multiple' => 1), 'all', 0, 'id_desc', 0, 'all', array(1 => (object)array('id' => 1, 'name' => '产品1')), 15, 20, 1)) && p() && e('success'); // 步骤2:无产品ID -r($projectTest->buildBugViewTest(1, 0, (object)array('id' => 0, 'name' => '', 'hasProduct' => 0, 'multiple' => 0), 'all', 0, 'id_desc', 0, 'all', array(), 10, 20, 1)) && p() && e('error'); // 步骤3:无项目ID -r($projectTest->buildBugViewTest('', '', null, '', '', '', '', '', array(), 0, 0, 0)) && p() && e('error'); // 步骤4:空参数 -r($projectTest->buildBugViewTest(1, 1, (object)array('id' => 1, 'name' => '项目1', 'hasProduct' => 1, 'multiple' => 1), 'all', 0, 'id_desc', 0, 'all', array(1 => (object)array('id' => 1, 'name' => '产品1')), 1000, 100, 10)) && p() && e('success'); // 步骤5:大数据量分页 \ No newline at end of file diff --git a/module/project/test/zen/buildcreateform.php b/module/project/test/zen/buildcreateform.php deleted file mode 100755 index 9cde7c4a75..0000000000 --- a/module/project/test/zen/buildcreateform.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -buildCreateFormTest('scrum', 1, 0, '')) && p() && e('no_return'); // 步骤1:正常情况测试 -r($projectTest->buildCreateFormTest('kanban', 2, 0, '')) && p() && e('no_return'); // 步骤2:kanban模型测试 -r($projectTest->buildCreateFormTest('waterfall', 1, 11, '')) && p() && e('no_return'); // 步骤3:带复制项目ID测试 -r($projectTest->buildCreateFormTest('scrum', 1, 0, 'productID=1&branchID=1')) && p() && e('no_return'); // 步骤4:带额外参数测试 -r($projectTest->buildCreateFormTest('scrum', 1, 0, 'from=global')) && p() && e('no_return'); // 步骤5:边界值测试 \ No newline at end of file diff --git a/module/project/test/zen/buildmembers.php b/module/project/test/zen/buildmembers.php deleted file mode 100755 index c667daa042..0000000000 --- a/module/project/test/zen/buildmembers.php +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env php -memberType @default - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/project.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -$table = zenData('user'); -$table->account->range('admin,user1,user2,dept1,dept2,import1,import2'); -$table->realname->range('管理员,用户1,用户2,部门用户1,部门用户2,导入用户1,导入用户2'); -$table->role->range('admin,dev,tester,qa,pm,dev,tester'); -$table->gen(7); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 步骤1:正常情况 - 包含所有类型成员,验证数组总数(2当前+2部门+1导入+5新增=10) -$currentMembers = array( - 'admin' => (object)array('account' => 'admin', 'role' => 'admin', 'days' => 10, 'hours' => 8, 'limited' => 'no'), - 'user1' => (object)array('account' => 'user1', 'role' => 'dev', 'days' => 10, 'hours' => 8, 'limited' => 'no') -); -$members2Import = array( - 'import1' => (object)array('account' => 'import1', 'role' => 'tester', 'hours' => 8) -); -$deptUsers = array('dept1' => '部门用户1', 'dept2' => '部门用户2'); -$result1 = $projectTest->buildMembersTest($currentMembers, $members2Import, $deptUsers, 10); -r(count($result1)) && p('') && e('10'); - -// 步骤2:空参数情况,验证只有5个新增成员 -$result2 = $projectTest->buildMembersTest(array(), array(), array(), 5); -r(count($result2)) && p('') && e('5'); - -// 步骤3:只有当前成员,验证总数为6(1个当前+5个新增) -$currentMembers = array( - 'admin' => (object)array('account' => 'admin', 'role' => 'admin', 'days' => 5, 'hours' => 8, 'limited' => 'no') -); -$result3 = $projectTest->buildMembersTest($currentMembers, array(), array(), 5); -r(count($result3)) && p('') && e('6'); - -// 步骤4:只有部门用户,验证总数为7(2个部门+5个新增) -$deptUsers = array('dept1' => '部门用户1', 'dept2' => '部门用户2'); -$result4 = $projectTest->buildMembersTest(array(), array(), $deptUsers, 8); -r(count($result4)) && p('') && e('7'); - -// 步骤5:验证成员类型标识正确设置 -$currentMembers = array('user1' => (object)array('account' => 'user1', 'role' => 'dev')); -$members2Import = array('import1' => (object)array('account' => 'import1', 'role' => 'tester')); -$deptUsers = array('dept1' => '部门用户1'); -$result5 = $projectTest->buildMembersTest($currentMembers, $members2Import, $deptUsers, 15); -r($result5['user1']->memberType) && p('') && e('default'); \ No newline at end of file diff --git a/module/project/test/zen/buildstartform.php b/module/project/test/zen/buildstartform.php deleted file mode 100755 index 4eb66f059d..0000000000 --- a/module/project/test/zen/buildstartform.php +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('项目1,项目2,项目3,项目4,项目5'); -$table->status->range('wait,doing,suspended,closed,wait'); -$table->type->range('project'); -$table->acl->range('open'); -$table->gen(5); - -$table = zenData('user'); -$table->id->range('1-5'); -$table->account->range('admin,user1,user2,user3,user4'); -$table->realname->range('管理员,用户1,用户2,用户3,用户4'); -$table->password->range('123456'); -$table->role->range('admin,qa,dev,pm,qa'); -$table->gen(5); - -su('admin'); - -// 测试函数 -function buildStartFormTest($project = null) -{ - global $lang, $app; - - // 初始化语言 - if(!isset($lang->project->start)) $lang->project->start = '启动项目'; - - // 模拟view对象 - $view = new stdClass(); - - // 如果project参数为null,创建默认项目对象 - if($project === null) { - $project = new stdClass(); - $project->id = 1; - $project->name = '测试项目'; - $project->status = 'wait'; - } - - // 模拟buildStartForm方法的核心逻辑 - $view->title = $lang->project->start; - $view->project = $project; - - // 模拟用户数据 - $view->users = array('admin' => '管理员', 'user1' => '用户1', 'user2' => '用户2'); - - // 模拟动作历史数据 - $view->actions = array( - (object)array('id' => 1, 'action' => 'opened', 'actor' => 'admin', 'date' => '2024-01-01'), - (object)array('id' => 2, 'action' => 'edited', 'actor' => 'user1', 'date' => '2024-01-02') - ); - - // 验证view中设置的数据 - $result = array(); - $result['title'] = isset($view->title) ? $view->title : ''; - $result['projectSet'] = isset($view->project) ? 1 : 0; - $result['usersCount'] = isset($view->users) ? count($view->users) : 0; - $result['actionsCount'] = isset($view->actions) ? count($view->actions) : 0; - - return $result; -} - -$project1 = new stdClass(); -$project1->id = 1; -$project1->name = '正常项目'; -$project1->status = 'wait'; - -$project2 = null; - -$project3 = new stdClass(); -$project3->id = 2; -$project3->name = '进行中项目'; -$project3->status = 'doing'; - -$project4 = new stdClass(); -$project4->id = 999; -$project4->name = '不存在项目'; -$project4->status = 'closed'; - -$project5 = new stdClass(); -$project5->id = 0; -$project5->name = ''; -$project5->status = ''; - -r(buildStartFormTest($project1)) && p('title,projectSet,usersCount') && e('启动项目,1,3'); -r(buildStartFormTest($project2)) && p('title,projectSet,usersCount') && e('启动项目,1,3'); -r(buildStartFormTest($project3)) && p('title,projectSet,actionsCount') && e('启动项目,1,2'); -r(buildStartFormTest($project4)) && p('title,usersCount,actionsCount') && e('启动项目,3,2'); -r(buildStartFormTest($project5)) && p('title,projectSet') && e('启动项目,1'); \ No newline at end of file diff --git a/module/project/test/zen/buildsuspendform.php b/module/project/test/zen/buildsuspendform.php deleted file mode 100755 index 54d24e9ba9..0000000000 --- a/module/project/test/zen/buildsuspendform.php +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('正常项目,敏捷项目,瀑布项目,看板项目,进行中项目,暂停项目,已关闭项目,新建项目,测试项目,演示项目'); -$table->status->range('wait{2},doing{5},suspended{2},closed{1}'); -$table->type->range('project'); -$table->acl->range('open{7},private{2},custom{1}'); -$table->gen(10); - -$table = zenData('user'); -$table->id->range('1-10'); -$table->account->range('admin,user1,user2,user3,pm1,qa1,dev1,test1,rd1,guest'); -$table->realname->range('管理员,用户1,用户2,用户3,项目经理1,质量工程师1,开发工程师1,测试工程师1,发布经理1,访客用户'); -$table->password->range('123456'); -$table->role->range('admin,pm,qa,dev,test,qa,dev,test,pm,guest'); -$table->gen(10); - -su('admin'); - -// 测试函数 -function buildSuspendFormTest($projectID = null) -{ - global $lang, $app, $tester; - - // 初始化语言 - if(!isset($lang->project->suspend)) $lang->project->suspend = '挂起项目'; - - // 模拟view对象 - $view = new stdClass(); - - // 模拟buildSuspendForm方法的核心逻辑 - $view->title = $lang->project->suspend; - - // 模拟用户数据 - $userModel = $tester->loadModel('user'); - $view->users = $userModel->getPairs('noletter'); - - // 模拟动作历史数据 - $actionModel = $tester->loadModel('action'); - if($projectID && is_numeric($projectID) && $projectID > 0) - { - // 模拟获取项目动作历史 - $view->actions = $actionModel->getList('project', $projectID); - } - else - { - $view->actions = array(); - } - - // 模拟获取项目信息 - if($projectID && is_numeric($projectID) && $projectID > 0 && $projectID <= 10) - { - $projectModel = $tester->loadModel('project'); - $project = $projectModel->getByID($projectID); - if($project) $view->project = $project; - } - - // 验证view中设置的数据 - $result = array(); - $result['title'] = isset($view->title) ? $view->title : ''; - $result['users'] = isset($view->users) && !empty($view->users) ? 'users loaded' : 'users not loaded'; - $result['actions'] = isset($view->actions) ? 'actions loaded' : 'actions not loaded'; - $result['project'] = isset($view->project) ? 'project loaded' : 'project not loaded'; - - return $result; -} - -r(buildSuspendFormTest(1)) && p('title,users,actions,project') && e('挂起项目,users loaded,actions loaded,project loaded'); -r(buildSuspendFormTest(0)) && p('title,users,actions') && e('挂起项目,users loaded,actions loaded'); -r(buildSuspendFormTest(999)) && p('title,users,actions') && e('挂起项目,users loaded,actions loaded'); -r(buildSuspendFormTest(-1)) && p('title,users,actions') && e('挂起项目,users loaded,actions loaded'); -r(buildSuspendFormTest(null)) && p('title,users,actions') && e('挂起项目,users loaded,actions loaded'); \ No newline at end of file diff --git a/module/project/test/zen/buildusers.php b/module/project/test/zen/buildusers.php deleted file mode 100755 index 27292e05cb..0000000000 --- a/module/project/test/zen/buildusers.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -account->range('admin,user1,user2,user3,user4'); -$table->realname->range('管理员,用户1,用户2,用户3,用户4'); -$table->password->range('123456{5}'); -$table->role->range('admin{1},dev{2},qa{1},pm{1}'); -$table->deleted->range('0{5}'); -$table->type->range('inside{5}'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$result1 = $projectTest->buildUsersTest(); -$result2 = $projectTest->buildUsersTest(); -$result3 = $projectTest->buildUsersTest(); -$result4 = $projectTest->buildUsersTest(); -$result5 = $projectTest->buildUsersTest(); - -r(count($result1)) && p() && e('2'); // 步骤1:返回数组长度为2 -r(count($result2[0])) && p() && e('5'); // 步骤2:userPairs数组包含5个用户 -r(isset($result3[0]['admin']) ? $result3[0]['admin'] : false) && p() && e('管理员'); // 步骤3:验证admin的真实姓名 -r(isset($result4[1]['user1']) ? $result4[1]['user1']->account : false) && p() && e('user1'); // 步骤4:验证user1的账号 -r(isset($result5[1]['user2']) ? $result5[1]['user2']->realname : false) && p() && e('用户2'); // 步骤5:验证user2的真实姓名 \ No newline at end of file diff --git a/module/project/test/zen/checkdaysandbudget.php b/module/project/test/zen/checkdaysandbudget.php deleted file mode 100755 index 3ba23ac466..0000000000 --- a/module/project/test/zen/checkdaysandbudget.php +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env php -> 期望返回true -- 步骤2:工作日天数超过范围 >> 期望返回错误信息 -- 步骤3:非长期项目结束日期为空 >> 期望返回错误信息 -- 步骤4:预算为非数字格式 >> 期望返回错误信息 -- 步骤5:预算为负数 >> 期望返回错误信息 -- 步骤6:长期项目delta为999正常验证 >> 期望返回true -- 步骤7:预算为0正常验证 >> 期望返回true - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/projectzen.unittest.class.php'; - -su('admin'); - -$projectTest = new projectzenTest(); - -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => '2024-01-31', 'days' => 20, 'budget' => '1000'), (object)array('delta' => 30, 'budget' => '1000'))) && p() && e('1'); -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => '2024-01-15', 'days' => 20, 'budget' => '2000'), (object)array('delta' => 30, 'budget' => '2000'))) && p('days') && e('可用工作日不能超过『15』天'); -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => null, 'days' => 10, 'budget' => '3000'), (object)array('delta' => 30, 'budget' => '3000'))) && p('end') && e('『计划完成』不能为空。'); -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => '2024-01-31', 'days' => 20, 'budget' => 'abc'), (object)array('delta' => 30, 'budget' => 'abc'))) && p('budget') && e('『预算』金额必须为数字。'); -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => '2024-01-31', 'days' => 20, 'budget' => '-500'), (object)array('delta' => 30, 'budget' => '-500'))) && p('budget') && e('『预算』金额必须大于等于0。'); -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => '', 'days' => 10, 'budget' => '1000'), (object)array('delta' => 999, 'budget' => '1000'))) && p() && e('1'); -r($projectTest->checkDaysAndBudgetTest((object)array('begin' => '2024-01-01', 'end' => '2024-01-31', 'days' => 10, 'budget' => '0'), (object)array('delta' => 30, 'budget' => '0'))) && p() && e('1'); \ No newline at end of file diff --git a/module/project/test/zen/checkproductandbranch.php b/module/project/test/zen/checkproductandbranch.php deleted file mode 100755 index 94a27990dd..0000000000 --- a/module/project/test/zen/checkproductandbranch.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->hasProduct->range('1{3},0{2}'); -$table->parent->range('1-5'); -$table->name->range('项目1,项目2,项目3,项目4,项目5'); -$table->gen(5); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品1,产品2,产品3,产品4,产品5'); -$productTable->type->range('normal{3},platform{2}'); -$productTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->checkProductAndBranchTest(1, array('hasProduct' => 1), array('products' => array(1, 2), 'branch' => array(array(0), array(0))))) && p() && e('1'); // 步骤1:正常情况有产品关联 -r($projectTest->checkProductAndBranchTest(2, array('hasProduct' => 1, 'parent' => 1), array())) && p() && e('0'); // 步骤2:有产品但无关联产品数量且无新增产品 -r($projectTest->checkProductAndBranchTest(3, array('hasProduct' => 1), array('products' => array(999), 'branch' => array(array(0))), true)) && p() && e('0'); // 步骤3:API模式产品不存在 -r($projectTest->checkProductAndBranchTest(4, array('hasProduct' => 1), array('products' => array(4), 'branch' => array(array(''))))) && p() && e('0'); // 步骤4:分支为空 -r($projectTest->checkProductAndBranchTest(5, array('hasProduct' => 0), array())) && p() && e('1'); // 步骤5:无产品项目正常情况 \ No newline at end of file diff --git a/module/project/test/zen/checkworkdayslegtimate.php b/module/project/test/zen/checkworkdayslegtimate.php deleted file mode 100755 index 664b71d0ff..0000000000 --- a/module/project/test/zen/checkworkdayslegtimate.php +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_checkworkdayslegtimate', false, 2)->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$projectTest = new projectZenTest(); - -// 5. 测试步骤(必须至少5个) - -// 步骤1:正常情况,工作天数(20)小于日期差(30+1=31) -$project1 = new stdClass(); -$project1->begin = '2024-01-01'; -$project1->end = '2024-01-31'; -$project1->days = 20; -r($projectTest->checkWorkdaysLegtimateTest($project1)) && p() && e('1'); - -// 步骤2:边界情况,工作天数(31)等于日期差(30+1=31) -$project2 = new stdClass(); -$project2->begin = '2024-01-01'; -$project2->end = '2024-01-31'; -$project2->days = 31; -r($projectTest->checkWorkdaysLegtimateTest($project2)) && p() && e('1'); - -// 步骤3:无效情况,工作天数(40)大于日期差(30+1=31) -$project3 = new stdClass(); -$project3->begin = '2024-01-01'; -$project3->end = '2024-01-31'; -$project3->days = 40; -dao::$errors = array(); // 清除之前的错误 -r($projectTest->checkWorkdaysLegtimateTest($project3)) && p() && e('0'); - -// 步骤4:无工作天数字段情况 -$project4 = new stdClass(); -$project4->begin = '2024-01-01'; -$project4->end = '2024-01-31'; -r($projectTest->checkWorkdaysLegtimateTest($project4)) && p() && e('1'); - -// 步骤5:工作天数为0的情况 -$project5 = new stdClass(); -$project5->begin = '2024-01-01'; -$project5->end = '2024-01-31'; -$project5->days = 0; -r($projectTest->checkWorkdaysLegtimateTest($project5)) && p() && e('1'); \ No newline at end of file diff --git a/module/project/test/zen/displayaftercreated.php b/module/project/test/zen/displayaftercreated.php deleted file mode 100755 index 60229140f4..0000000000 --- a/module/project/test/zen/displayaftercreated.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目{1-10}'); -$table->status->range('wait,doing,done'); -$table->multiple->range('0,1'); -$table->hasProduct->range('0,1'); -$table->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品{1-5}'); -$productTable->status->range('normal'); -$productTable->gen(5); - -$executionTable = zenData('execution'); -$executionTable->id->range('1-5'); -$executionTable->project->range('1-5'); -$executionTable->name->range('执行{1-5}'); -$executionTable->status->range('wait,doing,done'); -$executionTable->gen(5); - -su('admin'); - -$projectzenTest = new projectzenTest(); - -r($projectzenTest->displayAfterCreatedTest(1)) && p() && e('valid project id'); -r($projectzenTest->displayAfterCreatedTest(999)) && p() && e('non-existent project id'); -r($projectzenTest->displayAfterCreatedTest(0)) && p() && e('zero project id'); -r($projectzenTest->displayAfterCreatedTest(-1)) && p() && e('negative project id'); -r($projectzenTest->displayAfterCreatedTest('invalid')) && p() && e('projectID parameter must be int'); \ No newline at end of file diff --git a/module/project/test/zen/expandexecutionidlist.php b/module/project/test/zen/expandexecutionidlist.php deleted file mode 100755 index 9d591dfb55..0000000000 --- a/module/project/test/zen/expandexecutionidlist.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -expandExecutionIdListTest(array())) && p() && e('0'); -r($projectTest->expandExecutionIdListTest('single_execution')) && p() && e('1'); -r($projectTest->expandExecutionIdListTest('nested_executions')) && p() && e('3'); -r($projectTest->expandExecutionIdListTest('multi_level_nesting')) && p() && e('7'); -r($projectTest->expandExecutionIdListTest('mixed_executions')) && p() && e('4'); \ No newline at end of file diff --git a/module/project/test/zen/extractunmodifyform.php b/module/project/test/zen/extractunmodifyform.php deleted file mode 100755 index 8db06d412e..0000000000 --- a/module/project/test/zen/extractunmodifyform.php +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_extractunmodifyform', false, 2)->gen(10); - -$productTable = zenData('product'); -$productTable->loadYaml('product_extractunmodifyform', false, 2)->gen(15); - -$projectProductTable = zenData('projectproduct'); -$projectProductTable->loadYaml('projectproduct_extractunmodifyform', false, 2)->gen(11); - -$projectStoryTable = zenData('projectstory'); -$projectStoryTable->loadYaml('projectstory_extractunmodifyform', false, 2)->gen(6); - -$branchTable = zenData('branch'); -$branchTable->loadYaml('branch_extractunmodifyform', false, 2)->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$projectTest = new projectTest(); - -// 5. 测试步骤(必须包含至少5个测试步骤) - -// 步骤1:测试正常项目关联产品的情况 -$project1 = new stdClass(); -$project1->id = 1; -$project1->model = 'scrum'; -$project1->parent = 1; -$project1->hasProduct = 1; -$project1->multiple = 1; -$project1->path = ',1,'; -r($projectTest->extractUnModifyFormTest(1, $project1)) && p() && e('normal_project_with_products'); - -// 步骤2:测试项目有故事关联的产品不可修改情况 -$project2 = new stdClass(); -$project2->id = 2; -$project2->model = 'scrum'; -$project2->parent = 2; -$project2->hasProduct = 1; -$project2->multiple = 1; -$project2->path = ',2,'; -r($projectTest->extractUnModifyFormTest(2, $project2)) && p() && e('project_with_unmodifiable_products'); - -// 步骤3:测试瀑布项目模型下的产品关联情况 -$project3 = new stdClass(); -$project3->id = 3; -$project3->model = 'waterfall'; -$project3->parent = 3; -$project3->hasProduct = 1; -$project3->multiple = 0; -$project3->path = ',3,'; -r($projectTest->extractUnModifyFormTest(3, $project3)) && p() && e('waterfall_project_products'); - -// 步骤4:测试看板项目模型的产品关联情况 -$project4 = new stdClass(); -$project4->id = 4; -$project4->model = 'kanban'; -$project4->parent = 4; -$project4->hasProduct = 1; -$project4->multiple = 1; -$project4->path = ',4,'; -r($projectTest->extractUnModifyFormTest(4, $project4)) && p() && e('kanban_project_products'); - -// 步骤5:测试无产品关联的项目情况 -$project5 = new stdClass(); -$project5->id = 10; -$project5->model = 'scrum'; -$project5->parent = 0; -$project5->hasProduct = 0; -$project5->multiple = 0; -$project5->path = ',10,'; -r($projectTest->extractUnModifyFormTest(10, $project5)) && p() && e('project_without_products'); \ No newline at end of file diff --git a/module/project/test/zen/getkanbandata.php b/module/project/test/zen/getkanbandata.php deleted file mode 100755 index bc4bea6a7c..0000000000 --- a/module/project/test/zen/getkanbandata.php +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env php -getKanbanDataTest('empty_data')) && p() && e('0'); -r($getkanbandataTest->getKanbanDataTest('single_project')) && p('0:key') && e('sprint'); -r($getkanbandataTest->getKanbanDataTest('multiple_projects')) && p() && e('1'); -r($getkanbandataTest->getKanbanDataTest('multi_lane_projects')) && p() && e('2'); -r($getkanbandataTest->getKanbanDataTest('with_executions')) && p() && e('1'); \ No newline at end of file diff --git a/module/project/test/zen/getotherproducts.php b/module/project/test/zen/getotherproducts.php deleted file mode 100755 index acdfb1ba2a..0000000000 --- a/module/project/test/zen/getotherproducts.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getOtherProductsTest(array(), array(), array(), array())) && p() && e('0'); -r($projectTest->getOtherProductsTest(array(1 => 'Product A', 2 => 'Product B'), array(1 => array(1 => 'Branch 1', 2 => 'Branch 2')), array(), array())) && p('1_1') && e('Product A_Branch 1'); -r($projectTest->getOtherProductsTest(array(1 => 'Product A', 2 => 'Product B'), array(1 => array(1 => 'Branch 1', 2 => 'Branch 2')), array(1 => array(1 => 1)), array(1 => 'Product A'))) && p('1_2') && e('Product A_Branch 2'); -r($projectTest->getOtherProductsTest(array(1 => 'Product A', 2 => 'Product B', 3 => 'Product C'), array(1 => array(1 => 'Branch 1'), 3 => array(1 => 'Branch 1', 2 => 'Branch 2')), array(), array(2 => 'Product B'))) && p('3_1') && e('Product C_Branch 1'); -r($projectTest->getOtherProductsTest(array(1 => 'Product A', 2 => 'Product B'), array(1 => array(1 => 'Branch 1', 2 => 'Branch 2')), array(1 => array(1 => 1)), array())) && p('2') && e('Product B'); \ No newline at end of file diff --git a/module/project/test/zen/preparebranchforbug.php b/module/project/test/zen/preparebranchforbug.php deleted file mode 100755 index 39d34dcae9..0000000000 --- a/module/project/test/zen/preparebranchforbug.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$productTable->name->range('产品A,产品B,产品C,产品D,产品E'); -$productTable->type->range('normal{2},branch{3}'); -$productTable->status->range('normal'); -$productTable->gen(5); - -$branchTable = zenData('branch'); -$branchTable->id->range('1-10'); -$branchTable->product->range('3{3},4{3},5{4}'); -$branchTable->name->range('主干,分支1,分支2,分支3,分支4,分支5,分支6,分支7,分支8,分支9'); -$branchTable->status->range('active{8},closed{2}'); -$branchTable->deleted->range('0'); -$branchTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectzenTest = new projectzenTest(); - -// 准备测试数据 -$products = array(); -for($i = 1; $i <= 5; $i++) -{ - $product = new stdClass(); - $product->id = $i; - $product->name = "产品" . chr(64 + $i); - $product->type = $i <= 2 ? 'normal' : 'branch'; - $products[$i] = $product; -} - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectzenTest->prepareBranchForBugTest($products, 0)) && p() && e('22'); // 步骤1:正常产品数组输入情况 -r($projectzenTest->prepareBranchForBugTest(array(), 0)) && p() && e('0'); // 步骤2:空产品数组输入 -r($projectzenTest->prepareBranchForBugTest($products, 3)) && p() && e('8'); // 步骤3:产品ID过滤情况 -r($projectzenTest->prepareBranchForBugTest($products, 4)) && p() && e('8'); // 步骤4:多分支产品处理情况 -r($projectzenTest->prepareBranchForBugTest($products, 5)) && p() && e('10'); // 步骤5:已关闭分支状态显示 \ No newline at end of file diff --git a/module/project/test/zen/prepareclosedextras.php b/module/project/test/zen/prepareclosedextras.php deleted file mode 100755 index d69d3b0313..0000000000 --- a/module/project/test/zen/prepareclosedextras.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目{1-10}'); -$table->status->range('wait{3},doing{4},closed{3}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectzenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->prepareClosedExtrasTest(1, (object)array('comment' => '关闭项目', 'status' => 'closed'))) && p('status') && e('closed'); // 步骤1:正常情况 -r($projectTest->prepareClosedExtrasTest(0, (object)array('comment' => '测试', 'status' => 'closed'))) && p('id') && e(0); // 步骤2:边界值 -r($projectTest->prepareClosedExtrasTest(1, (object)array())) && p('status') && e('closed'); // 步骤3:空POST数据 -r($projectTest->prepareClosedExtrasTest(-1, (object)array('comment' => '测试', 'status' => 'closed'))) && p('id') && e(-1); // 步骤4:负数项目ID -r($projectTest->prepareClosedExtrasTest(1, (object)array('comment' => '测试', 'status' => 'closed'))) && p('status,closedBy') && e('closed,admin'); // 步骤5:HTML标签过滤 \ No newline at end of file diff --git a/module/project/test/zen/preparemoduleforbug.php b/module/project/test/zen/preparemoduleforbug.php deleted file mode 100755 index c5e2337b34..0000000000 --- a/module/project/test/zen/preparemoduleforbug.php +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->root->range('1-3'); -$table->branch->range('0'); -$table->name->range('模块A,模块B,模块C,模块D,模块E,子模块1,子模块2,子模块3,子模块4,子模块5'); -$table->parent->range('0,0,0,1,1,2,2,3,3,4'); -$table->path->range(',1,,2,,1,2,,1,2,,2,3,,1,2,3,,1,2,4,,2,5,,2,6,,1,2,3,7,,1,2,3,8,,1,2,4,9,'); -$table->grade->range('1,1,1,2,2,2,2,3,3,3'); -$table->order->range('10,20,30,10,20,10,20,10,20,10'); -$table->type->range('bug{10}'); -$table->deleted->range('0{8},1{2}'); -$table->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品A,产品B,产品C,产品D,产品E'); -$productTable->type->range('normal{3},branch{2}'); -$productTable->status->range('normal{4},closed{1}'); -$productTable->deleted->range('0{4},1{1}'); -$productTable->gen(5); - -$projectTable = zenData('project'); -$projectTable->id->range('1-5'); -$projectTable->name->range('项目A,项目B,项目C,项目D,项目E'); -$projectTable->type->range('project{5}'); -$projectTable->status->range('wait,doing,suspended,closed,doing'); -$projectTable->hasProduct->range('1{4},0{1}'); -$projectTable->multiple->range('1,0,1,1,0'); -$projectTable->deleted->range('0{4},1{1}'); -$projectTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectzenTest = new projectzenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectzenTest->prepareModuleForBugTest(0, 1, 'all', 0, 'id_desc', 0, '0', array((object)array('id' => 1, 'name' => '产品A'), (object)array('id' => 2, 'name' => '产品B')))) && p('moduleTree,modules,moduleID') && e('1,9,0'); // 步骤1:项目有多个产品且productID为0 -r($projectzenTest->prepareModuleForBugTest(1, 2, 'bymodule', 3, 'id_asc', 1, '0', array((object)array('id' => 1, 'name' => '产品A')))) && p('moduleID,moduleName') && e('3,模块C'); // 步骤2:项目有单个产品且指定模块 -r($projectzenTest->prepareModuleForBugTest(0, 5, 'all', 0, 'id_desc', 0, '0', array())) && p('moduleTree,modules,moduleID') && e('0,9,0'); // 步骤3:项目无产品 -r($projectzenTest->prepareModuleForBugTest(2, 3, 'bysearch', 5, 'order_asc', 2, '1', array((object)array('id' => 2, 'name' => '产品B')))) && p('moduleID,moduleName') && e('0,所有模块'); // 步骤4:搜索类型参数 -r($projectzenTest->prepareModuleForBugTest(3, 4, 'bymodule', 2, 'name_desc', 0, '0', array((object)array('id' => 3, 'name' => '产品C')))) && p('moduleID,moduleName') && e('2,模块B'); // 步骤5:指定模块参数 \ No newline at end of file diff --git a/module/project/test/zen/prepareproject.php b/module/project/test/zen/prepareproject.php deleted file mode 100755 index e271f563b4..0000000000 --- a/module/project/test/zen/prepareproject.php +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('项目1,项目2,项目3,项目4,项目5'); -$table->parent->range('1,2,3,4,5'); -$table->begin->range('`2024-01-01`,`2024-02-01`,`2024-03-01`,`2024-04-01`,`2024-05-01`'); -$table->end->range('`2024-12-31`,`2024-11-30`,`2024-10-31`,`2024-09-30`,`2024-08-31`'); -$table->days->range('100,200,150,180,120'); -$table->budget->range('10000,20000,30000,40000,50000'); -$table->status->range('wait,doing,closed,suspended,wait'); -$table->hasProduct->range('1,0,1,1,0'); -$table->type->range('project'); -$table->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$projectTest = new projectZenTest(); - -// 5. 测试步骤 - 必须包含至少5个测试步骤 - -// 步骤1:有产品项目的正常数据准备 -$testData1 = array( - 'name' => '测试项目1', - 'budget' => '15000.567', - 'begin' => '2024-01-01', - 'end' => '2024-12-31', - 'days' => '200', - 'parent' => 1, - 'products' => array(1, 2), - 'branch' => array(array(0), array(0)) -); - -r($projectTest->prepareProjectTest($testData1, 1)) && p('name,budget') && e('测试项目1,15000.57'); - -// 步骤2:无产品项目的正常数据准备 -$testData2 = array( - 'name' => '测试项目2', - 'budget' => '20000' -); - -r($projectTest->prepareProjectTest($testData2, 0)) && p('name,team') && e('测试项目2,测试项目2'); - -// 步骤3:有产品项目但产品列表为空的情况 -$testData3 = array( - 'name' => '测试项目3', - 'products' => array(''), - 'branch' => array(array('')) -); -global $app; -$app->rawMethod = 'create'; - -r($projectTest->prepareProjectTest($testData3, 1)) && p('products[0]') && e('请关联产品或创建产品。'); - -// 步骤4:长期项目的数据处理 -$testData4 = array( - 'name' => '测试项目4', - 'longTime' => true, - 'delta' => '999' -); - -r($projectTest->prepareProjectTest($testData4, 0)) && p('days') && e('0'); - -// 步骤5:预算字段的数据处理和格式化 -$testData5 = array( - 'name' => '测试项目5', - 'budget' => '25000.789', - 'future' => false -); - -r($projectTest->prepareProjectTest($testData5, 0)) && p('budget') && e('25000.79'); \ No newline at end of file diff --git a/module/project/test/zen/preparestartextras.php b/module/project/test/zen/preparestartextras.php deleted file mode 100755 index 93842117d6..0000000000 --- a/module/project/test/zen/preparestartextras.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -app->loadClass('filter', true); - -su('admin'); - -$projectTest = new projectTest(); - -// 测试步骤1:正常输入包含基础字段的postData对象 -$_POST = array('name' => 'Test Project', 'desc' => 'Test Description'); -$postData1 = fixer::input('post'); -r($projectTest->prepareStartExtrasTest($postData1)) && p('status,lastEditedBy') && e('doing,guest'); - -// 测试步骤2:空的postData对象 -$_POST = array(); -$postData2 = fixer::input('post'); -r($projectTest->prepareStartExtrasTest($postData2)) && p('status,lastEditedBy') && e('doing,guest'); - -// 测试步骤3:包含额外属性的postData对象 -$_POST = array('name' => 'Extended Project', 'PM' => 'user1', 'budget' => 10000); -$postData3 = fixer::input('post'); -r($projectTest->prepareStartExtrasTest($postData3)) && p('status,lastEditedBy,name,PM') && e('doing,guest,Extended Project,user1'); - -// 测试步骤4:测试postData包含已存在status字段的情况(应被覆盖为doing) -$_POST = array('status' => 'wait', 'name' => 'Override Status Project'); -$postData4 = fixer::input('post'); -r($projectTest->prepareStartExtrasTest($postData4)) && p('status,lastEditedBy') && e('doing,guest'); - -// 测试步骤5:测试postData包含已存在lastEditedBy字段的情况(应被覆盖为guest) -$_POST = array('lastEditedBy' => 'user2', 'name' => 'Override Editor Project'); -$postData5 = fixer::input('post'); -r($projectTest->prepareStartExtrasTest($postData5)) && p('status,lastEditedBy') && e('doing,guest'); \ No newline at end of file diff --git a/module/project/test/zen/preparesuspendextras.php b/module/project/test/zen/preparesuspendextras.php deleted file mode 100755 index f99a0f63ac..0000000000 --- a/module/project/test/zen/preparesuspendextras.php +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env php -{$key} = $value; - return $this; - } - - public function setDefault($key, $value) { - if(!property_exists($this, $key) || !isset($this->{$key})) { - $this->{$key} = $value; - } - return $this; - } - - public function stripTags($fields, $allowedTags) { - return $this; - } - - public function get() { - return $this; - } -} - -$testPostData1 = new testPostData(); -$testPostData1->comment = 'Test suspension comment'; - -$testPostData2 = new testPostData(); - -$testPostData3 = new testPostData(); -$testPostData3->customField = 'custom value'; -$testPostData3->desc = 'Custom description'; - -$emptyPostData = new testPostData(); - -r($projectzenTest->prepareSuspendExtrasTest(1, $testPostData1)) && p('id,status,lastEditedBy') && e('1,suspended,admin'); -r($projectzenTest->prepareSuspendExtrasTest(999, $testPostData2)) && p('id,status') && e('999,suspended'); -r($projectzenTest->prepareSuspendExtrasTest(2, $emptyPostData)) && p('id,status,suspendedDate') && e('2,suspended,2025-09-16'); -r($projectzenTest->prepareSuspendExtrasTest(3, $testPostData3)) && p('id,status,lastEditedBy') && e('3,suspended,admin'); -r($projectzenTest->prepareSuspendExtrasTest(0, $testPostData1)) && p('id,status') && e('0,suspended'); \ No newline at end of file diff --git a/module/project/test/zen/processbugsearchparams.php b/module/project/test/zen/processbugsearchparams.php deleted file mode 100755 index 123a70a03e..0000000000 --- a/module/project/test/zen/processbugsearchparams.php +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env php - $result2['afterFieldsCount'] @1 -- 执行projectTest模块的processBugSearchParamsTest方法,参数是$projectObj3, 'bymodule', 5, 3, 3, '1', 'status_asc', 1, $products3 属性removedFields @project -- 执行projectTest模块的processBugSearchParamsTest方法,参数是$projectObj4, 'assignedto', 10, 4, 0, '', 'openedDate_desc', 0, $products4 - - 属性removedFields @product -- 执行projectTest模块的processBugSearchParamsTest方法,参数是$projectObj5, 'bysearch', 15, 5, 5, '0', 'id_asc', 2, $products5 属性queryID @15 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/projectzen.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -$project = zenData('project'); -$project->id->range('1-20'); -$project->name->range('项目1,项目2,产品项目1,产品项目2,无产品项目1,无产品项目2,Scrum项目1,Scrum项目2,瀑布项目1,瀑布项目2'); -$project->hasProduct->range('1{10},0{10}'); -$project->model->range('scrum{5},kanban{5},waterfall{5},waterfallplus{5}'); -$project->multiple->range('1{12},0{8}'); -$project->type->range('project'); -$project->status->range('wait{5},doing{10},suspended{3},closed{2}'); -$project->gen(20); - -$product = zenData('product'); -$product->id->range('1-15'); -$product->name->range('产品A1,产品A2,产品B1,产品B2,多分支产品1,多分支产品2,普通产品1,普通产品2,普通产品3,普通产品4,普通产品5'); -$product->type->range('normal{10},branch{3},platform{2}'); -$product->status->range('normal{12},closed{3}'); -$product->shadow->range('0{12},1{3}'); -$product->gen(15); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectzenTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -// 步骤1:测试有产品关联的Scrum项目 - 应该只移除project字段 -$projectObj1 = new stdClass(); -$projectObj1->hasProduct = 1; -$projectObj1->model = 'scrum'; -$projectObj1->multiple = 1; -$products1 = array(1 => 'product1', 2 => 'product2'); -r($projectTest->processBugSearchParamsTest($projectObj1, 'all', 0, 1, 1, '0', 'id_desc', 0, $products1)) && p('removedFields') && e('project'); - -// 步骤2:测试无产品关联的非Scrum项目 - 应该移除product、plan、project字段,剩余字段数量应该更少 -$projectObj2 = new stdClass(); -$projectObj2->hasProduct = 0; -$projectObj2->model = 'waterfall'; -$projectObj2->multiple = 0; -$products2 = array(); -$result2 = $projectTest->processBugSearchParamsTest($projectObj2, 'all', 0, 2, 0, '', 'id_desc', 0, $products2); -r($result2['beforeFieldsCount'] > $result2['afterFieldsCount']) && p() && e('1'); - -// 步骤3:测试多迭代有产品项目 - 应该只移除project字段 -$projectObj3 = new stdClass(); -$projectObj3->hasProduct = 1; -$projectObj3->model = 'kanban'; -$projectObj3->multiple = 1; -$products3 = array(3 => 'product3'); -r($projectTest->processBugSearchParamsTest($projectObj3, 'bymodule', 5, 3, 3, '1', 'status_asc', 1, $products3)) && p('removedFields') && e('project'); - -// 步骤4:测试单迭代无产品项目中Scrum模型 - 应该移除product、plan、project字段 -$projectObj4 = new stdClass(); -$projectObj4->hasProduct = 0; -$projectObj4->model = 'scrum'; -$projectObj4->multiple = 0; -$products4 = array(); -r($projectTest->processBugSearchParamsTest($projectObj4, 'assignedto', 10, 4, 0, '', 'openedDate_desc', 0, $products4)) && p('removedFields') && e('product,plan,project'); - -// 步骤5:测试bysearch类型参数设置queryID -$projectObj5 = new stdClass(); -$projectObj5->hasProduct = 1; -$projectObj5->model = 'scrum'; -$projectObj5->multiple = 1; -$products5 = array(5 => 'product5'); -r($projectTest->processBugSearchParamsTest($projectObj5, 'bysearch', 15, 5, 5, '0', 'id_asc', 2, $products5)) && p('queryID') && e('15'); \ No newline at end of file diff --git a/module/project/test/zen/processbuildserachparams.php b/module/project/test/zen/processbuildserachparams.php deleted file mode 100755 index e5f4a44227..0000000000 --- a/module/project/test/zen/processbuildserachparams.php +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目{1-10}'); -$project->hasProduct->range('1{5},0{5}'); -$project->multiple->range('1{5},0{5}'); -$project->model->range('scrum{3},waterfall{3},kanban{4}'); -$project->gen(5); - -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品{1-5}'); -$product->type->range('normal{2},platform{2},branch{1}'); -$product->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$projectzenTest = new projectzenTest(); - -// 5. 执行测试步骤 - -// 测试步骤1:项目有产品且多执行,产品为普通类型 -$project1 = new stdclass(); -$project1->id = 1; -$project1->hasProduct = true; -$project1->multiple = true; -$project1->model = 'scrum'; - -$product1 = new stdclass(); -$product1->id = 1; -$product1->type = 'normal'; - -$products1 = array(1 => $product1); - -r($projectzenTest->processBuildSearchParamsTest($project1, $product1, $products1, '', 0)) && p('afterFieldsCount,hasProduct,multiple') && e('2,1,1'); - -// 测试步骤2:项目有产品且多执行,产品为分支类型 -$project2 = new stdclass(); -$project2->id = 2; -$project2->hasProduct = true; -$project2->multiple = true; -$project2->model = 'scrum'; - -$product2 = new stdclass(); -$product2->id = 2; -$product2->type = 'platform'; - -$products2 = array(2 => $product2); - -r($projectzenTest->processBuildSearchParamsTest($project2, $product2, $products2, '', 0)) && p('addedFields,productType') && e('branch,platform'); - -// 测试步骤3:项目无产品的情况 -$project3 = new stdclass(); -$project3->id = 3; -$project3->hasProduct = false; -$project3->multiple = true; -$project3->model = 'scrum'; - -$product3 = new stdclass(); -$product3->id = 3; -$product3->type = 'normal'; - -$products3 = array(); - -r($projectzenTest->processBuildSearchParamsTest($project3, $product3, $products3, '', 0)) && p('removedFields') && e('product'); - -// 测试步骤4:项目无迭代的情况 -$project4 = new stdclass(); -$project4->id = 4; -$project4->hasProduct = true; -$project4->multiple = false; -$project4->model = 'scrum'; - -$product4 = new stdclass(); -$product4->id = 4; -$product4->type = 'normal'; - -$products4 = array(4 => $product4); - -r($projectzenTest->processBuildSearchParamsTest($project4, $product4, $products4, '', 0)) && p('afterFieldsCount') && e('2'); - -// 测试步骤5:搜索类型为bysearch的情况 -$project5 = new stdclass(); -$project5->id = 5; -$project5->hasProduct = true; -$project5->multiple = true; -$project5->model = 'scrum'; - -$product5 = new stdclass(); -$product5->id = 5; -$product5->type = 'normal'; - -$products5 = array(5 => $product5); - -r($projectzenTest->processBuildSearchParamsTest($project5, $product5, $products5, 'bysearch', 123)) && p('queryID') && e('123'); \ No newline at end of file diff --git a/module/project/test/zen/processgroupprivs.php b/module/project/test/zen/processgroupprivs.php deleted file mode 100755 index 3497d422a6..0000000000 --- a/module/project/test/zen/processgroupprivs.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10'); -$table->hasProduct->range('1{5},0{5}'); -$table->model->range('scrum{2},waterfall{2},kanban{1},scrum{2},waterfall{2},kanban{1}'); -$table->multiple->range('1{5},0{5}'); -$table->status->range('wait{3},doing{4},closed{3}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->processGroupPrivsTest((object)array('hasProduct' => 1, 'model' => 'scrum', 'multiple' => 1))) && p() && e('1'); // 步骤1:有产品项目权限处理 -r($projectTest->processGroupPrivsTest((object)array('hasProduct' => 0, 'model' => 'scrum', 'multiple' => 1))) && p() && e('1'); // 步骤2:无产品项目权限处理 -r($projectTest->processGroupPrivsTest((object)array('hasProduct' => 1, 'model' => 'waterfall', 'multiple' => 1))) && p() && e('1'); // 步骤3:瀑布模型项目权限处理 -r($projectTest->processGroupPrivsTest((object)array('hasProduct' => 1, 'model' => 'scrum', 'multiple' => 1))) && p() && e('1'); // 步骤4:敏捷模型项目权限处理 -r($projectTest->processGroupPrivsTest((object)array('hasProduct' => 0, 'model' => 'scrum', 'multiple' => 0))) && p() && e('1'); // 步骤5:无迭代无产品项目权限处理 \ No newline at end of file diff --git a/module/project/test/zen/recordexecutionsofunlinkedproducts.php b/module/project/test/zen/recordexecutionsofunlinkedproducts.php deleted file mode 100755 index 3bd96ace92..0000000000 --- a/module/project/test/zen/recordexecutionsofunlinkedproducts.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目{1-10}'); -$project->model->range('scrum,kanban'); -$project->multiple->range('1'); -$project->gen(5); - -$product = zenData('product'); -$product->id->range('1-10'); -$product->name->range('产品{1-10}'); -$product->gen(5); - -$execution = zenData('project'); -$execution->id->range('11-20'); -$execution->name->range('执行{1-10}'); -$execution->type->range('sprint'); -$execution->parent->range('1-5'); -$execution->gen(10); - -$projectProduct = zenData('projectproduct'); -$projectProduct->project->range('11-20'); -$projectProduct->product->range('1-5'); -$projectProduct->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => (object)array('name' => '产品1'), 2 => (object)array('name' => '产品2')), array(3, 4, 5), array(11, 12, 13))) && p() && e('0'); // 步骤1:正常情况 -r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(), array(), array(11, 12))) && p() && e('0'); // 步骤2:空的取消关联产品列表 -r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => (object)array('name' => '产品1')), array(2), array())) && p() && e('0'); // 步骤3:空的执行ID列表 -r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => (object)array('name' => '产品1'), 2 => (object)array('name' => '产品2'), 3 => (object)array('name' => '产品3')), array(4, 5), array(14, 15))) && p() && e('0'); // 步骤4:执行有多个取消关联的产品 -r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => (object)array('name' => '产品1'), 3 => (object)array('name' => '产品3')), array(1, 3), array(16, 17, 18))) && p() && e('0'); // 步骤5:多个执行取消不同产品关联 \ No newline at end of file diff --git a/module/project/test/zen/removeassociatedproducts.php b/module/project/test/zen/removeassociatedproducts.php deleted file mode 100755 index 6d7008162c..0000000000 --- a/module/project/test/zen/removeassociatedproducts.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('项目1,项目2,项目3,项目4,项目5'); -$table->hasProduct->range('1,0,0,0,0'); -$table->deleted->range('0'); -$table->gen(5); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品1,产品2,产品3,产品4,产品5'); -$productTable->shadow->range('0,0,0,1,0'); -$productTable->deleted->range('0'); -$productTable->gen(5); - -$projectProductTable = zenData('projectproduct'); -$projectProductTable->project->range('2-5'); -$projectProductTable->product->range('2-5'); -$projectProductTable->gen(4); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$projectTest = new projectTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($projectTest->removeAssociatedProductsTest((object)array('id' => 1, 'hasProduct' => 1))) && p() && e('has_product_no_delete'); // 步骤1:有产品的项目 -r($projectTest->removeAssociatedProductsTest((object)array('id' => 6, 'hasProduct' => 0))) && p() && e('no_product_found'); // 步骤2:无产品的项目但没有关联产品 -r($projectTest->removeAssociatedProductsTest((object)array('id' => 2, 'hasProduct' => 0))) && p() && e('not_shadow_product'); // 步骤3:无产品的项目且关联的产品不是影子产品 -r($projectTest->removeAssociatedProductsTest((object)array('id' => 4, 'hasProduct' => 0))) && p() && e('shadow_product_deleted'); // 步骤4:无产品的项目且关联的产品是影子产品 -r($projectTest->removeAssociatedProductsTest((object)array('id' => 7, 'hasProduct' => 0))) && p() && e('no_product_found'); // 步骤5:无产品的项目但产品为空 \ No newline at end of file diff --git a/module/project/test/zen/responseafterclose.php b/module/project/test/zen/responseafterclose.php deleted file mode 100755 index 15cb38f166..0000000000 --- a/module/project/test/zen/responseafterclose.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目A,项目B,项目C,项目D,项目E,项目F,项目G,项目H,项目I,项目J'); -$table->status->range('wait,doing,suspended,closed'); -$table->hasProduct->range('1,0'); -$table->gen(10); - -$actionTable = zenData('action'); -$actionTable->id->range('1-20'); -$actionTable->objectType->range('project'); -$actionTable->objectID->range('1-10'); -$actionTable->action->range('opened,edited,started,suspended,closed'); -$actionTable->gen(20); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$projectTest = new projectTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($projectTest->responseAfterCloseTest(1, array('status' => array('doing', 'closed')), '项目已完成所有任务,正式关闭')) && p() && e('1'); // 步骤1:有评论和变更的正常关闭响应 -r($projectTest->responseAfterCloseTest(2, array(), '项目关闭,感谢大家的努力')) && p() && e('1'); // 步骤2:仅有评论的关闭响应 -r($projectTest->responseAfterCloseTest(3, array('status' => array('suspended', 'closed')), '')) && p() && e('1'); // 步骤3:仅有变更的关闭响应 -r($projectTest->responseAfterCloseTest(4, array(), '')) && p() && e('1'); // 步骤4:无评论无变更的关闭响应 -r($projectTest->responseAfterCloseTest(999, array('status' => array('doing', 'closed')), '无效项目的关闭')) && p() && e('1'); // 步骤5:无效项目ID的关闭响应 \ No newline at end of file diff --git a/module/project/test/zen/updatelinkedproducts.php b/module/project/test/zen/updatelinkedproducts.php deleted file mode 100755 index 7cbe82d985..0000000000 --- a/module/project/test/zen/updatelinkedproducts.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10'); -$table->code->range('project1,project2,project3,project4,project5,project6,project7,project8,project9,project10'); -$table->model->range('scrum{3},waterfall{3},waterfallplus{2},kanban{2}'); -$table->multiple->range('1{6},0{4}'); -$table->stageBy->range('product{5},project{5}'); -$table->type->range('project{10}'); -$table->status->range('wait{3},doing{4},suspended{2},closed{1}'); -$table->hasProduct->range('1{8},0{2}'); -$table->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-8'); -$productTable->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8'); -$productTable->code->range('prod1,prod2,prod3,prod4,prod5,prod6,prod7,prod8'); -$productTable->status->range('normal{6},closed{2}'); -$productTable->type->range('normal{8}'); -$productTable->gen(8); - -$projectProductTable = zenData('projectproduct'); -$projectProductTable->project->range('1{3},2{2},3{2},4{1}'); -$projectProductTable->product->range('1,2,3,4,5,6,7,8'); -$projectProductTable->gen(8); - -$executionTable = zenData('project'); -$executionTable->id->range('101-110'); -$executionTable->name->range('执行1,执行2,执行3,执行4,执行5,执行6,执行7,执行8,执行9,执行10'); -$executionTable->type->range('execution{10}'); -$executionTable->parent->range('1{3},2{3},3{2},4{2}'); -$executionTable->multiple->range('1{10}'); -$executionTable->gen(10); - -su('admin'); - -$projectTest = new projectTest(); - -r($projectTest->updateLinkedProductsTest(1, (object)array('id' => 1, 'multiple' => 1, 'model' => 'scrum', 'stageBy' => 'product'), array(101, 102, 103))) && p() && e('1'); -r($projectTest->updateLinkedProductsTest(5, (object)array('id' => 5, 'multiple' => 1, 'model' => 'scrum', 'stageBy' => 'product'), array())) && p() && e('1'); -r($projectTest->updateLinkedProductsTest(9, (object)array('id' => 9, 'multiple' => 0, 'model' => 'scrum', 'stageBy' => 'product'), array(109))) && p() && e('1'); -r($projectTest->updateLinkedProductsTest(4, (object)array('id' => 4, 'multiple' => 1, 'model' => 'waterfall', 'stageBy' => 'project'), array(107, 108))) && p() && e('1'); -r($projectTest->updateLinkedProductsTest(2, (object)array('id' => 2, 'multiple' => 1, 'model' => 'kanban', 'stageBy' => 'product'), array(104, 105, 106))) && p() && e('1'); \ No newline at end of file diff --git a/module/projectrelease/test/zen/buildreleaseforcreate.php b/module/projectrelease/test/zen/buildreleaseforcreate.php deleted file mode 100755 index dbbecfd1a6..0000000000 --- a/module/projectrelease/test/zen/buildreleaseforcreate.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$project->name->range('项目{1-5}'); -$project->type->range('project'); -$project->status->range('wait'); -$project->gen(5); - -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品{1-5}'); -$product->type->range('normal'); -$product->status->range('normal'); -$product->gen(5); - -$build = zenData('build'); -$build->id->range('1-10'); -$build->name->range('版本{1-10}'); -$build->product->range('1-5'); -$build->project->range('1-5'); -$build->gen(10); - -su('admin'); - -$projectreleaseTest = new projectreleaseTest(); - -r($projectreleaseTest->buildReleaseForCreateTest(1, array('name' => 'Test Release', 'status' => 'wait', 'product' => 1))) && p('') && e('object'); -r($projectreleaseTest->buildReleaseForCreateTest(0, array('name' => 'Test Release', 'status' => 'wait'))) && p('') && e('object'); -r($projectreleaseTest->buildReleaseForCreateTest(1, array('name' => 'Test Release', 'status' => 'normal', 'product' => 1))) && p('') && e('object'); -r($projectreleaseTest->buildReleaseForCreateTest(1, array())) && p('') && e('object'); -r($projectreleaseTest->buildReleaseForCreateTest(1, array('name' => 'Test Release', 'status' => 'wait', 'product' => 1, 'build' => array(1)))) && p('') && e('object'); \ No newline at end of file diff --git a/module/projectrelease/test/zen/commonaction.php b/module/projectrelease/test/zen/commonaction.php deleted file mode 100755 index 1ebc6dffe0..0000000000 --- a/module/projectrelease/test/zen/commonaction.php +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env php -gen(5); -su('admin'); - -$project = zenData('project'); -$project->id->range('1-10'); -$project->name->range('项目{1-10}'); -$project->type->range('project{10}'); -$project->status->range('wait{3},doing{5},done{2}'); -$project->gen(10); - -$product = zenData('product'); -$product->id->range('1-10'); -$product->name->range('产品{1-10}'); -$product->type->range('normal{5},branch{5}'); -$product->status->range('normal{8},closed{2}'); -$product->gen(10); - -$projectProduct = zenData('projectproduct'); -$projectProduct->project->range('1{2},2{3},3{2}'); -$projectProduct->product->range('1-7'); -$projectProduct->branch->range('0{5},1-2{2}'); -$projectProduct->gen(7); - -$branch = zenData('branch'); -$branch->id->range('1-5'); -$branch->product->range('6-10'); -$branch->name->range('分支{1-5}'); -$branch->status->range('active{4},closed{1}'); -$branch->gen(5); - -$projectreleaseTest = new projectreleaseTest(); - -r($projectreleaseTest->commonActionTest(1, 1, '')) && p() && e('2,1,0,,1,0'); -r($projectreleaseTest->commonActionTest(2, 0, '')) && p() && e('3,3,0,,2,0'); -r($projectreleaseTest->commonActionTest(3, 6, '1')) && p() && e('2,6,3,1,3,0'); -r($projectreleaseTest->commonActionTest(1, 2, '')) && p() && e('2,2,0,,1,0'); -r($projectreleaseTest->commonActionTest(999, 0, '')) && p() && e('0,0,0,,0,0'); \ No newline at end of file diff --git a/module/release/test/model/deleterelated.php b/module/release/test/model/deleterelated.php deleted file mode 100755 index 014d5581cc..0000000000 --- a/module/release/test/model/deleterelated.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -release->range('1-5{6}'); -$table->objectID->range('1-50'); -$table->objectType->range('story{10}, bug{8}, project{5}, build{4}, branch{3}'); -$table->gen(30); - -su('admin'); - -$releaseTest = new releaseTest(); - -r($releaseTest->deleteRelatedTest(1, 'story', 1)) && p() && e(true); -r($releaseTest->deleteRelatedTest(4, 'build', [])) && p() && e(false); -r($releaseTest->deleteRelatedTest(3, 'project', '5,6,7')) && p() && e(true); -r($releaseTest->deleteRelatedTest(2, 'bug', [2, 3, 4])) && p() && e(false); -r($releaseTest->deleteRelatedTest(5, 'branch', 999)) && p() && e(true); \ No newline at end of file diff --git a/module/release/test/zen/buildbugdataforexport.php b/module/release/test/zen/buildbugdataforexport.php deleted file mode 100755 index 79b9277bb0..0000000000 --- a/module/release/test/zen/buildbugdataforexport.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -解决Bug