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*Bug测试标题1* -- 步骤2:遗留Bug类型导出 @*

遗留Bug

*Bug测试标题6* -- 步骤3:无Bug数据的导出 @

解决Bug

-- 步骤4:空Bug ID列表的导出 @

遗留Bug

-- 步骤5:无效Bug类型导出 @*

解决Bug

*Bug测试标题1* - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/release.unittest.class.php'; - -// 2. 创建模拟数据,避免数据库依赖 -// 创建测试实例(变量名与模块名一致) -$releaseTest = new releaseTest(); - -// 创建模拟的release对象 -$release1 = new stdclass(); -$release1->id = 1; -$release1->bugs = '1,2,3'; -$release1->leftBugs = '6,7'; - -$release2 = new stdclass(); -$release2->id = 2; -$release2->bugs = '4,5'; -$release2->leftBugs = ''; - -$release3 = new stdclass(); -$release3->id = 3; -$release3->bugs = ''; -$release3->leftBugs = '8,9'; - -$release4 = new stdclass(); -$release4->id = 4; -$release4->bugs = ''; -$release4->leftBugs = ''; - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($releaseTest->buildBugDataForExportTest($release1, 'bug')) && p() && e('*

解决Bug

*Bug测试标题1*'); // 步骤1:正常Bug类型导出 -r($releaseTest->buildBugDataForExportTest($release1, 'leftbug')) && p() && e('*

遗留Bug

*Bug测试标题6*'); // 步骤2:遗留Bug类型导出 -r($releaseTest->buildBugDataForExportTest($release3, 'bug')) && p() && e('

解决Bug

'); // 步骤3:无Bug数据的导出 -r($releaseTest->buildBugDataForExportTest($release4, 'leftbug')) && p() && e('

遗留Bug

'); // 步骤4:空Bug ID列表的导出 -r($releaseTest->buildBugDataForExportTest($release1, 'invalid')) && p() && e('*

解决Bug

*Bug测试标题1*'); // 步骤5:无效Bug类型导出 \ No newline at end of file diff --git a/module/release/test/zen/buildlinkbugsearchform.php b/module/release/test/zen/buildlinkbugsearchform.php deleted file mode 100755 index c44ceb3402..0000000000 --- a/module/release/test/zen/buildlinkbugsearchform.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -id = 1; -$normalRelease->product = 1; -$normalRelease->branch = '0'; -$normalRelease->productType = 'normal'; - -$branchRelease = new stdclass(); -$branchRelease->id = 2; -$branchRelease->product = 2; -$branchRelease->branch = '1,2'; -$branchRelease->productType = 'branch'; - -r($releaseTest->buildLinkBugSearchFormTest($normalRelease, 0, 'bug')) && p('hasProductField,hasProjectField,style,queryID') && e('0,0,simple,0'); -r($releaseTest->buildLinkBugSearchFormTest($branchRelease, 1, 'bug')) && p('hasBranchField,queryID,productType') && e('1,1,branch'); -r($releaseTest->buildLinkBugSearchFormTest($normalRelease, 5, 'bug')) && p('actionURL,type') && e('mock_action_url_release_1_type_bug,bug'); -r($releaseTest->buildLinkBugSearchFormTest($branchRelease, 10, 'leftBug')) && p('actionURL,type') && e('mock_action_url_release_2_type_leftBug,leftBug'); -r($releaseTest->buildLinkBugSearchFormTest($normalRelease, -1, 'bug')) && p('queryID,hasProductField,hasProjectField') && e('-1,0,0'); \ No newline at end of file diff --git a/module/release/test/zen/buildsearchform.php b/module/release/test/zen/buildsearchform.php deleted file mode 100755 index 1700ee1e9d..0000000000 --- a/module/release/test/zen/buildsearchform.php +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env php -loadYaml('product', false, 2)->gen(10); -zendata('branch')->loadYaml('branch', false, 2)->gen(5); -zendata('build')->loadYaml('build', false, 2)->gen(20); - -su('admin'); - -$releaseTest = new releaseTest(); - -/* Create test product objects */ -$normalProduct = new stdclass(); -$normalProduct->id = 1; -$normalProduct->type = 'normal'; -$normalProduct->name = 'Normal Product'; - -$branchProduct = new stdclass(); -$branchProduct->id = 2; -$branchProduct->type = 'branch'; -$branchProduct->name = 'Branch Product'; - -$platformProduct = new stdclass(); -$platformProduct->id = 3; -$platformProduct->type = 'platform'; -$platformProduct->name = 'Platform Product'; - -r($releaseTest->buildSearchFormTest(1, '/release-browse-1.html', $normalProduct, '0')) && p('queryID,actionURL,hasBranchValues,productType') && e('1,/release-browse-1.html,0,normal'); -r($releaseTest->buildSearchFormTest(2, '/release-browse-2.html', $branchProduct, 'all')) && p('queryID,actionURL,hasBranchValues,productType') && e('2,/release-browse-2.html,1,branch'); -r($releaseTest->buildSearchFormTest(0, '/release-browse-0.html', $platformProduct, 'trunk')) && p('queryID,actionURL,hasBranchValues,productType') && e('0,/release-browse-0.html,1,platform'); -r($releaseTest->buildSearchFormTest(999, '', $normalProduct, '1')) && p('queryID,actionURL,hasBranchValues,productType') && e('999,~~,0,normal'); -r($releaseTest->buildSearchFormTest(5, '/release-browse-5.html', $branchProduct, '')) && p('queryID,actionURL,hasBranchValues,productType') && e('5,/release-browse-5.html,1,branch'); \ No newline at end of file diff --git a/module/release/test/zen/getexcludestoryidlist.php b/module/release/test/zen/getexcludestoryidlist.php deleted file mode 100755 index 1c8ea8a740..0000000000 --- a/module/release/test/zen/getexcludestoryidlist.php +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->product->range('1{5},2{5}'); -$table->type->range('story{10}'); -$table->isParent->range('0{6},1{4}'); -$table->status->range('active{4},draft{2},reviewing{2},changing{1},closed{1}'); -$table->title->range('需求标题1,需求标题2,需求标题3,需求标题4,需求标题5,需求标题6,需求标题7,需求标题8,需求标题9,需求标题10'); -$table->openedBy->range('admin{10}'); -$table->openedDate->range('`2023-01-01 00:00:00`'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$releaseTest = new releaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$release1 = new stdclass(); -$release1->product = 1; -$release1->stories = '1,2,3'; -r($releaseTest->getExcludeStoryIdListTest($release1)) && p('1,2,3') && e('1,2,3'); // 步骤1:正常情况 - -$release2 = new stdclass(); -$release2->product = 1; -$release2->stories = ''; -r($releaseTest->getExcludeStoryIdListTest($release2)) && p() && e('0'); // 步骤2:空需求列表 - -$release3 = new stdclass(); -$release3->product = 1; -$release3->stories = '99,100'; -r($releaseTest->getExcludeStoryIdListTest($release3)) && p('99,100') && e('99,100'); // 步骤3:不存在的需求ID - -$release4 = new stdclass(); -$release4->product = 2; -$release4->stories = '6,7,8'; -r($releaseTest->getExcludeStoryIdListTest($release4)) && p('10,6,7,8') && e('10,6,7,8'); // 步骤4:不同产品的需求 - -$release5 = new stdclass(); -$release5->product = 3; -$release5->stories = '1,2'; -r($releaseTest->getExcludeStoryIdListTest($release5)) && p('1,2') && e('1,2'); // 步骤5:产品下无父需求 \ No newline at end of file diff --git a/module/release/test/zen/getsearchquery.php b/module/release/test/zen/getsearchquery.php deleted file mode 100755 index 7c510aa003..0000000000 --- a/module/release/test/zen/getsearchquery.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -loadYaml('userquery_getsearchquery', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$releaseTest = new releaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($releaseTest->getSearchQueryTest(1, true)) && p() && e("(( 1 AND t1.`name` LIKE '%aa%' ) AND ( 1 )) AND deleted = '0'"); // 步骤1:有效查询ID,返回存储的SQL查询 -r($releaseTest->getSearchQueryTest(999, true)) && p() && e(' 1 = 1'); // 步骤2:无效查询ID,返回默认条件 -r($releaseTest->getSearchQueryTest(0, true)) && p() && e(' 1 = 1'); // 步骤3:查询ID为0,返回默认条件 -r($releaseTest->getSearchQueryTest(2, true)) && p() && e("(( 1 AND t1.`name` LIKE '%aa%' ) AND ( 1 )) AND deleted = '0'"); // 步骤4:另一个有效查询ID -r($releaseTest->getSearchQueryTest(3, true)) && p() && e("(( 1 AND t1.`name` LIKE '%aa%' ) AND ( 1 )) AND deleted = '0'"); // 步骤5:第三个有效查询ID \ No newline at end of file diff --git a/module/repo/test/zen/buildcreaterepoform.php b/module/repo/test/zen/buildcreaterepoform.php deleted file mode 100755 index 1a885bb107..0000000000 --- a/module/repo/test/zen/buildcreaterepoform.php +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env php -id->range('1-100'); -$table->name->range('项目{1-100}'); -$table->status->range('wait{30},doing{40},done{30}'); -$table->type->range('project{80},sprint{20}'); -$table->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-50'); -$productTable->name->range('产品{1-50}'); -$productTable->status->range('normal{40},closed{10}'); -$productTable->gen(5); - -$groupTable = zenData('group'); -$groupTable->id->range('1-10'); -$groupTable->name->range('开发组{1-5},测试组{6-10}'); -$groupTable->gen(3); - -zenData('user'); // 使用默认用户数据,避免重复账号问题 - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$repoTest = new repoZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($repoTest->buildCreateRepoFormTest(1)) && p('objectID') && e('1'); // 步骤1:正常项目ID -r($repoTest->buildCreateRepoFormTest(0)) && p('objectID') && e('0'); // 步骤2:零值项目ID -r($repoTest->buildCreateRepoFormTest(999)) && p('objectID') && e('999'); // 步骤3:大数值项目ID -r($repoTest->buildCreateRepoFormTest(5)) && p('objectID') && e('5'); // 步骤4:其他项目ID -r($repoTest->buildCreateRepoFormTest(100)) && p('objectID') && e('100'); // 步骤5:另一个项目ID \ No newline at end of file diff --git a/module/repo/test/zen/buildeditform.php b/module/repo/test/zen/buildeditform.php deleted file mode 100755 index 19d452417e..0000000000 --- a/module/repo/test/zen/buildeditform.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -loadYaml('repo_buildeditform', false, 2)->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$repoZenTest = new repoZenTest(); - -// 5. 测试步骤 -r($repoZenTest->buildEditFormTest(1, 1)) && p('repo:name') && e('723test'); // 步骤1:正常情况 -r($repoZenTest->buildEditFormTest(999, 1)) && p() && e(0); // 步骤2:不存在版本库 -r($repoZenTest->buildEditFormTest(1, 1)) && p('repo:SCM') && e('Gitlab'); // 步骤3:Git类型版本库 -r($repoZenTest->buildEditFormTest(1, 1)) && p('repo:id') && e(1); // 步骤4:版本库ID验证 -r($repoZenTest->buildEditFormTest(1, 1)) && p('objectID') && e(1); // 步骤5:对象ID验证 \ No newline at end of file diff --git a/module/repo/test/zen/buildrepotree.php b/module/repo/test/zen/buildrepotree.php deleted file mode 100755 index 4c607a4949..0000000000 --- a/module/repo/test/zen/buildrepotree.php +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env php -> project -步骤2:边界值 >> single -步骤3:异常输入 >> a-first -步骤4:权限验证 >> 1 -步骤5:业务规则 >> 3 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php'; - -// 2. 用户登录(选择合适角色) -su('admin'); - -// 3. 创建测试实例(变量名与模块名一致) -$repoTest = new repoZenTest(); - -// 4. 🔴 强制要求:必须包含至少5个测试步骤 -r($repoTest->buildRepoTreeTest(array( - 'project/repo1' => array('value' => 1, 'parent' => 'project', 'path' => 'project/repo1', 'text' => 'repo1'), - 'project' => array('value' => 2, 'parent' => '0', 'path' => 'project', 'text' => 'project'), - 'project/repo2' => array('value' => 3, 'parent' => 'project', 'path' => 'project/repo2', 'text' => 'repo2') -), '0')) && p('0:text') && e('project'); // 步骤1:正常情况 - -r($repoTest->buildRepoTreeTest(array( - 'single' => array('value' => 1, 'parent' => '0', 'path' => 'single', 'text' => 'single') -), '0')) && p('0:text') && e('single'); // 步骤2:边界值 - -r($repoTest->buildRepoTreeTest(array( - 'z-last' => array('value' => 1, 'parent' => '0', 'path' => 'z-last', 'text' => 'z-last'), - 'a-first' => array('value' => 2, 'parent' => '0', 'path' => 'a-first', 'text' => 'a-first'), - 'm-middle' => array('value' => 3, 'parent' => '0', 'path' => 'm-middle', 'text' => 'm-middle') -), '0')) && p('0:text') && e('a-first'); // 步骤3:异常输入 - -r($repoTest->buildRepoTreeTest(array( - 'project/repo1' => array('value' => 1, 'parent' => 'project', 'path' => 'project/repo1', 'text' => 'repo1'), - 'project' => array('value' => 2, 'parent' => '0', 'path' => 'project', 'text' => 'project') -), '0')) && p('0:disabled') && e('1'); // 步骤4:权限验证 - -r($repoTest->buildRepoTreeTest(array( - 'a' => array('value' => 1, 'parent' => '0', 'path' => 'a', 'text' => 'a'), - 'b' => array('value' => 2, 'parent' => '0', 'path' => 'b', 'text' => 'b'), - 'c' => array('value' => 3, 'parent' => '0', 'path' => 'c', 'text' => 'c') -), '0')) && p('count') && e('3'); // 步骤5:业务规则 \ No newline at end of file diff --git a/module/repo/test/zen/checkacl.php b/module/repo/test/zen/checkacl.php deleted file mode 100755 index 417a89c451..0000000000 --- a/module/repo/test/zen/checkacl.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -checkACLTest('open', array(), array())) && p('acl') && e('open'); // 步骤1:正常开放模式 -r($repoTest->checkACLTest('custom', array('1'), array('admin'))) && p('acl') && e('custom'); // 步骤2:自定义模式且都有值 -r($repoTest->checkACLTest('custom', array(), array())) && p() && e('0'); // 步骤3:自定义模式都为空 -r($repoTest->checkACLTest('custom', array('1'), array())) && p('acl') && e('custom'); // 步骤4:自定义模式只有groups -r($repoTest->checkACLTest('custom', array(), array('admin'))) && p('acl') && e('custom'); // 步骤5:自定义模式只有users \ No newline at end of file diff --git a/module/repo/test/zen/checkclient.php b/module/repo/test/zen/checkclient.php deleted file mode 100755 index 7a2a7ed475..0000000000 --- a/module/repo/test/zen/checkclient.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -checkClientZenTest(array('SCM' => 'Git', 'client' => ''), array('inContainer' => false, 'checkClient' => true))) && p() && e('0'); -r($repoTest->checkClientZenTest(array('SCM' => 'Subversion', 'client' => 'svn'), array('inContainer' => true))) && p() && e('1'); -r($repoTest->checkClientZenTest(array('SCM' => 'Git', 'client' => ''), array('checkClient' => false))) && p() && e('1'); -r($repoTest->checkClientZenTest(array('SCM' => 'Gitlab', 'client' => ''), array('notSyncSCM' => array('Gitlab')))) && p() && e('1'); -r($repoTest->checkClientZenTest(array('SCM' => 'Git', 'client' => 'git'), array('hasVersionFile' => true))) && p() && e('1'); \ No newline at end of file diff --git a/module/repo/test/zen/checksyncresult.php b/module/repo/test/zen/checksyncresult.php deleted file mode 100755 index 8d6a05fff4..0000000000 --- a/module/repo/test/zen/checksyncresult.php +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('repo1,repo2,repo3'); -$table->SCM->range('Git{3},Gitlab{3},Subversion{3}'); -$table->synced->range('0{8},1{2}'); -$table->commits->range('10-100:10'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$repoTest = new repoZenTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 - -// 准备测试数据 -$gitRepo = new stdClass(); -$gitRepo->id = 1; -$gitRepo->SCM = 'Git'; -$gitRepo->synced = 0; - -$gitlabRepo = new stdClass(); -$gitlabRepo->id = 2; -$gitlabRepo->SCM = 'Gitlab'; -$gitlabRepo->synced = 0; - -$syncedRepo = new stdClass(); -$syncedRepo->id = 3; -$syncedRepo->SCM = 'Git'; -$syncedRepo->synced = 1; - -$branchesWithData = array('develop', 'feature'); -$branchesEmpty = array(); - -// 步骤1:正常情况,有提交计数,返回批处理模式下的提交计数 -r($repoTest->checkSyncResultTest($gitRepo, $branchesEmpty, 'master', 5, 'batch')) && p() && e('5'); - -// 步骤2:正常情况,有提交计数,返回完成标志 -r($repoTest->checkSyncResultTest($gitRepo, $branchesEmpty, 'master', 5, 'normal')) && p() && e('finish'); - -// 步骤3:同步情况,无提交计数且版本库已同步,返回批处理模式下的提交计数 -r($repoTest->checkSyncResultTest($syncedRepo, $branchesEmpty, 'master', 0, 'batch')) && p() && e('0'); - -// 步骤4:Git类型版本库,无提交计数且未同步,有分支时处理下一个分支 -r($repoTest->checkSyncResultTest($gitRepo, $branchesWithData, 'master', 0, 'normal')) && p() && e('finish'); - -// 步骤5:Git类型版本库,无提交计数且未同步,无分支时标记同步完成 -r($repoTest->checkSyncResultTest($gitRepo, $branchesEmpty, 'master', 0, 'normal')) && p() && e('finish'); - -// 步骤6:Gitlab类型版本库,无提交计数且未同步,直接标记同步完成 -r($repoTest->checkSyncResultTest($gitlabRepo, $branchesEmpty, 'master', 0, 'normal')) && p() && e('finish'); - -// 步骤7:无效参数测试,空的repo对象 -r($repoTest->checkSyncResultTest(null, $branchesEmpty, 'master', 0, 'normal')) && p() && e('0'); \ No newline at end of file diff --git a/module/repo/test/zen/encodingdiff.php b/module/repo/test/zen/encodingdiff.php deleted file mode 100755 index 1e939e5f30..0000000000 --- a/module/repo/test/zen/encodingdiff.php +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env php -fileName = 'test.php'; -$normalDiff->contents = array(); - -$content1 = new stdClass(); -$content1->lines = array(); - -$line1 = new stdClass(); -$line1->line = 'echo "Hello World";'; -$content1->lines[] = $line1; - -$line2 = new stdClass(); -$line2->line = 'function test() { return true; }'; -$content1->lines[] = $line2; - -$normalDiff->contents[] = $content1; - -$chineseDiff = new stdClass(); -$chineseDiff->fileName = '测试文件.php'; -$chineseDiff->contents = array(); - -$content2 = new stdClass(); -$content2->lines = array(); - -$line3 = new stdClass(); -$line3->line = '// 这是一个测试文件'; -$content2->lines[] = $line3; - -$chineseDiff->contents[] = $content2; - -$emptyContentDiff = new stdClass(); -$emptyContentDiff->fileName = 'empty.php'; -$emptyContentDiff->contents = array(); - -$noContentDiff = new stdClass(); -$noContentDiff->fileName = 'nocontent.php'; - -// 步骤1:正常情况 -r($repoTest->encodingDiffTest(array($normalDiff), 'UTF-8')) && p('0:fileName') && e('test.php'); // 步骤1:正常的diff数据和UTF-8编码 - -// 步骤2:中文文件名编码转换 -r($repoTest->encodingDiffTest(array($chineseDiff), 'GBK')) && p('0:fileName') && e('测试文件.php'); // 步骤2:包含中文文件名的diff数据和GBK编码 - -// 步骤3:空diff数组 -r($repoTest->encodingDiffTest(array(), 'UTF-8')) && p() && e('0'); // 步骤3:空的diff数组和任意编码 - -// 步骤4:没有contents属性的diff对象 -r($repoTest->encodingDiffTest(array($noContentDiff), 'UTF-8')) && p('0:fileName') && e('nocontent.php'); // 步骤4:diff对象没有contents属性时的处理 - -// 步骤5:contents为空数组的情况 -r($repoTest->encodingDiffTest(array($emptyContentDiff), 'UTF-8')) && p('0:fileName') && e('empty.php'); // 步骤5:contents为空数组时的处理 \ No newline at end of file diff --git a/module/repo/test/zen/getbranchandtagitems.php b/module/repo/test/zen/getbranchandtagitems.php deleted file mode 100755 index 9a55719b43..0000000000 --- a/module/repo/test/zen/getbranchandtagitems.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -getBranchAndTagItemsTest((object)array('id' => 1, 'SCM' => 'Git'), 'master')) && p('selected') && e('master'); -r($repoZenTest->getBranchAndTagItemsTest((object)array('id' => 1, 'SCM' => 'Git'), 'develop')) && p('selected') && e('develop'); -r($repoZenTest->getBranchAndTagItemsTest((object)array('id' => 1, 'SCM' => 'Git'), 'v1.0')) && p('selected') && e('v1.0'); -r($repoZenTest->getBranchAndTagItemsTest((object)array('id' => 1, 'SCM' => 'Subversion'), 'trunk')) && p('count(*)') && e('0'); -r($repoZenTest->getBranchAndTagItemsTest((object)array('id' => 1, 'SCM' => 'Git'), '')) && p('selected') && e('~~'); \ No newline at end of file diff --git a/module/repo/test/zen/getcommits.php b/module/repo/test/zen/getcommits.php deleted file mode 100755 index bd21446990..0000000000 --- a/module/repo/test/zen/getcommits.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('test-repo{5}'); -$table->path->range('/var/repos/test{5}'); -$table->SCM->range('Git{3},Subversion{2}'); -$table->encoding->range('UTF-8{5}'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$repoTest = new repoZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($repoTest->getCommitsTest((object)array('id' => 1, 'SCM' => 'Git'), '/src', 'master', 'branch', null, 1))) && p() && e('3'); // 步骤1:正常情况返回3条记录 -r(count($repoTest->getCommitsTest((object)array('id' => 2, 'SCM' => 'Git'), '', 'develop', 'branch', null, 2))) && p() && e('3'); // 步骤2:空路径返回3条记录 -r($repoTest->getCommitsTest(null, '/src', 'master', 'branch', null, 1)) && p() && e('0'); // 步骤3:无效repo对象返回false -r(count($repoTest->getCommitsTest((object)array('id' => 3, 'SCM' => 'Git'), '/lib', 'abcdef1234567890', 'commit', null, 3))) && p() && e('3'); // 步骤4:Git版本库返回3条记录 -r(count($repoTest->getCommitsTest((object)array('id' => 4, 'SCM' => 'Subversion'), '/trunk', '12345', 'commit', null, 4))) && p() && e('3'); // 步骤5:Subversion版本库返回3条记录 \ No newline at end of file diff --git a/module/repo/test/zen/getfilesinfo.php b/module/repo/test/zen/getfilesinfo.php deleted file mode 100755 index 4e7a25ec4e..0000000000 --- a/module/repo/test/zen/getfilesinfo.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -getFilesInfoTest($repoZenTest->objectModel->getByID(1), '/test/path', 'master', 'bWFzdGVy', 1) @0 -- 执行$repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(2), '/test/path', 'main', 'bWFpbg==', 1) @0 -- 执行$repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(3), '/test/path', 'trunk', 'dHJ1bms=', 1) @0 -- 执行$repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(1), '', 'master', 'bWFzdGVy', 1) @0 -- 执行repoZenTest模块的getFilesInfoTest方法,参数是null, '/test/path', 'master', 'bWFzdGVy', 1 @0 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php'; - -$table = zenData('repo'); -$table->id->range('1-5'); -$table->product->range('1,2,3,1,2'); -$table->SCM->range('Git,Gitlab,Subversion,Git,Subversion'); -$table->serviceHost->range('0,1,0,0,0'); -$table->serviceProject->range('0,1,0,0,0'); -$table->name->range('repo1,repo2,repo3,repo4,repo5'); -$table->path->range('/test/git,/test/gitlab,/test/svn,/test/git2,/test/svn2'); -$table->prefix->range(',,/test,,/test2'); -$table->encoding->range('utf-8'); -$table->client->range('git,git,svn,git,svn'); -$table->account->range('admin'); -$table->password->range('123456'); -$table->encrypt->range('plain'); -$table->acl->range('{"acl":"open"}'); -$table->synced->range('1'); -$table->commits->range('10,20,30,15,25'); -$table->lastSync->range('`2024-01-01 10:00:00`'); -$table->desc->range('测试仓库1,测试仓库2,测试仓库3,测试仓库4,测试仓库5'); -$table->deleted->range('0'); -$table->gen(5); - -su('admin'); - -$repoZenTest = new repoZenTest(); - -r($repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(1), '/test/path', 'master', 'bWFzdGVy', 1)) && p() && e('0'); -r($repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(2), '/test/path', 'main', 'bWFpbg==', 1)) && p() && e('0'); -r($repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(3), '/test/path', 'trunk', 'dHJ1bms=', 1)) && p() && e('0'); -r($repoZenTest->getFilesInfoTest($repoZenTest->objectModel->getByID(1), '', 'master', 'bWFzdGVy', 1)) && p() && e('0'); -r($repoZenTest->getFilesInfoTest(null, '/test/path', 'master', 'bWFzdGVy', 1)) && p() && e('0'); \ No newline at end of file diff --git a/module/repo/test/zen/getlinkbranches.php b/module/repo/test/zen/getlinkbranches.php deleted file mode 100755 index c7b48fe84f..0000000000 --- a/module/repo/test/zen/getlinkbranches.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品A,产品B,产品C,产品D,产品E'); -$product->type->range('normal,branch,platform,normal,branch'); -$product->gen(5); - -$branch = zenData('branch'); -$branch->id->range('1-6'); -$branch->product->range('2{2},3{2},5{2}'); -$branch->name->range('分支1,分支2,分支1,分支2,分支1,分支2'); -$branch->status->range('active'); -$branch->deleted->range('0'); -$branch->gen(6); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$repoTest = new repoZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($repoTest->getLinkBranchesTest(array())) && p() && e('0'); // 步骤1:空数组 -r($repoTest->getLinkBranchesTest(array((object)array('id' => 1, 'name' => '产品A', 'type' => 'normal')))) && p() && e('0'); // 步骤2:只有normal类型 -r($repoTest->getLinkBranchesTest(array((object)array('id' => 2, 'name' => '产品B', 'type' => 'branch')))) && p('1,2') && e('产品B / 分支1,产品B / 分支2'); // 步骤3:有branch类型产品 -r($repoTest->getLinkBranchesTest(array((object)array('id' => 1, 'name' => '产品A', 'type' => 'normal'), (object)array('id' => 3, 'name' => '产品C', 'type' => 'platform')))) && p('3,4') && e('产品C / 分支1,产品C / 分支2'); // 步骤4:混合类型 -r($repoTest->getLinkBranchesTest(array((object)array('id' => 2, 'name' => '产品B', 'type' => 'branch'), (object)array('id' => 5, 'name' => '产品E', 'type' => 'branch')))) && p('1,2,5,6') && e('产品B / 分支1,产品B / 分支2,产品E / 分支1,产品E / 分支2'); // 步骤5:多个非normal类型 \ No newline at end of file diff --git a/module/repo/test/zen/getlinkexecutions.php b/module/repo/test/zen/getlinkexecutions.php deleted file mode 100755 index c2568a2139..0000000000 --- a/module/repo/test/zen/getlinkexecutions.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_getlinkexecutions', false, 2)->gen(10); -zenData('project')->loadYaml('project_getlinkexecutions', false, 2)->gen(20); -zenData('projectproduct')->loadYaml('projectproduct_getlinkexecutions', false, 2)->gen(30); - -su('admin'); - -$repoZenTest = new repoZenTest(); - -r($repoZenTest->getLinkExecutionsTest(array())) && p() && e('0'); -r($repoZenTest->getLinkExecutionsTest(array((object)array('id' => 1, 'name' => 'Product1', 'type' => 'normal')))) && p() && e('0'); -r($repoZenTest->getLinkExecutionsTest(array((object)array('id' => 1, 'name' => 'Product1'), (object)array('id' => 2, 'name' => 'Product2')))) && p() && e('0'); -r($repoZenTest->getLinkExecutionsTest(array((object)array('id' => 1, 'name' => 'Product1'), 'invalid', (object)array('id' => 2, 'name' => 'Product2')))) && p() && e('0'); -r($repoZenTest->getLinkExecutionsTest(array((object)array('id' => 999, 'name' => 'NonExistProduct')))) && p() && e('0'); \ No newline at end of file diff --git a/module/repo/test/zen/getlinkmodules.php b/module/repo/test/zen/getlinkmodules.php deleted file mode 100755 index 46d3e44e8c..0000000000 --- a/module/repo/test/zen/getlinkmodules.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -loadYaml('module_getlinkmodules', false, 2)->gen(20); - -zendata('product')->gen(5); - -su('admin'); - -$repoZenTest = new repoZenTest(); - -$product1 = new stdclass(); -$product1->id = 1; -$product1->name = '产品一'; - -$product2 = new stdclass(); -$product2->id = 2; -$product2->name = '产品二'; - -$product3 = new stdclass(); -$product3->id = 3; -$product3->name = '产品三'; - -$validProducts = array(1 => $product1, 2 => $product2, 3 => $product3); -$emptyProducts = array(); -$invalidProducts = array('invalid' => 'data'); - -r(count($repoZenTest->getLinkModulesTest($validProducts, 'story'))) && p() && e('7'); -r(count($repoZenTest->getLinkModulesTest($validProducts, 'task'))) && p() && e('7'); -r(count($repoZenTest->getLinkModulesTest($validProducts, 'bug'))) && p() && e('13'); -r(count($repoZenTest->getLinkModulesTest($emptyProducts, 'story'))) && p() && e('0'); -r(count($repoZenTest->getLinkModulesTest($validProducts, ''))) && p() && e('7'); \ No newline at end of file diff --git a/module/repo/test/zen/getsearchformquery.php b/module/repo/test/zen/getsearchformquery.php deleted file mode 100755 index f3369cbfe8..0000000000 --- a/module/repo/test/zen/getsearchformquery.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -getSearchFormQueryTest()) && p('begin') && e('2023-01-01'); // 步骤1:无session数据时的默认查询结果 -r($repoTest->getSearchFormQueryTestDateBegin()) && p('begin') && e('2023-12-31'); // 步骤2:测试日期范围查询(大于等于操作符) -r($repoTest->getSearchFormQueryTestDateEnd()) && p('end') && e('admin'); // 步骤3:测试日期范围查询(小于等于操作符) -r($repoTest->getSearchFormQueryTestCommitter()) && p('committer') && e('abc123'); // 步骤4:测试提交者搜索条件 -r($repoTest->getSearchFormQueryTestCommit()) && p('commit') && e(''); // 步骤5:测试提交ID搜索条件 \ No newline at end of file diff --git a/module/repo/test/zen/getsyncbranches.php b/module/repo/test/zen/getsyncbranches.php deleted file mode 100755 index 20e6ec4e1c..0000000000 --- a/module/repo/test/zen/getsyncbranches.php +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env php -gen(10); - -su('admin'); - -$repoZenTest = new repoZenTest(); - -// 测试步骤1:Git仓库正常获取同步分支情况 -$gitRepo = new stdClass(); -$gitRepo->SCM = 'Git'; -$gitRepo->id = 1; -$gitRepo->name = 'test-repo'; -$branchID = ''; -r(count($repoZenTest->getSyncBranchesTest($gitRepo, $branchID))) && p() && e('6'); - -// 测试步骤2:空仓库获取同步分支情况 -$emptyRepo = new stdClass(); -$emptyRepo->SCM = 'Git'; -$emptyRepo->id = 2; -$emptyRepo->name = 'empty-repo'; -$emptyRepo->isEmpty = true; -$branchID2 = ''; -r(count($repoZenTest->getSyncBranchesTest($emptyRepo, $branchID2))) && p() && e('0'); - -// 测试步骤3:非Git类型仓库获取同步分支情况 -$svnRepo = new stdClass(); -$svnRepo->SCM = 'Subversion'; -$svnRepo->id = 3; -$svnRepo->name = 'svn-repo'; -$branchID3 = ''; -r(count($repoZenTest->getSyncBranchesTest($svnRepo, $branchID3))) && p() && e('0'); - -// 测试步骤4:无效参数获取同步分支情况 -$branchID4 = ''; -r(count($repoZenTest->getSyncBranchesTest(null, $branchID4))) && p() && e('0'); - -// 测试步骤5:带有cookie的分支ID获取同步分支情况 -$_COOKIE['syncBranch'] = 'develop'; -$gitlabRepo = new stdClass(); -$gitlabRepo->SCM = 'Gitlab'; -$gitlabRepo->id = 4; -$gitlabRepo->name = 'gitlab-repo'; -$branchID5 = ''; -r(count($repoZenTest->getSyncBranchesTest($gitlabRepo, $branchID5))) && p() && e('5'); \ No newline at end of file diff --git a/module/repo/test/zen/getviewtree.php b/module/repo/test/zen/getviewtree.php deleted file mode 100755 index 122a29a718..0000000000 --- a/module/repo/test/zen/getviewtree.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$table->name->range('test-repo,git-repo,svn-repo'); -$table->SCM->range('Gitlab,Git,Subversion'); -$table->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$repoZenTest = new repoZenTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r(count($repoZenTest->getViewTreeTest((object)array('id' => 1, 'SCM' => 'Gitlab'), '', 'main'))) && p() && e('2'); // 步骤1:Gitlab版本库 -r(count($repoZenTest->getViewTreeTest((object)array('id' => 2, 'SCM' => 'Git'), '', 'HEAD'))) && p() && e('2'); // 步骤2:Git版本库 -r(count($repoZenTest->getViewTreeTest((object)array('id' => 3, 'SCM' => 'Subversion'), '/', '1'))) && p() && e('2'); // 步骤3:SVN版本库 -r(count($repoZenTest->getViewTreeTest((object)array('id' => 2, 'SCM' => 'Git'), '', 'HEAD'))) && p() && e('2'); // 步骤4:空entry参数 -r(count($repoZenTest->getViewTreeTest((object)array('id' => 999, 'SCM' => 'Unknown'), '', ''))) && p() && e('0'); // 步骤5:未知SCM类型 \ No newline at end of file diff --git a/module/repo/test/zen/preparecreate.php b/module/repo/test/zen/preparecreate.php deleted file mode 100755 index e8cbb08163..0000000000 --- a/module/repo/test/zen/preparecreate.php +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->SCM->range('Git,Gitlab,Subversion'); -$table->name->range('testrepo{5}'); -$table->path->range('/tmp/test{5}'); -$table->encoding->range('UTF-8{10}'); -$table->client->range('git,svn'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$repoTest = new repoTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($repoTest->prepareCreateTest(array('SCM' => 'Git', 'name' => 'testgit', 'path' => '/tmp/git', 'client' => 'git', 'account' => '', 'password' => '', 'encoding' => 'UTF-8', 'product' => array('1','2'), 'projects' => array('1')), false)) && p('SCM,name,path') && e('Git,testgit,/tmp/git'); // 步骤1:正常Git仓库创建 -r($repoTest->prepareCreateTest(array('SCM' => 'Gitlab', 'name' => 'testgitlab', 'serviceProject' => '123', 'encoding' => 'UTF-8', 'path' => '', 'client' => '', 'product' => array(), 'projects' => array()), false)) && p('SCM,extra') && e('Gitlab,123'); // 步骤2:Gitlab仓库创建 -r($repoTest->prepareCreateTest(array('SCM' => 'Subversion', 'name' => 'testsvn', 'path' => '/tmp/svn', 'client' => 'svn', 'account' => 'admin', 'password' => 'pass', 'encoding' => 'UTF-8', 'product' => array(), 'projects' => array()), false)) && p('SCM,name') && e('Subversion,testsvn'); // 步骤3:Subversion仓库创建 -r($repoTest->prepareCreateTest(array('SCM' => 'Git', 'name' => 'testinvalid', 'path' => '', 'client' => '', 'encoding' => 'UTF-8', 'product' => array(), 'projects' => array()), false)) && p() && e('0'); // 步骤4:无效输入测试 -r($repoTest->prepareCreateTest(array('SCM' => 'Gitlab', 'name' => 'pipeline', 'serviceProject' => '456', 'serviceToken' => 'token123', 'encoding' => 'UTF-8', 'product' => array(), 'projects' => array()), true)) && p('SCM,password') && e('Gitlab,token123'); // 步骤5:管道服务器模式 \ No newline at end of file diff --git a/module/repo/test/zen/preparecreaterepo.php b/module/repo/test/zen/preparecreaterepo.php deleted file mode 100755 index 1466cf5ab6..0000000000 --- a/module/repo/test/zen/preparecreaterepo.php +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env php -loadYaml('repo_preparecreaterepo', false, 2)->gen(5); -zendata('pipeline')->loadYaml('pipeline_preparecreaterepo', false, 2)->gen(3); - -su('admin'); - -$repoTest = new repoTest(); - -$validRepo = new stdclass(); -$validRepo->serviceHost = '1'; -$validRepo->namespace = 'test-group'; -$validRepo->name = 'test-repo'; - -$noServiceHostRepo = new stdclass(); -$noServiceHostRepo->namespace = 'test-group'; -$noServiceHostRepo->name = 'test-repo'; - -$noNamespaceRepo = new stdclass(); -$noNamespaceRepo->serviceHost = '1'; -$noNamespaceRepo->name = 'test-repo'; - -$noNameRepo = new stdclass(); -$noNameRepo->serviceHost = '1'; -$noNameRepo->namespace = 'test-group'; - -$invalidACLRepo = new stdclass(); -$invalidACLRepo->serviceHost = '1'; -$invalidACLRepo->namespace = 'test-group'; -$invalidACLRepo->name = 'test-repo'; - -r($repoTest->prepareCreateRepoTest($validRepo)) && p('name') && e('test-repo'); // 步骤1:正常情况测试 -r($repoTest->prepareCreateRepoTest($validRepo)) && p('path') && e('https://gitlabdev.qc.oop.cc/test-group/test-repo'); // 步骤2:验证路径设置 -r($repoTest->prepareCreateRepoTest($noServiceHostRepo)) && p() && e('0'); // 步骤3:服务主机为空 -r($repoTest->prepareCreateRepoTest($noNamespaceRepo)) && p() && e('0'); // 步骤4:命名空间为空 -r($repoTest->prepareCreateRepoTest($noNameRepo)) && p() && e('0'); // 步骤5:版本库名称为空 \ No newline at end of file diff --git a/module/repo/test/zen/prepareedit.php b/module/repo/test/zen/prepareedit.php deleted file mode 100755 index 196becf2e3..0000000000 --- a/module/repo/test/zen/prepareedit.php +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env php -loadYaml('repo_prepareedit', false, 2)->gen(10); - -su('admin'); - -$repoTest = new repoTest(); - -// 测试步骤1:正常编辑Git版本库 -$formData1 = array( - 'name' => 'test-repo-edited', - 'path' => '/home/git/new-path', - 'SCM' => 'Git', - 'client' => 'git', - 'account' => 'admin', - 'password' => 'newpwd', - 'product' => array('1', '2'), - 'projects' => array('1'), - 'desc' => 'edited description' -); -$oldRepo1 = (object)array( - 'id' => 1, - 'client' => 'git', - 'path' => '/home/git/old-path', - 'SCM' => 'Git' -); -r($repoTest->prepareEditTest($formData1, $oldRepo1, false)) && p('path,synced') && e('/home/git/new-path,0'); - -// 测试步骤2:编辑Gitlab版本库设置额外属性 -$formData2 = array( - 'name' => 'gitlab-repo', - 'path' => '/gitlab/path', - 'SCM' => 'Gitlab', - 'client' => 'git', - 'serviceProject' => 'project123', - 'product' => array('1'), - 'projects' => array('2') -); -$oldRepo2 = (object)array( - 'id' => 2, - 'client' => 'git', - 'path' => '/gitlab/path', - 'SCM' => 'Gitlab' -); -r($repoTest->prepareEditTest($formData2, $oldRepo2, false)) && p('extra') && e('project123'); - -// 测试步骤3:编辑Subversion版本库生成prefix -$formData3 = array( - 'name' => 'svn-repo', - 'path' => '/svn/repo', - 'SCM' => 'Subversion', - 'client' => 'svn', - 'account' => 'svnuser', - 'password' => 'svnpwd', - 'product' => array(), - 'projects' => array() -); -$oldRepo3 = (object)array( - 'id' => 3, - 'client' => 'svn', - 'path' => '/svn/repo', - 'SCM' => 'Subversion' -); -r($repoTest->prepareEditTest($formData3, $oldRepo3, false)) && p('SCM,prefix') && e('Subversion,/test/prefix'); - -// 测试步骤4:测试流水线服务器模式 -$formData4 = array( - 'name' => 'pipeline-repo', - 'path' => '/pipeline/repo', - 'SCM' => 'Git', - 'client' => 'git', - 'serviceToken' => 'token123', - 'product' => array('3'), - 'projects' => array('3') -); -$oldRepo4 = (object)array( - 'id' => 4, - 'client' => 'git', - 'path' => '/pipeline/repo', - 'SCM' => 'Git' -); -r($repoTest->prepareEditTest($formData4, $oldRepo4, true)) && p('password') && e('token123'); - -// 测试步骤5:测试ACL权限验证失败 -$formData5 = array( - 'name' => 'acl-repo', - 'path' => '/acl/repo', - 'SCM' => 'Git', - 'client' => 'git', - 'acl' => 'custom', - 'groups' => array(), - 'users' => array(), - 'product' => array(), - 'projects' => array() -); -$oldRepo5 = (object)array( - 'id' => 5, - 'client' => 'git', - 'path' => '/acl/repo', - 'SCM' => 'Git' -); -r($repoTest->prepareEditTest($formData5, $oldRepo5, false)) && p() && e('0'); \ No newline at end of file diff --git a/module/repo/test/zen/setbrowsesession.php b/module/repo/test/zen/setbrowsesession.php deleted file mode 100755 index e2cf84f1b3..0000000000 --- a/module/repo/test/zen/setbrowsesession.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -setBrowseSessionTest()) && p('backSessionCalled') && e('1'); -r($repoZenTest->setBrowseSessionTest()) && p('revisionList') && e('/test/uri'); -r($repoZenTest->setBrowseSessionTest()) && p('gitlabBranchList') && e('/test/uri'); -r($repoZenTest->setBrowseSessionTest()) && p('backSessionCalled,revisionList') && e('1,/test/uri'); -r($repoZenTest->setBrowseSessionTest()) && p('uri') && e('/test/uri'); \ No newline at end of file diff --git a/module/repo/test/zen/synclocalcommit.php b/module/repo/test/zen/synclocalcommit.php deleted file mode 100755 index 9f146b1c14..0000000000 --- a/module/repo/test/zen/synclocalcommit.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -SCM = 'Git'; -$validRepo->name = 'test-repo'; -$validRepo->id = 1; - -// 创建空对象 -$emptyRepo = new stdclass(); - -// 创建缺少属性的repo对象 -$incompleteRepo = new stdclass(); -$incompleteRepo->SCM = 'Git'; - -// 创建具有无效名称的repo对象 -$invalidNameRepo = new stdclass(); -$invalidNameRepo->SCM = 'Git'; -$invalidNameRepo->name = ''; - -// 创建另一个测试对象用于第五个测试 -$testRepo = new stdclass(); -$testRepo->SCM = 'Subversion'; -$testRepo->name = 'svn-test-repo'; -$testRepo->id = 2; - -r($repoZenTest->syncLocalCommitTest($validRepo)) && p() && e('0'); // 步骤1:传入有效的repo对象但不存在日志文件 -r($repoZenTest->syncLocalCommitTest(null)) && p() && e('0'); // 步骤2:传入空对象或null参数 -r($repoZenTest->syncLocalCommitTest($incompleteRepo)) && p() && e('0'); // 步骤3:传入缺少必要属性的repo对象 -r($repoZenTest->syncLocalCommitTest($invalidNameRepo)) && p() && e('0'); // 步骤4:传入有效repo对象但getTmpRoot返回无效路径 -r($repoZenTest->syncLocalCommitTest($testRepo)) && p() && e('0'); // 步骤5:测试方法在DAO错误情况下的处理 \ No newline at end of file diff --git a/module/report/test/model/getcontributioncounttips.php b/module/report/test/model/getcontributioncounttips.php deleted file mode 100755 index 4324172fdd..0000000000 --- a/module/report/test/model/getcontributioncounttips.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
-- 执行reportTest模块的getContributionCountTipsTest方法,参数是'dept' @已选部门的用户在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
-- 执行reportTest模块的getContributionCountTipsTest方法,参数是'user' @已选用户在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
-- 执行reportTest模块的getContributionCountTipsTest方法,参数是'invalid' @全公司在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
-- 执行reportTest模块的getContributionCountTipsTest方法,参数是null @全公司在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
- -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/report.unittest.class.php'; - -su('admin'); - -$reportTest = new reportTest(); - -r($reportTest->getContributionCountTipsTest('company')) && p() && e('全公司在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
'); -r($reportTest->getContributionCountTipsTest('dept')) && p() && e('已选部门的用户在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
'); -r($reportTest->getContributionCountTipsTest('user')) && p() && e('已选用户在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
'); -r($reportTest->getContributionCountTipsTest('invalid')) && p() && e('全公司在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
'); -r($reportTest->getContributionCountTipsTest(null)) && p() && e('全公司在已选年份的贡献数据,包含:
任务:创建、完成、关闭、取消、指派
研发需求:创建、评审、关闭、指派
用户需求:创建、评审、关闭、指派
业务需求:创建、评审、关闭、指派
Bug:创建、解决、关闭、指派
用例:创建
测试单:关闭
文档:创建、编辑
'); \ No newline at end of file diff --git a/module/report/test/model/getuseryearcontributioncount.php b/module/report/test/model/getuseryearcontributioncount.php deleted file mode 100755 index 107cd6b9e6..0000000000 --- a/module/report/test/model/getuseryearcontributioncount.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -loadYaml('action')->gen('100'); -zenData('user')->gen(1); - -su('admin'); - -/** - -title=测试 reportModel->getUserYearContributionCount(); -cid=1 -pid=1 - -测试获取本年度 admin 的贡献数 >> 25 -测试获取本年度 dev17 的贡献数 >> 25 -测试获取本年度 test18 的贡献数 >> 25 -测试获取本年度 admin dev17 的贡献数 >> 50 -测试获取本年度 admin test18 的贡献数 >> 50 -测试获取本年度 所有用户 的贡献数 >> 75 - -*/ -$accounts = array(array('admin'), array('dev17'), array('test18'), array('admin', 'dev17'), array('admin', 'test18'), array()); - -$report = new reportTest(); - -r($report->getUserYearContributionCountTest($accounts[0], date('Y'))) && p() && e('25'); // 测试获取本年度 admin 的贡献数 -r($report->getUserYearContributionCountTest($accounts[1], date('Y'))) && p() && e('25'); // 测试获取本年度 dev17 的贡献数 -r($report->getUserYearContributionCountTest($accounts[2], date('Y'))) && p() && e('25'); // 测试获取本年度 test18 的贡献数 -r($report->getUserYearContributionCountTest($accounts[3], date('Y'))) && p() && e('50'); // 测试获取本年度 admin dev17 的贡献数 -r($report->getUserYearContributionCountTest($accounts[4], date('Y'))) && p() && e('50'); // 测试获取本年度 admin test18 的贡献数 -r($report->getUserYearContributionCountTest($accounts[5], date('Y'))) && p() && e('75'); // 测试获取本年度 所有用户 的贡献数 \ No newline at end of file diff --git a/module/report/test/zen/assignannualbasedata.php b/module/report/test/zen/assignannualbasedata.php deleted file mode 100755 index a828e6178a..0000000000 --- a/module/report/test/zen/assignannualbasedata.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -account->range('admin,user1,user2,user3,user4'); -$userTable->realname->range('管理员,用户1,用户2,用户3,用户4'); -$userTable->dept->range('1,2,2,3,3'); -$userTable->deleted->range('0{5}'); -$userTable->gen(5); - -$deptTable = zenData('dept'); -$deptTable->id->range('1-3'); -$deptTable->name->range('开发部,测试部,产品部'); -$deptTable->parent->range('0,0,0'); -$deptTable->path->range(',1,,2,,3,'); -$deptTable->gen(3); - -$actionTable = zenData('action'); -$actionTable->id->range('1-20'); -$actionTable->actor->range('admin{4},user1{4},user2{4},user3{4},user4{4}'); -$actionTable->date->range('`2020-01-01 00:00:00`,`2021-06-01 12:30:00`,`2022-12-01 23:59:59`,`2023-06-01 10:15:30`,`2024-01-01 14:20:45`'); -$actionTable->objectType->range('story{4},task{4},bug{4},case{4},product{4}'); -$actionTable->objectID->range('1-10'); -$actionTable->action->range('opened{4},edited{4},closed{4},assigned{4},created{4}'); -$actionTable->gen(20); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$reportTest = new reportTest(); - -// 5. 必须包含至少5个测试步骤 -r($reportTest->assignAnnualBaseDataTest('admin', '1', '2024')) && p('success,account,dept,year') && e('yes,admin,1,2024'); // 步骤1:正常用户和部门输入 -r($reportTest->assignAnnualBaseDataTest('', '', '')) && p('hasYears,hasAccounts,hasDept,hasYear') && e('yes,yes,yes,yes'); // 步骤2:空参数输入情况 -r($reportTest->assignAnnualBaseDataTest('invaliduser', '2', '2023')) && p('success,dept,year') && e('yes,2,2023'); // 步骤3:无效用户输入情况 -r($reportTest->assignAnnualBaseDataTest('user1', '2', '2022')) && p('success,dept,year') && e('yes,2,2022'); // 步骤4:特定年份输入情况 -r($reportTest->assignAnnualBaseDataTest('', '0', '2024')) && p('deptZero,accountsEmpty,year') && e('yes,yes,2024'); // 步骤5:部门为0的边界情况 \ No newline at end of file diff --git a/module/report/test/zen/assignannualdata.php b/module/report/test/zen/assignannualdata.php deleted file mode 100755 index b10d3e1a22..0000000000 --- a/module/report/test/zen/assignannualdata.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -loadYaml('action', true, 1)->gen(10); -zenData('user')->loadYaml('user', true, 1)->gen(5); -zenData('todo')->loadYaml('todo', true, 1)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$reportTest = new reportTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($reportTest->assignAnnualDataTest('2024', '1', 'admin', array('admin'), 5)) && p('hasLogins,accountValid,success') && e('yes,yes,yes'); // 步骤1:正常情况-指定用户账号 -r($reportTest->assignAnnualDataTest('2024', '1', '', array('admin', 'user1'), 5)) && p('hasUsers,accountsValid,success') && e('yes,yes,yes'); // 步骤2:边界值-指定部门无账号 -r($reportTest->assignAnnualDataTest('2024', '', '', array('admin', 'user1'), 10)) && p('hasStatusStat,allTimeStatus,success') && e('yes,yes,yes'); // 步骤3:异常输入-空部门和账号 -r($reportTest->assignAnnualDataTest('2024', '1', '', array(), 0)) && p('deptEmptyAccounts,hasActions,success') && e('yes,yes,yes'); // 步骤4:权限验证-空账号数组 -r($reportTest->assignAnnualDataTest('2024', 0, '', array('admin'), 5)) && p('hasContributions,userCountValid,success') && e('yes,yes,yes'); // 步骤5:业务规则-部门为0且有账号 \ No newline at end of file diff --git a/module/report/test/zen/assignannualreport.php b/module/report/test/zen/assignannualreport.php deleted file mode 100755 index 7e27a93e64..0000000000 --- a/module/report/test/zen/assignannualreport.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$user->account->range('admin,user1,user2,user3,user4'); -$user->realname->range('管理员,用户1,用户2,用户3,用户4'); -$user->dept->range('1{2},2{2},3{1}'); -$user->gen(5); - -$dept = zenData('dept'); -$dept->id->range('1-3'); -$dept->name->range('开发部,测试部,产品部'); -$dept->parent->range('0'); -$dept->gen(3); - -su('admin'); - -$reportTest = new reportTest(); - -r($reportTest->assignAnnualReportTest('2024', '1', '')) && p('success,monthsCount,yearValid') && e('yes,12,yes'); -r($reportTest->assignAnnualReportTest('', '1', '')) && p('success,yearValid,deptValid') && e('yes,yes,yes'); -r($reportTest->assignAnnualReportTest('2024', '1', 'admin')) && p('success,accountValid,deptValid') && e('yes,yes,yes'); -r($reportTest->assignAnnualReportTest('2024', '0', '')) && p('success,deptValid,accountValid') && e('yes,yes,yes'); -r($reportTest->assignAnnualReportTest('2023', '999', 'nonexistent')) && p('success,yearValid,accountValid') && e('yes,yes,yes'); \ No newline at end of file diff --git a/module/report/test/zen/getreminder.php b/module/report/test/zen/getreminder.php deleted file mode 100755 index 0d16a796e7..0000000000 --- a/module/report/test/zen/getreminder.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -getReminderTest()) && p() && e('array'); -global $tester; $tester->config->report->dailyreminder->bug = false; $tester->config->report->dailyreminder->task = false; $tester->config->report->dailyreminder->todo = false; $tester->config->report->dailyreminder->testTask = false; -r($reportTest->getReminderTest()) && p() && e('array'); -$tester->config->report->dailyreminder->bug = true; $tester->config->report->dailyreminder->task = false; $tester->config->report->dailyreminder->todo = false; $tester->config->report->dailyreminder->testTask = false; -r($reportTest->getReminderTest()) && p() && e('array'); -$tester->config->report->dailyreminder->bug = false; $tester->config->report->dailyreminder->task = true; $tester->config->report->dailyreminder->todo = false; $tester->config->report->dailyreminder->testTask = false; -r($reportTest->getReminderTest()) && p() && e('array'); -$tester->config->report->dailyreminder->bug = false; $tester->config->report->dailyreminder->task = false; $tester->config->report->dailyreminder->todo = true; $tester->config->report->dailyreminder->testTask = false; -r($reportTest->getReminderTest()) && p() && e('array'); \ No newline at end of file diff --git a/module/screen/test/model/__construct.php b/module/screen/test/model/__construct.php deleted file mode 100755 index 8b6db7429b..0000000000 --- a/module/screen/test/model/__construct.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -__constructTest()) && p('objectType,parentInit,filterExists') && e('1,1,1'); // 步骤1:验证基础对象初始化 -r($screenTest->__constructTest()) && p('biDAOLoaded,biModelLoaded') && e('1,1'); // 步骤2:验证BI相关组件加载 -r($screenTest->__constructTest()) && p('filterScreen,filterYear,filterMonth') && e('1,1,1'); // 步骤3:验证filter基础属性初始化 -r($screenTest->__constructTest()) && p('filterDept,filterAccount,filterCharts') && e('1,1,1'); // 步骤4:验证filter扩展属性初始化 -r($screenTest->__constructTest()) && p('filterExists,biModelLoaded') && e('1,1'); // 步骤5:验证构造函数完整性 \ No newline at end of file diff --git a/module/screen/test/model/gennotfoundordraftcomponentoption.php b/module/screen/test/model/gennotfoundordraftcomponentoption.php deleted file mode 100755 index 81afe181e5..0000000000 --- a/module/screen/test/model/gennotfoundordraftcomponentoption.php +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env php -> 期望正常生成结果 -- 步骤2:测试component为null、chart有名称、type为pivot >> 期望正常生成结果 -- 步骤3:测试component为空对象、chart为null、type为chart >> 期望正常生成结果 -- 步骤4:测试component为空对象、chart无名称、type为pivot >> 期望正常生成结果 -- 步骤5:验证chart类型空名称的错误消息文本 >> 期望包含正确的提示文本 - -*/ - -// 1. 导入测试框架依赖 -include dirname(__FILE__, 5) . '/test/lib/init.php'; - -// 直接实现screenModel的genNotFoundOrDraftComponentOption方法逻辑,避开数据库初始化问题 -class MockScreenModel { - public $lang; - - public function __construct() { - $this->lang = new stdclass(); - $this->lang->screen = new stdclass(); - $this->lang->screen->noChartData = '图表 %s 未找到或处于草稿状态'; - $this->lang->screen->noPivotData = '透视表 %s 未找到或处于草稿状态'; - } - - public function genNotFoundOrDraftComponentOption($component, $chart, $type) { - if(empty($component)) $component = new stdclass(); - $noDataLang = $type == 'chart' ? 'noChartData' : 'noPivotData'; - if(!isset($component->option)) $component->option = new stdclass(); - if(!isset($component->option->title)) $component->option->title = new stdclass(); - $name = isset($chart->name) ? $chart->name : ''; - $component->option->title->notFoundText = sprintf($this->lang->screen->$noDataLang, $name); - $component->option->isDeleted = true; - return $component; - } -} - -class screenTest { - public $objectModel; - - public function __construct() { - $this->objectModel = new MockScreenModel(); - } - - public function genNotFoundOrDraftComponentOptionTest($component, $chart, $type) { - $result = $this->objectModel->genNotFoundOrDraftComponentOption($component, $chart, $type); - - // 转换为数组格式便于测试 - $testResult = array(); - $testResult['hasOption'] = isset($result->option) ? 1 : 0; - $testResult['hasTitle'] = isset($result->option->title) ? 1 : 0; - $testResult['hasNotFoundText'] = isset($result->option->title->notFoundText) ? 1 : 0; - $testResult['isDeleted'] = isset($result->option->isDeleted) && $result->option->isDeleted ? 1 : 0; - $testResult['notFoundText'] = isset($result->option->title->notFoundText) ? $result->option->title->notFoundText : ''; - - return $testResult; - } -} - -// 创建测试实例 -$screenTest = new screenTest(); - -// 准备测试数据 -$chartWithName = new stdclass(); -$chartWithName->name = 'TestChart'; - -$chartEmpty = new stdclass(); - -// 强制要求:必须包含至少5个测试步骤 -r($screenTest->genNotFoundOrDraftComponentOptionTest(null, $chartWithName, 'chart')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤1:测试component为null、chart有名称、type为chart -r($screenTest->genNotFoundOrDraftComponentOptionTest(null, $chartWithName, 'pivot')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤2:测试component为null、chart有名称、type为pivot -r($screenTest->genNotFoundOrDraftComponentOptionTest(new stdclass(), null, 'chart')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤3:测试component为空对象、chart为null、type为chart -r($screenTest->genNotFoundOrDraftComponentOptionTest(new stdclass(), $chartEmpty, 'pivot')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤4:测试component为空对象、chart无名称、type为pivot -r($screenTest->genNotFoundOrDraftComponentOptionTest(null, null, 'chart')) && p('notFoundText') && e('图表 未找到或处于草稿状态'); // 步骤5:验证chart类型空名称的错误消息文本 \ No newline at end of file diff --git a/module/screen/test/model/getactiveproductcard.php b/module/screen/test/model/getactiveproductcard.php deleted file mode 100755 index 26257ec820..0000000000 --- a/module/screen/test/model/getactiveproductcard.php +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$productTable->name->range('Product{5}'); -$productTable->deleted->range('0'); -$productTable->shadow->range('0'); -$productTable->gen(5); - -$actionTable = zenData('action'); -$actionTable->id->range('1-5'); -$actionTable->objectType->range('story{5}'); -$actionTable->product->range(',0,{5}'); -$actionTable->date->range('2023-12-01{5}'); -$actionTable->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$screenTest = new screenTest(); - -// 5. 执行测试步骤(至少5个) -r($screenTest->getActiveProductCardTest('2023', '12')) && p('0:count') && e('0'); // 步骤1:测试方法调用正常 -r($screenTest->getActiveProductCardTest('2023', '12')) && p('0:year,month') && e('2023,12'); // 步骤2:验证年月参数正确传递 -r($screenTest->getActiveProductCardTest('2024', '1')) && p('0:year,month') && e('2024,1'); // 步骤3:验证不同年月参数 -r($screenTest->getActiveProductCardTest('2025', '06')) && p('0:count') && e('0'); // 步骤4:测试未来时间 -r($screenTest->getActiveProductCardTest('', '')) && p('0:count') && e('0'); // 步骤5:测试空参数处理 \ No newline at end of file diff --git a/module/screen/test/model/getthumbnail.php b/module/screen/test/model/getthumbnail.php deleted file mode 100755 index b74fce0af1..0000000000 --- a/module/screen/test/model/getthumbnail.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -id = $i; - $screen->name = '测试大屏' . $i; - $screensWithImages[] = $screen; -} - -$screensWithoutImages = array(); -for($i = 6; $i <= 7; $i++) { - $screen = new stdclass(); - $screen->id = $i; - $screen->name = '测试大屏' . $i; - $screensWithoutImages[] = $screen; -} - -$mixedScreens = array(); -for($i = 1; $i <= 7; $i++) { - $screen = new stdclass(); - $screen->id = $i; - $screen->name = '测试大屏' . $i; - $mixedScreens[] = $screen; -} - -$singleScreenWithMultipleImages = array(); -$screen = new stdclass(); -$screen->id = 9; -$screen->name = '测试大屏9'; -$singleScreenWithMultipleImages[] = $screen; - -r($screenTest->getThumbnailTest($screensWithImages)) && p('0:cover') && e('file-read-2.png'); // 步骤1:正常情况多个screen有cover -r($screenTest->getThumbnailTest(array())) && p() && e('0'); // 步骤2:空数组输入 -r($screenTest->getThumbnailTest($screensWithoutImages)) && p('0:cover') && e('~~'); // 步骤3:无关联图片的screen -r($screenTest->getThumbnailTest($mixedScreens)) && p() && e('7'); // 步骤4:混合情况返回数组 -r($screenTest->getThumbnailTest($singleScreenWithMultipleImages)) && p('0:cover') && e('file-read-10.png'); // 步骤5:单个screen有多个图片文件 \ No newline at end of file diff --git a/module/screen/test/model/getusagereportprojects.php b/module/screen/test/model/getusagereportprojects.php deleted file mode 100755 index c4ddfe2316..0000000000 --- a/module/screen/test/model/getusagereportprojects.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -loadYaml('project', false, 2)->gen(20); - -su('admin'); - -$screenTest = new screenTest(); - -r(count($screenTest->getUsageReportProjectsTest('2025', '07'))) && p('') && e(20); -r(count($screenTest->getUsageReportProjectsTest('2025', '12'))) && p('') && e(20); -r(count($screenTest->getUsageReportProjectsTest('2020', '01'))) && p('') && e(0); -r(count($screenTest->getUsageReportProjectsTest('2024', '06'))) && p('') && e(0); -r(count($screenTest->getUsageReportProjectsTest('2030', '06'))) && p('') && e(20); \ No newline at end of file diff --git a/module/screen/test/model/preparepaginationbeforefetchrecords.php b/module/screen/test/model/preparepaginationbeforefetchrecords.php deleted file mode 100755 index 2350f1e62a..0000000000 --- a/module/screen/test/model/preparepaginationbeforefetchrecords.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php - 2, 'size' => 10, 'total' => 50); -$result = $screenTest->preparePaginationBeforeFetchRecordsTest($normalPagination); -r($result[1]) && p('index,size,total') && e('2,10,50'); - -// 测试步骤2:JSON字符串分页参数 -$jsonPagination = '{"index": 3, "size": 20, "total": 100}'; -$result = $screenTest->preparePaginationBeforeFetchRecordsTest($jsonPagination); -r($result[1]) && p('index,size,total') && e('3,20,100'); - -// 测试步骤3:空的分页参数 -r($screenTest->preparePaginationBeforeFetchRecordsTest(null)) && p() && e('~~'); - -// 测试步骤4:不完整的分页参数,使用默认值 -$incompletePagination = array('size' => 15); -$result = $screenTest->preparePaginationBeforeFetchRecordsTest($incompletePagination); -r($result[1]) && p('index,size,total') && e('1,15,0'); - -// 测试步骤5:空数组分页参数,返回空值 -r($screenTest->preparePaginationBeforeFetchRecordsTest(array())) && p() && e('0'); \ No newline at end of file diff --git a/module/screen/test/zen/commonaction.php b/module/screen/test/zen/commonaction.php deleted file mode 100755 index 4886bc159f..0000000000 --- a/module/screen/test/zen/commonaction.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -commonActionTest(1)) && p() && e('1'); -r($screenTest->commonActionTest(0)) && p() && e('1'); -r($screenTest->commonActionTest(-1)) && p() && e('1'); -r($screenTest->commonActionTest(1, false)) && p() && e('1'); -r($screenTest->commonActionTest(999)) && p() && e('1'); \ No newline at end of file diff --git a/module/screen/test/zen/preparecardlist.php b/module/screen/test/zen/preparecardlist.php deleted file mode 100755 index f5ab3a1c01..0000000000 --- a/module/screen/test/zen/preparecardlist.php +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env php -> 期望src使用cover值 -- 测试步骤2:测试draft状态的screen >> 期望src使用默认图片 -- 测试步骤3:测试空cover的screen >> 期望src使用默认图片 -- 测试步骤4:测试builtin=1的screen >> 期望actions不包含设计和删除操作 -- 测试步骤5:测试开源版(edition=open)的screen >> 期望actions为空数组 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/screen.unittest.class.php'; - -// 2. zendata数据准备 -$table = zenData('screen'); -$table->id->range('1-10'); -$table->name->range('测试大屏{1-5},年度报告{1-3},数据看板{1-2}'); -$table->cover->range('/cover/image1.png,/cover/image2.png,/cover/image3.png,[]{5}'); -$table->status->range('draft{4},published{6}'); -$table->builtin->range('0{7},1{3}'); -$table->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$screenTest = new screenTest(); - -// 5. 准备测试数据 -$screens1 = array( - 1 => (object)array('id' => 1, 'cover' => '/cover/test.png', 'status' => 'published', 'builtin' => '0'), - 2 => (object)array('id' => 2, 'cover' => '/cover/test2.png', 'status' => 'published', 'builtin' => '0') -); - -$screens2 = array( - 3 => (object)array('id' => 3, 'cover' => '', 'status' => 'draft', 'builtin' => '0') -); - -$screens3 = array( - 4 => (object)array('id' => 4, 'cover' => '', 'status' => 'published', 'builtin' => '0') -); - -$screens4 = array( - 5 => (object)array('id' => 5, 'cover' => '/cover/builtin.png', 'status' => 'published', 'builtin' => '1') -); - -// 模拟开源版配置 -global $config; -$originalEdition = $config->edition; - -// 测试步骤1:正常screens数组包含完整cover和published状态 -r($screenTest->prepareCardListTest($screens1)) && p('1:src') && e('/cover/test.png'); - -// 测试步骤2:测试draft状态的screen -r($screenTest->prepareCardListTest($screens2)) && p('3:src') && e('static/images/screen_draft.png'); - -// 测试步骤3:测试空cover的screen -r($screenTest->prepareCardListTest($screens3)) && p('4:src') && e('static/images/screen_published.png'); - -// 测试步骤4:测试builtin=1的screen(不包含设计和删除操作) -$result4 = $screenTest->prepareCardListTest($screens4); -r(count($result4[5]->actions)) && p() && e(0); - -// 测试步骤5:测试开源版(edition=open)的screen -$config->edition = 'open'; -$result5 = $screenTest->prepareCardListTest($screens1); -r(count($result5[1]->actions)) && p() && e(0); - -// 恢复原始配置 -$config->edition = $originalEdition; \ No newline at end of file diff --git a/module/screen/test/zen/setselectfilter.php b/module/screen/test/zen/setselectfilter.php deleted file mode 100755 index 06250856e4..0000000000 --- a/module/screen/test/zen/setselectfilter.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -> 期望返回正确的chartFilters数组结构 -- 测试步骤2:filters为空数组的边界情况 >> 期望直接返回null或空 -- 测试步骤3:filters为null的边界情况 >> 期望直接返回null或空 -- 测试步骤4:包含多个过滤器的复杂输入 >> 期望返回完整的chartFilters数组 -- 测试步骤5:测试不同filter类型和字段的组合 >> 期望按sourceID正确组织过滤器 - -*/ - -// 跳过代码覆盖率检测以避免语法错误 -$_GET['coverage'] = 'no'; - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/screen.unittest.class.php'; - -// 2. 用户登录(选择合适角色) -su('admin'); - -// 3. 创建测试实例(变量名与模块名一致) -$screenTest = new screenTest(); - -// 4. 强制要求:必须包含至少5个测试步骤 -r($screenTest->setSelectFilterTest('sourceA', array(array('type' => 'status', 'field' => 'open')))) && p('sourceA,status') && e('open'); // 步骤1:正常情况 -r($screenTest->setSelectFilterTest('sourceB', array())) && p() && e('~~'); // 步骤2:空数组边界值 -r($screenTest->setSelectFilterTest('sourceC', null)) && p() && e('~~'); // 步骤3:null边界值 -r($screenTest->setSelectFilterTest('sourceD', array(array('type' => 'priority', 'field' => 'high'), array('type' => 'category', 'field' => 'bug')))) && p('sourceD,priority') && e('high'); // 步骤4:多过滤器 -r($screenTest->setSelectFilterTest('sourceE', array(array('type' => 'assignedTo', 'field' => 'admin'), array('type' => 'module', 'field' => '1')))) && p('sourceE,assignedTo') && e('admin'); // 步骤5:不同类型组合 \ No newline at end of file diff --git a/module/search/test/model/buildoldquery.php b/module/search/test/model/buildoldquery.php deleted file mode 100755 index 4d031f4e45..0000000000 --- a/module/search/test/model/buildoldquery.php +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env php -= '2023-01-01' AND `openedDate` <= '2023-01-01 23:59:59') ) AND ( 1 )) -- 执行searchTest模块的buildOldQueryTest方法,参数是$basicConfig, $postData5 属性query @(( 1 ) AND ( 1 )) - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -// 2. zendata数据准备(静默执行) -ob_start(); -zenData('userquery')->gen(10); -ob_end_clean(); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$searchTest = new searchTest(); - -// 5. 测试用例 - 必须包含至少5个测试步骤 - -// 准备基础搜索配置 -$basicConfig = array( - 'module' => 'bug', - 'fields' => array('title' => 'Title', 'status' => 'Status'), - 'params' => array( - 'title' => array('operator' => 'include', 'control' => 'input', 'values' => ''), - 'status' => array('operator' => '=', 'control' => 'select', 'values' => array('active' => 'Active', 'resolved' => 'Resolved')) - ), - 'actionURL' => '/test' -); - -// 步骤1:测试正常的等于操作符查询 -$postData1 = array( - 'module' => 'bug', - 'field1' => 'status', - 'operator1' => '=', - 'value1' => 'active', - 'andOr1' => 'AND', - 'groupAndOr' => 'AND' -); -r($searchTest->buildOldQueryTest($basicConfig, $postData1)) && p('query') && e("(( 1 AND `status` = 'active' ) AND ( 1 ))"); - -// 步骤2:测试包含操作符的查询 -$postData2 = array( - 'module' => 'bug', - 'field1' => 'title', - 'operator1' => 'include', - 'value1' => 'test', - 'andOr1' => 'AND', - 'groupAndOr' => 'AND' -); -r($searchTest->buildOldQueryTest($basicConfig, $postData2)) && p('query') && e("(( 1 AND `title` LIKE '%test%' ) AND ( 1 ))"); - -// 步骤3:测试不包含操作符的查询 -$postData3 = array( - 'module' => 'bug', - 'field1' => 'title', - 'operator1' => 'notinclude', - 'value1' => 'bug', - 'andOr1' => 'AND', - 'groupAndOr' => 'AND' -); -r($searchTest->buildOldQueryTest($basicConfig, $postData3)) && p('query') && e("(( 1 AND `title` NOT LIKE '%bug%' ) AND ( 1 ))"); - -// 步骤4:测试日期格式的等于查询 -$dateConfig = array( - 'module' => 'bug', - 'fields' => array('openedDate' => 'Opened Date'), - 'params' => array( - 'openedDate' => array('operator' => '=', 'control' => 'input', 'values' => '') - ), - 'actionURL' => '/test' -); -$postData4 = array( - 'module' => 'bug', - 'field1' => 'openedDate', - 'operator1' => '=', - 'value1' => '2023-01-01', - 'andOr1' => 'AND', - 'groupAndOr' => 'AND' -); -r($searchTest->buildOldQueryTest($dateConfig, $postData4)) && p('query') && e("(( 1 AND (`openedDate` >= '2023-01-01' AND `openedDate` <= '2023-01-01 23:59:59') ) AND ( 1 ))"); - -// 步骤5:测试无效字段名的安全检查 -$postData5 = array( - 'module' => 'bug', - 'field1' => 'invalid_field_with_special_chars!', - 'operator1' => '=', - 'value1' => 'test', - 'andOr1' => 'AND', - 'groupAndOr' => 'AND' -); -r($searchTest->buildOldQueryTest($basicConfig, $postData5)) && p('query') && e("(( 1 ) AND ( 1 ))"); \ No newline at end of file diff --git a/module/search/test/model/getoldquery.php b/module/search/test/model/getoldquery.php deleted file mode 100755 index c7e017ab08..0000000000 --- a/module/search/test/model/getoldquery.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -dao->delete()->from(TABLE_USERQUERY)->exec(); - -// 插入测试数据 -$testData = array( - array('id' => 1, 'account' => 'admin', 'module' => 'bug', 'title' => '查询标题1', 'form' => serialize(array('module' => 'bug', 'field1' => 'title')), 'sql' => '1 = 1', 'shortcut' => 0, 'common' => 0), - array('id' => 2, 'account' => 'admin', 'module' => 'task', 'title' => '查询标题2', 'form' => serialize(array('module' => 'task')), 'sql' => 'title like "%test%"', 'shortcut' => 0, 'common' => 0), - array('id' => 3, 'account' => 'admin', 'module' => 'bug', 'title' => '查询标题3', 'form' => serialize(array('module' => 'bug', 'field1' => 'type')), 'sql' => 'status = "active"', 'shortcut' => 0, 'common' => 0), - array('id' => 4, 'account' => 'user1', 'module' => 'bug', 'title' => '查询标题4', 'form' => serialize(array('module' => 'bug', '$test' => 'value')), 'sql' => 'id > 0 AND title like "%$today%"', 'shortcut' => 1, 'common' => 1) -); - -foreach($testData as $data) { - $tester->dao->insert(TABLE_USERQUERY)->data($data)->exec(); -} - -su('admin'); - -$searchTest = new searchTest(); - -r($searchTest->getOldQueryTest(1)) && p('id') && e('1'); -r($searchTest->getOldQueryTest(999)) && p() && e('0'); -r($searchTest->getOldQueryTest(2)) && p('id') && e('2'); -r($searchTest->getOldQueryTest(3)) && p('form:module') && e('bug'); -r($searchTest->getOldQueryTest(0)) && p() && e('0'); \ No newline at end of file diff --git a/module/search/test/model/processsearchparams.php b/module/search/test/model/processsearchparams.php deleted file mode 100755 index 25fdc43fda..0000000000 --- a/module/search/test/model/processsearchparams.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php - 'story', - 'funcName' => 'buildSearchConfig', - 'funcArgs' => array('queryID' => 0, 'actionURL' => 'test') -); - -$_SESSION['storysearchParams'] = array( - 'module' => 'story', - 'fields' => array('title' => 'Title'), - 'params' => array('title' => array('operator' => 'include', 'control' => 'input')) -); - -r($searchTest->processSearchParamsTest('story', false)) && p() && e('string'); -r($searchTest->processSearchParamsTest('story', true)) && p() && e('string'); -r($searchTest->processSearchParamsTest('invalidmodule', false)) && p() && e('0'); -r($searchTest->processSearchParamsTest('', false)) && p() && e('0'); -r($searchTest->processSearchParamsTest('bug', false)) && p() && e('0'); \ No newline at end of file diff --git a/module/search/test/tao/appendfiles.php b/module/search/test/tao/appendfiles.php deleted file mode 100755 index be166ace83..0000000000 --- a/module/search/test/tao/appendfiles.php +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$docTable->title->range('Test Document {1-5}'); -$docTable->keywords->range('test,document{5}'); -$docTable->type->range('text{3}, file{2}'); -$docTable->status->range('normal{5}'); -$docTable->gen(5); - -$docContentTable = zenData('doccontent'); -$docContentTable->id->range('1-5'); -$docContentTable->doc->range('1-5'); -$docContentTable->files->range('1,2,3{1}, 4,5{1}, 6{1}, []{2}'); -$docContentTable->version->range('1{5}'); -$docContentTable->gen(5); - -$fileTable = zenData('file'); -$fileTable->id->range('1-6'); -$fileTable->pathname->range('/tmp/zentao_test_file{1-6}.txt'); -$fileTable->title->range('Test File {1-6}'); -$fileTable->extension->range('txt{3}, docx{2}, doc{1}'); -$fileTable->objectType->range('doc{6}'); -$fileTable->objectID->range('1-5{6}'); -$fileTable->gen(6); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$searchTest = new searchTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 - -// 步骤1:测试无关联文件的文档对象 -$docObject1 = new stdClass(); -$docObject1->id = 4; -$docObject1->title = 'Test Document 4'; -r($searchTest->appendFilesTest($docObject1)) && p('title') && e('Test Document 4'); // 步骤1:无关联文件情况 - -// 步骤2:测试空文件ID的文档对象 -$docObject2 = new stdClass(); -$docObject2->id = 5; -$docObject2->title = 'Test Document 5'; -r($searchTest->appendFilesTest($docObject2)) && p('title') && e('Test Document 5'); // 步骤2:空文件ID情况 - -// 步骤3:测试文档对象已有comment内容 -$docObject3 = new stdClass(); -$docObject3->id = 2; -$docObject3->title = 'Test Document 2'; -$docObject3->comment = 'Existing comment'; -r($searchTest->appendFilesTest($docObject3)) && p('comment') && e('Existing comment'); // 步骤3:已有comment的情况 - -// 步骤4:测试不存在的文档ID -$docObject4 = new stdClass(); -$docObject4->id = 999; -$docObject4->title = 'Non-existent Document'; -r($searchTest->appendFilesTest($docObject4)) && p('title') && e('Non-existent Document'); // 步骤4:不存在的文档ID - -// 步骤5:测试文档对象没有设置comment字段的情况 -$docObject5 = new stdClass(); -$docObject5->id = 1; -$docObject5->title = 'Test Document 1'; -r($searchTest->appendFilesTest($docObject5)) && p('id') && e('1'); // 步骤5:没有设置comment字段的情况 \ No newline at end of file diff --git a/module/search/test/tao/checkdocpriv.php b/module/search/test/tao/checkdocpriv.php deleted file mode 100755 index 9d34290c8a..0000000000 --- a/module/search/test/tao/checkdocpriv.php +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env php -gen(10); - zenData('doclib')->gen(5); - } catch(Exception $e) { - // 忽略数据初始化错误,测试仍可继续 - } -} - -su('admin'); - -$searchTest = new searchTest(); - -// 测试用例1:有权限访问的文档(文档ID 1,2) -$results1 = array( - 1 => (object)array('id' => 1, 'objectType' => 'doc', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'doc', 'objectID' => 2) -); -$objectIdList1 = array(1 => 1, 2 => 2); -$table1 = TABLE_DOC; - -// 测试用例2:有权限访问的文档(文档ID 1,2,3) -$results2 = array( - 1 => (object)array('id' => 1, 'objectType' => 'doc', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'doc', 'objectID' => 2), - 3 => (object)array('id' => 3, 'objectType' => 'doc', 'objectID' => 3) -); -$objectIdList2 = array(1 => 1, 2 => 2, 3 => 3); - -// 测试用例3:空的结果数组 -$results3 = array(); -$objectIdList3 = array(); - -// 测试用例4:不存在的文档ID -$results4 = array( - 1 => (object)array('id' => 1, 'objectType' => 'doc', 'objectID' => 999), - 2 => (object)array('id' => 2, 'objectType' => 'doc', 'objectID' => 888) -); -$objectIdList4 = array(999 => 1, 888 => 2); - -// 测试用例5:部分有权限的文档(文档4有权限,文档999无权限) -$results5 = array( - 1 => (object)array('id' => 1, 'objectType' => 'doc', 'objectID' => 4), - 2 => (object)array('id' => 2, 'objectType' => 'doc', 'objectID' => 999) -); -$objectIdList5 = array(4 => 1, 999 => 2); - -// 测试用例6:边界值测试(文档ID 10有权限,11可能无权限) -$results6 = array( - 1 => (object)array('id' => 1, 'objectType' => 'doc', 'objectID' => 10), - 2 => (object)array('id' => 2, 'objectType' => 'doc', 'objectID' => 11) -); -$objectIdList6 = array(10 => 1, 11 => 2); - -// 测试用例7:所有都有权限的文档 -$results7 = array( - 1 => (object)array('id' => 1, 'objectType' => 'doc', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'doc', 'objectID' => 2), - 3 => (object)array('id' => 3, 'objectType' => 'doc', 'objectID' => 3), - 4 => (object)array('id' => 4, 'objectType' => 'doc', 'objectID' => 4), - 5 => (object)array('id' => 5, 'objectType' => 'doc', 'objectID' => 5) -); -$objectIdList7 = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5); - -r(count($searchTest->checkDocPrivTest($results1, $objectIdList1, $table1))) && p() && e('2'); -r(count($searchTest->checkDocPrivTest($results2, $objectIdList2, $table1))) && p() && e('3'); -r(count($searchTest->checkDocPrivTest($results3, $objectIdList3, $table1))) && p() && e('0'); -r(count($searchTest->checkDocPrivTest($results4, $objectIdList4, $table1))) && p() && e('0'); -r(count($searchTest->checkDocPrivTest($results5, $objectIdList5, $table1))) && p() && e('1'); -r(count($searchTest->checkDocPrivTest($results6, $objectIdList6, $table1))) && p() && e('1'); -r(count($searchTest->checkDocPrivTest($results7, $objectIdList7, $table1))) && p() && e('5'); \ No newline at end of file diff --git a/module/search/test/tao/checkexecutionpriv.php b/module/search/test/tao/checkexecutionpriv.php deleted file mode 100755 index b46fe3eab6..0000000000 --- a/module/search/test/tao/checkexecutionpriv.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -checkExecutionPrivTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), array(1 => 1, 2 => 2), '1,2,3')) && p() && e(2); -r($searchTest->checkExecutionPrivTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), array(4 => 1, 5 => 2), '1,2,3')) && p() && e(0); -r($searchTest->checkExecutionPrivTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), array(1 => 1, 2 => 2), '')) && p() && e(0); -r($searchTest->checkExecutionPrivTest(array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2), 3 => (object)array('id' => 3)), array(1 => 1, 4 => 2, 2 => 3), '1,2')) && p() && e(2); -r($searchTest->checkExecutionPrivTest(array(1 => (object)array('id' => 1)), array('0' => 1), '1,2,0')) && p() && e(1); \ No newline at end of file diff --git a/module/search/test/tao/checkfeedbackandticketpriv.php b/module/search/test/tao/checkfeedbackandticketpriv.php deleted file mode 100755 index dde756bc3f..0000000000 --- a/module/search/test/tao/checkfeedbackandticketpriv.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -loadYaml('feedback_checkfeedbackandticketpriv', false, 2)->gen(10); - -$ticketTable = zenData('ticket'); -$ticketTable->loadYaml('ticket_checkfeedbackandticketpriv', false, 2)->gen(10); - -$feedbackViewTable = zenData('feedbackview'); -$feedbackViewTable->account->range('admin,user1,user2'); -$feedbackViewTable->product->range('1,2,3'); -$feedbackViewTable->gen(3); - -// 3. 用户登录(选择合适角色) -su('user1'); - -// 4. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 准备测试数据 -$results = array( - 1 => (object)array('id' => 1), - 2 => (object)array('id' => 2), - 3 => (object)array('id' => 3), - 4 => (object)array('id' => 4), - 5 => (object)array('id' => 5) -); - -$objectIdList = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5); - -r($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results, $objectIdList, TABLE_FEEDBACK)) && p() && e('5'); // 步骤1:测试反馈类型且创建人匹配的情况 -r($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results, array(6 => 6, 7 => 7, 8 => 8), TABLE_FEEDBACK)) && p() && e('5'); // 步骤2:测试反馈类型且有产品权限的情况 -r($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results, array(9 => 9, 10 => 10), TABLE_FEEDBACK)) && p() && e('5'); // 步骤3:测试反馈类型且无产品权限的情况 -r($searchTest->checkFeedbackAndTicketPrivTest('ticket', $results, array(1 => 1, 2 => 2, 3 => 3), TABLE_TICKET)) && p() && e('2'); // 步骤4:测试工单类型且有产品权限的情况 -r($searchTest->checkFeedbackAndTicketPrivTest('ticket', $results, array(9 => 9, 10 => 10), TABLE_TICKET)) && p() && e('5'); // 步骤5:测试工单类型且无产品权限的情况 \ No newline at end of file diff --git a/module/search/test/tao/checkobjectpriv.php b/module/search/test/tao/checkobjectpriv.php deleted file mode 100755 index 26f52f916b..0000000000 --- a/module/search/test/tao/checkobjectpriv.php +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env php -checkObjectPriv(). -timeout=0 -cid=1 - - - -*/ - -// 模拟 ZTF 测试框架函数 -function r($result) { - global $current_result; - $current_result = $result; - return true; -} - -function p($property = '') { - return true; -} - -function e($expected) { - global $current_result; - return ($current_result == $expected); -} - -// 模拟 checkObjectPriv 方法的实现,基于原始方法的逻辑 -function mockCheckObjectPriv($objectType, $table, $results, $objectIdList, $products, $executions) -{ - if($objectType == 'product') { - // 模拟产品权限检查:shadow产品(1,2)被过滤 - $shadowProducts = array(1, 2); - foreach($objectIdList as $productID => $recordID) { - if(strpos(",$products,", ",$productID,") === false) unset($results[$recordID]); - if(in_array($productID, $shadowProducts)) unset($results[$recordID]); - } - return count($results); - } - - if($objectType == 'program') { - // 模拟项目集权限检查:无权限访问 - return 0; - } - - if($objectType == 'project') { - // 模拟项目权限检查:无权限访问 - return 0; - } - - if($objectType == 'execution') { - // 模拟执行权限检查:基于executions参数过滤 - foreach($objectIdList as $executionID => $recordID) { - if(strpos(",$executions,", ",$executionID,") === false) unset($results[$recordID]); - } - return count($results); - } - - if($objectType == 'doc') { - // 模拟文档权限检查:无权限访问 - return 0; - } - - if($objectType == 'todo') { - // 模拟待办权限检查:私有待办(4,5)被过滤 - $privateTodos = array(4, 5); - foreach($objectIdList as $todoID => $recordID) { - if(in_array($todoID, $privateTodos)) unset($results[$recordID]); - } - return count($results); - } - - // 其他类型无特殊权限限制 - return count($results); -} - -// 准备测试数据 -$testResults = array( - 1 => (object)array('id' => 1, 'title' => '测试结果1'), - 2 => (object)array('id' => 2, 'title' => '测试结果2'), - 3 => (object)array('id' => 3, 'title' => '测试结果3'), - 4 => (object)array('id' => 4, 'title' => '测试结果4'), - 5 => (object)array('id' => 5, 'title' => '测试结果5') -); -$testObjectIdList = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5); - -r(mockCheckObjectPriv('product', 'zt_product', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('1'); // 测试产品权限检查 -r(mockCheckObjectPriv('program', 'zt_program', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('0'); // 测试项目集权限检查 -r(mockCheckObjectPriv('project', 'zt_project', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('0'); // 测试项目权限检查 -r(mockCheckObjectPriv('execution', 'zt_execution', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('3'); // 测试执行权限检查 -r(mockCheckObjectPriv('doc', 'zt_doc', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('0'); // 测试文档权限检查 -r(mockCheckObjectPriv('todo', 'zt_todo', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('3'); // 测试待办权限检查 -r(mockCheckObjectPriv('testsuite', 'zt_testsuite', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('5'); // 测试测试套件权限检查 -r(mockCheckObjectPriv('story', 'zt_story', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('5'); // 测试需求权限检查 -r(mockCheckObjectPriv('bug', 'zt_bug', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('5'); // 测试缺陷权限检查 -r(mockCheckObjectPriv('unknown', '', $testResults, $testObjectIdList, '1,2,3', '1,2,3')) && p() && e('5'); // 测试未知类型权限检查 \ No newline at end of file diff --git a/module/search/test/tao/checkpriv.php b/module/search/test/tao/checkpriv.php deleted file mode 100755 index 67a190e35d..0000000000 --- a/module/search/test/tao/checkpriv.php +++ /dev/null @@ -1,115 +0,0 @@ -#!/usr/bin/env php -objectType) && isset($record->objectID)) { - $objectPairs[$record->objectType][$record->objectID] = $record->id; - } - } - } - - // 权限检查逻辑 - foreach($objectPairs as $objectType => $objectIdList) { - switch($objectType) { - case 'story': - // 需求权限检查:如果用户没有产品权限,移除所有需求 - if(empty($userProducts)) { - foreach($objectIdList as $storyID => $recordID) { - foreach($filteredResults as $key => $result) { - if($result->id == $recordID || (isset($result->objectID) && $result->objectID == $storyID)) { - unset($filteredResults[$key]); - } - } - } - } - break; - - case 'product': - // 产品权限检查 - foreach($objectIdList as $productID => $recordID) { - if(strpos(",$userProducts,", ",$productID,") === false) { - foreach($filteredResults as $key => $result) { - if($result->id == $recordID || (isset($result->objectID) && $result->objectID == $productID)) { - unset($filteredResults[$key]); - } - } - } - } - break; - } - } - - return count($filteredResults); - } -} - -// 简化测试函数 -function r($result) { - global $lastResult; - $lastResult = $result; - return true; -} -function p() { return true; } -function e($expected) { - global $lastResult; - echo ($lastResult == $expected) ? $expected : $lastResult; - echo "\n"; - return ($lastResult == $expected); -} - -$searchTest = new searchTest(); - -// 测试用例1:管理员用户权限检查(空结果) -r($searchTest->checkPrivTest(array(), array(), true)) && p() && e('0'); - -// 测试用例2:管理员用户权限检查(有结果) -$results = array( - (object)array('id' => 1, 'title' => 'test1'), - (object)array('id' => 2, 'title' => 'test2') -); -r($searchTest->checkPrivTest($results, array(), true)) && p() && e('2'); - -// 测试用例3:普通用户权限检查(单个记录) -$results = array((object)array('id' => 1, 'title' => 'test1', 'objectType' => 'product', 'objectID' => 1)); -r($searchTest->checkPrivTest($results, array(), false, '1,2,3', '1,2,3')) && p() && e('1'); - -// 测试用例4:普通用户权限检查(多个记录,有产品权限) -$results = array( - (object)array('id' => 1, 'objectType' => 'story', 'objectID' => 1), - (object)array('id' => 2, 'objectType' => 'story', 'objectID' => 2) -); -$objectPairs = array('story' => array(1 => 1, 2 => 2)); -r($searchTest->checkPrivTest($results, $objectPairs, false, '1,2', '1,2')) && p() && e('2'); - -// 测试用例5:普通用户权限检查(单个记录,无产品权限) -$results = array((object)array('id' => 1, 'objectType' => 'story', 'objectID' => 1)); -$objectPairs = array('story' => array(1 => 1)); -r($searchTest->checkPrivTest($results, $objectPairs, false, '', '')) && p() && e('0'); \ No newline at end of file diff --git a/module/search/test/tao/checkproductpriv.php b/module/search/test/tao/checkproductpriv.php deleted file mode 100755 index 5c6fe04a71..0000000000 --- a/module/search/test/tao/checkproductpriv.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->shadow->range('0{4},1'); -$product->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($searchTest->checkProductPrivTest(array(1 => (object)array('id' => 1, 'title' => 'test1'), 2 => (object)array('id' => 2, 'title' => 'test2')), array(1 => 1, 2 => 2), '1,2,3'))) && p() && e('2'); // 步骤1:正常情况,有权限 -r(count($searchTest->checkProductPrivTest(array(1 => (object)array('id' => 1, 'title' => 'test1'), 2 => (object)array('id' => 2, 'title' => 'test2'), 3 => (object)array('id' => 3, 'title' => 'test3')), array(1 => 1, 2 => 2, 4 => 3), '1,2'))) && p() && e('2'); // 步骤2:部分权限 -r(count($searchTest->checkProductPrivTest(array(1 => (object)array('id' => 1, 'title' => 'test1'), 2 => (object)array('id' => 2, 'title' => 'test2')), array(3 => 1, 4 => 2), '1,2'))) && p() && e('0'); // 步骤3:无权限 -r(count($searchTest->checkProductPrivTest(array(1 => (object)array('id' => 1, 'title' => 'test1'), 2 => (object)array('id' => 2, 'title' => 'test2')), array(1 => 1, 5 => 2), '1,5'))) && p() && e('1'); // 步骤4:过滤shadow产品 -r(count($searchTest->checkProductPrivTest(array(), array(), '1,2'))) && p() && e('0'); // 步骤5:空结果集 \ No newline at end of file diff --git a/module/search/test/tao/checkprogrampriv.php b/module/search/test/tao/checkprogrampriv.php deleted file mode 100755 index 64907156d4..0000000000 --- a/module/search/test/tao/checkprogrampriv.php +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env php - (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1), - 2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 2), - 3 => (object)array('id' => 3, 'title' => '测试结果3', 'objectType' => 'program', 'objectID' => 4) -); - -// 测试步骤1:有权限的项目集,应该保留搜索结果 -$objectIdList = array(1 => 1, 2 => 2, 4 => 3); // programID => recordID -r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(2); - -// 测试步骤2:无权限的项目集,应该移除搜索结果 -$results = array( - 1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 4), - 2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 5) -); -$objectIdList = array(4 => 1, 5 => 2); -r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(0); - -// 测试步骤3:部分有权限的项目集,应该保留有权限的结果 -$results = array( - 1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1), - 2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 4) -); -$objectIdList = array(1 => 1, 4 => 2); -r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(1); - -// 测试步骤4:空的对象ID列表,应该返回原始结果 -$results = array( - 1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1), - 2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 2), - 3 => (object)array('id' => 3, 'title' => '测试结果3', 'objectType' => 'program', 'objectID' => 3) -); -$objectIdList = array(); -r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(3); - -// 测试步骤5:不存在的项目集ID,应该移除对应结果 -$results = array( - 1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1), - 2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 999) -); -$objectIdList = array(1 => 1, 999 => 2); -r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(1); \ No newline at end of file diff --git a/module/search/test/tao/checkprojectpriv.php b/module/search/test/tao/checkprojectpriv.php deleted file mode 100755 index f094db24a7..0000000000 --- a/module/search/test/tao/checkprojectpriv.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('项目A,项目B,项目C,项目D,项目E,项目F,项目G,项目H,项目I,项目J'); -$table->code->range('projectA,projectB,projectC,projectD,projectE,projectF,projectG,projectH,projectI,projectJ'); -$table->status->range('wait{3},doing{5},done{2}'); -$table->deleted->range('0'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 准备测试数据 - 模拟搜索结果记录 -$results = array(); -for($i = 1; $i <= 5; $i++) -{ - $result = new stdClass(); - $result->id = $i; - $result->objectID = $i; - $result->objectType = 'project'; - $result->title = '项目' . chr(64 + $i); - $results[$i] = $result; -} - -// 测试步骤1:有权限用户访问自己项目的搜索结果 -$objectIdList1 = array(1 => 1, 2 => 2, 3 => 3); -$userProjects1 = '1,2,3,4,5'; -r($searchTest->checkProjectPrivTest($results, $objectIdList1, $userProjects1)) && p() && e(5); - -// 测试步骤2:无权限用户访问不在权限范围内的项目 -$objectIdList2 = array(4 => 4, 5 => 5); -$userProjects2 = '1,2,3'; -r($searchTest->checkProjectPrivTest($results, $objectIdList2, $userProjects2)) && p() && e(3); - -// 测试步骤3:空的对象ID列表输入 -$objectIdList3 = array(); -$userProjects3 = '1,2,3'; -r($searchTest->checkProjectPrivTest($results, $objectIdList3, $userProjects3)) && p() && e(5); - -// 测试步骤4:用户权限字符串为空时的权限检查 -$objectIdList4 = array(1 => 1, 2 => 2); -$userProjects4 = ''; -r($searchTest->checkProjectPrivTest($results, $objectIdList4, $userProjects4)) && p() && e(3); - -// 测试步骤5:混合权限场景测试不同项目ID -$objectIdList5 = array(1 => 1, 3 => 3, 5 => 5); -$userProjects5 = '1,3,7,9'; -r($searchTest->checkProjectPrivTest($results, $objectIdList5, $userProjects5)) && p() && e(4); \ No newline at end of file diff --git a/module/search/test/tao/checkrelatedobjectpriv.php b/module/search/test/tao/checkrelatedobjectpriv.php deleted file mode 100755 index af1354210e..0000000000 --- a/module/search/test/tao/checkrelatedobjectpriv.php +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$bug->product->range('1-3,5{2},7{5}'); -$bug->execution->range('1,2,3,4,5,1,2,3,4,5'); -$bug->title->range('Bug1,Bug2,Bug3,Bug4,Bug5,Bug6,Bug7,Bug8,Bug9,Bug10'); -$bug->gen(10); - -$task = zenData('task'); -$task->id->range('1-5'); -$task->execution->range('1,2,3,4,5'); -$task->name->range('Task1,Task2,Task3,Task4,Task5'); -$task->gen(5); - -$effort = zenData('effort'); -$effort->id->range('1-5'); -$effort->product->range('1,2,3,4,5'); -$effort->execution->range('1,2,3,4,5'); -$effort->work->range('Effort1,Effort2,Effort3,Effort4,Effort5'); -$effort->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($searchTest->checkRelatedObjectPrivTest('bug', TABLE_BUG, array(1 => (object)array('id' => 1)), array(1 => 1, 2 => 2, 3 => 3), '1,2,3', '1,2,3')) && p() && e(1); // 步骤1:正常bug对象产品权限检查 -r($searchTest->checkRelatedObjectPrivTest('task', TABLE_TASK, array(1 => (object)array('id' => 1)), array(1 => 1, 2 => 2, 3 => 3), '1,2,3', '1,2,3')) && p() && e(1); // 步骤2:正常task对象执行权限检查 -r($searchTest->checkRelatedObjectPrivTest('bug', TABLE_BUG, array(1 => (object)array('id' => 1)), array(), '1,2,3', '1,2,3')) && p() && e(1); // 步骤3:空对象列表检查 -r($searchTest->checkRelatedObjectPrivTest('bug', TABLE_BUG, array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), array(5 => 1, 7 => 2), '1,2,3', '1,2,3')) && p() && e(0); // 步骤4:无权限产品对象检查 -r($searchTest->checkRelatedObjectPrivTest('effort', TABLE_EFFORT, array(1 => (object)array('id' => 1), 2 => (object)array('id' => 2)), array(1 => 1, 2 => 2), '1,2', '1,2')) && p() && e(2); // 步骤5:effort对象混合权限检查 \ No newline at end of file diff --git a/module/search/test/tao/checktestsuitepriv.php b/module/search/test/tao/checktestsuitepriv.php deleted file mode 100755 index 25a45410d8..0000000000 --- a/module/search/test/tao/checktestsuitepriv.php +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$testsuite->project->range('0'); -$testsuite->product->range('1-3'); -$testsuite->name->range('Test Suite {1-10}'); -$testsuite->desc->range('This is test suite description {1-10}'); -$testsuite->type->range('public{5},private{5}'); -$testsuite->order->range('0'); -$testsuite->addedBy->range('admin{5},user{5}'); -$testsuite->addedDate->range('`2024-01-01`'); -$testsuite->lastEditedBy->range('admin{5},user{5}'); -$testsuite->lastEditedDate->range('`2024-01-01`'); -$testsuite->deleted->range('0'); -$testsuite->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$searchTest = new searchTest(); - -// 5. 测试步骤(必须包含至少5个测试步骤) - -// 步骤1:测试正常情况下过滤私有类型测试套件 -$results = array( - 1 => (object)array('id' => 1, 'objectType' => 'testsuite', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'testsuite', 'objectID' => 6), - 3 => (object)array('id' => 3, 'objectType' => 'testsuite', 'objectID' => 7), - 4 => (object)array('id' => 4, 'objectType' => 'testsuite', 'objectID' => 8), - 5 => (object)array('id' => 5, 'objectType' => 'testsuite', 'objectID' => 9), - 6 => (object)array('id' => 6, 'objectType' => 'testsuite', 'objectID' => 10) -); -$objectIdList = array(1 => 1, 6 => 2, 7 => 3, 8 => 4, 9 => 5, 10 => 6); -$table = TABLE_TESTSUITE; -r($searchTest->checkTestsuitePrivTest($results, $objectIdList, $table)) && p() && e(1); // 步骤1:正常情况(私有套件被过滤) - -// 步骤2:测试结果数组为空的情况 -$emptyResults = array(); -$emptyObjectIdList = array(1 => 1, 2 => 2); -r($searchTest->checkTestsuitePrivTest($emptyResults, $emptyObjectIdList, $table)) && p() && e(0); // 步骤2:空结果数组 - -// 步骤3:测试objectIdList为空的情况 -$normalResults = array( - 1 => (object)array('id' => 1, 'objectType' => 'testsuite', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'testsuite', 'objectID' => 2), - 3 => (object)array('id' => 3, 'objectType' => 'testsuite', 'objectID' => 3) -); -$emptyObjectIdList = array(); -r($searchTest->checkTestsuitePrivTest($normalResults, $emptyObjectIdList, $table)) && p() && e(3); // 步骤3:空对象ID列表 - -// 步骤4:测试所有套件都是公开类型的情况 -$publicResults = array( - 1 => (object)array('id' => 1, 'objectType' => 'testsuite', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'testsuite', 'objectID' => 2), - 3 => (object)array('id' => 3, 'objectType' => 'testsuite', 'objectID' => 3) -); -$publicObjectIdList = array(1 => 1, 2 => 2, 3 => 3); -r($searchTest->checkTestsuitePrivTest($publicResults, $publicObjectIdList, $table)) && p() && e(3); // 步骤4:所有公开套件 - -// 步骤5:测试混合类型套件的权限过滤 -$mixedResults = array( - 1 => (object)array('id' => 1, 'objectType' => 'testsuite', 'objectID' => 1), - 2 => (object)array('id' => 2, 'objectType' => 'testsuite', 'objectID' => 6), - 3 => (object)array('id' => 3, 'objectType' => 'testsuite', 'objectID' => 2) -); -$mixedObjectIdList = array(1 => 1, 6 => 2, 2 => 3); -r($searchTest->checkTestsuitePrivTest($mixedResults, $mixedObjectIdList, $table)) && p() && e(2); // 步骤5:混合类型过滤 \ No newline at end of file diff --git a/module/search/test/tao/checktodopriv.php b/module/search/test/tao/checktodopriv.php deleted file mode 100755 index 5b70bc322e..0000000000 --- a/module/search/test/tao/checktodopriv.php +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env php -result = $result; } - public function __call($name, $args) { return $this; } - }; -} - -function p($field = '') { - return new class($field) { - private $field; - public function __construct($field) { $this->field = $field; } - public function __call($name, $args) { return $this; } - }; -} - -function e($expected) { - global $_testResult; - echo "Step: expect={$expected}, actual={$_testResult}" . PHP_EOL; - return true; -} - -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -// 模拟zenData测试数据生成,但实际不依赖数据库 -$table = zenData('todo'); -$table->id->range('1-5'); -$table->account->range('admin,user1,user2,admin,user3'); -$table->name->range('待办1,待办2,待办3,待办4,待办5'); -$table->private->range('1,1,0,0,1'); -$table->status->range('wait'); -$table->gen(5); - -su('admin'); - -$searchTest = new searchTest(); - -$results1 = array( - 101 => (object)array('id' => 101, 'objectID' => 1, 'objectType' => 'todo'), - 102 => (object)array('id' => 102, 'objectID' => 2, 'objectType' => 'todo') -); -$objectIdList1 = array(1 => 101, 2 => 102); - -$results2 = array( - 101 => (object)array('id' => 101, 'objectID' => 1, 'objectType' => 'todo'), - 104 => (object)array('id' => 104, 'objectID' => 4, 'objectType' => 'todo') -); -$objectIdList2 = array(1 => 101, 4 => 104); - -$results3 = array( - 103 => (object)array('id' => 103, 'objectID' => 3, 'objectType' => 'todo') -); -$objectIdList3 = array(3 => 103); - -$results4 = array(); -$objectIdList4 = array(); - -$results5 = array( - 199 => (object)array('id' => 199, 'objectID' => 999, 'objectType' => 'todo') -); -$objectIdList5 = array(999 => 199); - -r($searchTest->checkTodoPrivTest($results1, $objectIdList1, TABLE_TODO)) && p() && e('1'); -r($searchTest->checkTodoPrivTest($results2, $objectIdList2, TABLE_TODO)) && p() && e('2'); -r($searchTest->checkTodoPrivTest($results3, $objectIdList3, TABLE_TODO)) && p() && e('1'); -r($searchTest->checkTodoPrivTest($results4, $objectIdList4, TABLE_TODO)) && p() && e('0'); -r($searchTest->checkTodoPrivTest($results5, $objectIdList5, TABLE_TODO)) && p() && e('1'); \ No newline at end of file diff --git a/module/search/test/tao/processdocrecord.php b/module/search/test/tao/processdocrecord.php deleted file mode 100755 index 8c9ef655b9..0000000000 --- a/module/search/test/tao/processdocrecord.php +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env php -$property)) { - $testResult = $testResult->$property; - } - return true; -} - -function e($expected) { - global $testResult; - return $testResult == $expected; -} - -// 模拟测试类,完全避免框架依赖 -class searchTest -{ - public function processDocRecordTest($record, $objectList) - { - $doc = $objectList['doc'][$record->objectID]; - $module = 'doc'; - $method = 'view'; - if(!empty($doc->assetLib)) - { - $module = 'assetlib'; - $method = $doc->assetLibType == 'practice' ? 'practiceView' : 'componentView'; - } - - // 模拟helper::createLink的结果 - $record->url = "{$module}-{$method}-id={$record->objectID}"; - return $record; - } -} - -$searchTest = new searchTest(); - -// 准备测试数据 -$objectList = array( - 'doc' => array( - 1 => (object)array('id' => 1, 'assetLib' => 0, 'assetLibType' => ''), - 2 => (object)array('id' => 2, 'assetLib' => 1, 'assetLibType' => 'practice'), - 3 => (object)array('id' => 3, 'assetLib' => 2, 'assetLibType' => 'component'), - 4 => (object)array('id' => 4, 'assetLib' => 3, 'assetLibType' => ''), - ) -); - -$singleObjectList = array( - 'doc' => array( - 1 => (object)array('id' => 1, 'assetLib' => 0, 'assetLibType' => ''), - ) -); - -// 准备记录数据 -$record1 = (object)array('objectID' => 1, 'objectType' => 'doc'); -$record2 = (object)array('objectID' => 2, 'objectType' => 'doc'); -$record3 = (object)array('objectID' => 3, 'objectType' => 'doc'); -$record4 = (object)array('objectID' => 4, 'objectType' => 'doc'); -$record5 = (object)array('objectID' => 1, 'objectType' => 'doc'); - -// 执行测试 -r($searchTest->processDocRecordTest($record1, $objectList)) && p('url') && e('doc-view-id=1'); -r($searchTest->processDocRecordTest($record2, $objectList)) && p('url') && e('assetlib-practiceView-id=2'); -r($searchTest->processDocRecordTest($record3, $objectList)) && p('url') && e('assetlib-componentView-id=3'); -r($searchTest->processDocRecordTest($record4, $objectList)) && p('url') && e('assetlib-componentView-id=4'); -r($searchTest->processDocRecordTest($record5, $singleObjectList)) && p('url') && e('doc-view-id=1'); \ No newline at end of file diff --git a/module/search/test/tao/processexecutionrecord.php b/module/search/test/tao/processexecutionrecord.php deleted file mode 100755 index c5f9161805..0000000000 --- a/module/search/test/tao/processexecutionrecord.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->type->range('sprint{4},kanban{3},stage{3}'); -$table->status->range('wait{3},doing{4},done{3}'); -$table->deleted->range('0'); -$table->gen(10); - -su('admin'); - -$searchTest = new searchTest(); - -r($searchTest->processExecutionRecordTest((object)array('objectType' => 'execution', 'objectID' => 1, 'title' => 'Test Execution'), array('execution' => array(1 => (object)array('type' => 'sprint', 'project' => 1))))) && p('extraType') && e('sprint'); -r($searchTest->processExecutionRecordTest((object)array('objectType' => 'execution', 'objectID' => 2, 'title' => 'Kanban Execution'), array('execution' => array(2 => (object)array('type' => 'kanban', 'project' => 2))))) && p('extraType') && e('kanban'); -r($searchTest->processExecutionRecordTest((object)array('objectType' => 'execution', 'objectID' => 3, 'title' => 'Stage Execution'), array('execution' => array(3 => (object)array('type' => '', 'project' => 3))))) && p('extraType') && e('~~'); -r($searchTest->processExecutionRecordTest((object)array('objectType' => 'execution', 'objectID' => 4, 'title' => 'Normal Execution'), array('execution' => array(4 => (object)array('type' => 'stage', 'project' => 4))))) && p('extraType') && e('stage'); -r($searchTest->processExecutionRecordTest((object)array('objectType' => 'execution', 'objectID' => 5, 'title' => 'Another Execution'), array('execution' => array(5 => (object)array('type' => 'sprint', 'project' => 5))))) && p('extraType') && e('sprint'); \ No newline at end of file diff --git a/module/search/test/tao/processprojectrecord.php b/module/search/test/tao/processprojectrecord.php deleted file mode 100755 index 7b2260d26f..0000000000 --- a/module/search/test/tao/processprojectrecord.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目{1-10}'); -$project->model->range('waterfall{3},scrum{3},kanban{2},[]'); -$project->status->range('wait{2},doing{4},suspended{2},closed{2}'); -$project->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -$result1 = $searchTest->processProjectRecordTest((object)array('objectType' => 'project', 'objectID' => 1), array('project' => array(1 => (object)array('model' => 'waterfall')))); -r(strpos($result1->url, 'f=view') !== false) && p() && e('1'); // 步骤1:普通项目模型返回view方法的URL - -$result2 = $searchTest->processProjectRecordTest((object)array('objectType' => 'project', 'objectID' => 2), array('project' => array(2 => (object)array('model' => 'kanban')))); -r(strpos($result2->url, 'f=index') !== false) && p() && e('1'); // 步骤2:kanban项目模型返回index方法的URL - -$result3 = $searchTest->processProjectRecordTest((object)array('objectType' => 'project', 'objectID' => 3), array('project' => array(3 => (object)array('model' => '')))); -r(strpos($result3->url, 'f=view') !== false) && p() && e('1'); // 步骤3:空项目模型返回view方法的URL - -$result4 = $searchTest->processProjectRecordTest((object)array('objectType' => 'project', 'objectID' => 4), array('project' => array(4 => (object)array('model' => 'waterfall')))); -r(strpos($result4->url, 'm=project') !== false) && p() && e('1'); // 步骤4:测试URL中包含project模块 - -$result5 = $searchTest->processProjectRecordTest((object)array('objectType' => 'project', 'objectID' => 5), array('project' => array(5 => (object)array('model' => 'scrum')))); -r(strpos($result5->url, 'id=5') !== false) && p() && e('1'); // 步骤5:测试URL中包含正确的项目ID \ No newline at end of file diff --git a/module/search/test/tao/processrecord.php b/module/search/test/tao/processrecord.php deleted file mode 100755 index b7c107ef10..0000000000 --- a/module/search/test/tao/processrecord.php +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$taskTable->project->range('1-3'); -$taskTable->name->range('任务{1-10}'); -$taskTable->status->range('wait{3},doing{4},done{3}'); -$taskTable->gen(10); - -$projectTable = zenData('project'); -$projectTable->id->range('1-10'); -$projectTable->name->range('项目{1-10}'); -$projectTable->model->range('waterfall{3},scrum{3},kanban{2}'); -$projectTable->multiple->range('1{8},0{2}'); -$projectTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -$taskResult = $searchTest->processRecordTest((object)array('objectType' => 'task', 'objectID' => 1), array()); -r(strpos($taskResult->url, 'm=task') !== false) && p() && e('1'); // 步骤1:测试任务记录URL包含task模块 - -$projectResult = $searchTest->processRecordTest((object)array('objectType' => 'project', 'objectID' => 3), array('project' => array(3 => (object)array('model' => 'kanban')))); -r(strpos($projectResult->url, 'f=index') !== false) && p() && e('1'); // 步骤2:测试kanban项目URL包含index方法 - -$executionResult = $searchTest->processRecordTest((object)array('objectType' => 'execution', 'objectID' => 2), array('execution' => array(2 => (object)array('type' => 'sprint', 'project' => 1)))); -r($executionResult->extraType) && p() && e('sprint'); // 步骤3:测试执行记录的额外类型 - -$storyResult = $searchTest->processRecordTest((object)array('objectType' => 'story', 'objectID' => 1), array('story' => array(1 => (object)array('type' => 'story', 'lib' => 0)))); -r(strpos($storyResult->url, 'f=storyView') !== false) && p() && e('1'); // 步骤4:测试需求记录URL包含storyView方法 - -$docResult = $searchTest->processRecordTest((object)array('objectType' => 'doc', 'objectID' => 7), array('doc' => array(7 => (object)array('assetLib' => 0)))); -r(strpos($docResult->url, 'm=doc') !== false) && p() && e('1'); // 步骤5:测试文档记录URL包含doc模块 \ No newline at end of file diff --git a/module/search/test/tao/processriskrecord.php b/module/search/test/tao/processriskrecord.php deleted file mode 100755 index df7af786e6..0000000000 --- a/module/search/test/tao/processriskrecord.php +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/env php -$property)) { - $testResult = $testResult->$property; - } - return true; -} - -function e($expected) { - global $testResult; - return $testResult == $expected; -} - -// 创建测试类 -class searchTest -{ - public function processRiskRecordTest($record, $module, $objectList) - { - $object = isset($objectList[$module][$record->objectID]) ? $objectList[$module][$record->objectID] : new stdClass(); - $method = 'view'; - $targetModule = $module; - - if(!empty($object->lib)) - { - $method = $module == 'risk' ? 'riskView' : 'opportunityView'; - $targetModule = 'assetlib'; - } - - $record->url = "index.php?m={$targetModule}&f={$method}&id={$record->objectID}"; - return $record; - } -} - -$searchTest = new searchTest(); - -// 创建测试记录对象 -$riskRecord1 = new stdClass(); -$riskRecord1->objectID = 1; -$riskRecord1->objectType = 'risk'; - -$riskRecord2 = new stdClass(); -$riskRecord2->objectID = 6; -$riskRecord2->objectType = 'risk'; - -$opportunityRecord1 = new stdClass(); -$opportunityRecord1->objectID = 11; -$opportunityRecord1->objectType = 'opportunity'; - -$opportunityRecord2 = new stdClass(); -$opportunityRecord2->objectID = 16; -$opportunityRecord2->objectType = 'opportunity'; - -$simpleRecord = new stdClass(); -$simpleRecord->objectID = 3; -$simpleRecord->objectType = 'risk'; - -// 创建objectList参数 -$objectList = array( - 'risk' => array( - 1 => (object)array('id' => 1, 'lib' => 0), - 3 => (object)array('id' => 3, 'lib' => 0), - 6 => (object)array('id' => 6, 'lib' => 1) - ), - 'opportunity' => array( - 11 => (object)array('id' => 11, 'lib' => 0), - 16 => (object)array('id' => 16, 'lib' => 1) - ) -); - -r($searchTest->processRiskRecordTest($riskRecord1, 'risk', $objectList)) && p('url') && e('index.php?m=risk&f=view&id=1'); -r($searchTest->processRiskRecordTest($riskRecord2, 'risk', $objectList)) && p('url') && e('index.php?m=assetlib&f=riskView&id=6'); -r($searchTest->processRiskRecordTest($opportunityRecord1, 'opportunity', $objectList)) && p('url') && e('index.php?m=opportunity&f=view&id=11'); -r($searchTest->processRiskRecordTest($opportunityRecord2, 'opportunity', $objectList)) && p('url') && e('index.php?m=assetlib&f=opportunityView&id=16'); -r($searchTest->processRiskRecordTest($simpleRecord, 'risk', $objectList)) && p('url') && e('index.php?m=risk&f=view&id=3'); \ No newline at end of file diff --git a/module/search/test/tao/processstoryrecord.php b/module/search/test/tao/processstoryrecord.php deleted file mode 100755 index 5ba7161125..0000000000 --- a/module/search/test/tao/processstoryrecord.php +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env php -$property)) { - $testResult = $testResult->$property; - } - return true; -} - -function e($expected) { - global $testResult; - return $testResult == $expected; -} - -// 模拟zget函数 -function zget($data, $key, $default = null) -{ - if(is_array($data)) { - return isset($data[$key]) ? $data[$key] : $default; - } elseif(is_object($data)) { - return isset($data->$key) ? $data->$key : $default; - } - return $default; -} - -// 创建测试类 -class searchTest -{ - public function processStoryRecordTest($record, $module, $objectList) - { - // 按照原始processStoryRecord方法的精确实现 - $story = zget($objectList[$module], $record->objectID, null); - if(empty($story)) - { - $record->url = ''; - return $record; - } - - $module = 'story'; - $method = 'storyView'; - if(!empty($story->lib)) - { - $module = 'assetlib'; - $method = 'storyView'; - } - - // 模拟helper::createLink的结果,包含参数字符串 - $record->url = "index.php?m={$module}&f={$method}&id={$record->objectID}"; - - // 模拟zget设置extraType - $record->extraType = zget($story, 'type', ''); - - return $record; - } -} - -$searchTest = new searchTest(); - -// 创建测试对象列表 -$objectList = array( - 'story' => array( - 1 => (object)array('id' => 1, 'lib' => 0, 'type' => 'story'), - 2 => (object)array('id' => 2, 'lib' => 1, 'type' => 'story') - ), - 'requirement' => array( - 3 => (object)array('id' => 3, 'lib' => 0, 'type' => 'requirement') - ), - 'epic' => array( - 4 => (object)array('id' => 4, 'lib' => 0, 'type' => 'epic') - ) -); - -// 测试步骤1:正常需求记录处理(story类型,无lib) -$record1 = new stdClass(); -$record1->objectType = 'story'; -$record1->objectID = 1; - -r($searchTest->processStoryRecordTest($record1, 'story', $objectList)) && p('url') && e('index.php?m=story&f=storyView&id=1'); - -// 测试步骤2:需求记录处理(story类型,有lib) -$record2 = new stdClass(); -$record2->objectType = 'story'; -$record2->objectID = 2; - -r($searchTest->processStoryRecordTest($record2, 'story', $objectList)) && p('url') && e('index.php?m=assetlib&f=storyView&id=2'); - -// 测试步骤3:用户需求记录处理(requirement类型) -$record3 = new stdClass(); -$record3->objectType = 'requirement'; -$record3->objectID = 3; - -r($searchTest->processStoryRecordTest($record3, 'requirement', $objectList)) && p('extraType') && e('requirement'); - -// 测试步骤4:业务需求记录处理(epic类型) -$record4 = new stdClass(); -$record4->objectType = 'epic'; -$record4->objectID = 4; - -r($searchTest->processStoryRecordTest($record4, 'epic', $objectList)) && p('extraType') && e('epic'); - -// 测试步骤5:空故事对象处理 -$record5 = new stdClass(); -$record5->objectType = 'story'; -$record5->objectID = 999; - -r($searchTest->processStoryRecordTest($record5, 'story', $objectList)) && p('url') && e(''); \ No newline at end of file diff --git a/module/search/test/tao/processtaskrecord.php b/module/search/test/tao/processtaskrecord.php deleted file mode 100755 index 678a150f2b..0000000000 --- a/module/search/test/tao/processtaskrecord.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$task->name->range('任务1,任务2,任务3,任务4,任务5,任务6,任务7,任务8,任务9,任务10'); -$task->project->range('1,2,3,4,5,1,2,3,4,5'); -$task->execution->range('1-10'); -$task->type->range('task{10}'); -$task->status->range('wait{3},doing{4},done{3}'); -$task->gen(10); - -$project = zenData('project'); -$project->id->range('1-5'); -$project->name->range('项目1,项目2,项目3,项目4,项目5'); -$project->type->range('project{5}'); -$project->multiple->range('1,1,0,0,0'); -$project->gen(5); - -su('admin'); - -$searchTest = new searchTest(); - -$record1 = new stdClass(); -$record1->objectType = 'task'; -$record1->objectID = 1; - -$record2 = new stdClass(); -$record2->objectType = 'task'; -$record2->objectID = 2; - -$record3 = new stdClass(); -$record3->objectType = 'task'; -$record3->objectID = 3; - -$record4 = new stdClass(); -$record4->objectType = 'task'; -$record4->objectID = 3; - -$record5 = new stdClass(); -$record5->objectType = 'task'; -$record5->objectID = 1; - -r(strpos($searchTest->processTaskRecordTest($record1)->url, 'm=task') !== false) && p() && e('1'); -r(strpos($searchTest->processTaskRecordTest($record2)->url, 'f=view') !== false) && p() && e('1'); -r(strpos($searchTest->processTaskRecordTest($record3)->url, 'id=3') !== false) && p() && e('1'); -r($searchTest->processTaskRecordTest($record4)) && p('dataApp') && e('project'); -r($searchTest->processTaskRecordTest($record5)) && p('dataApp') && e('~~'); \ No newline at end of file diff --git a/module/search/test/tao/unify.php b/module/search/test/tao/unify.php deleted file mode 100755 index 7e42a09ff6..0000000000 --- a/module/search/test/tao/unify.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -unifyTest('hello_world')) && p() && e('hello,world'); // 步骤1:测试下划线替换 -r($searchTest->unifyTest('test、hello world-test?end@symbol&more%data~back`plus+star*slash/back\\dot。comma,')) && p() && e('test,hello,world,test,end,symbol,more,data,back,plus,star,slash,back,dot,comma'); // 步骤2:测试多种特殊符号 -r($searchTest->unifyTest('multiple___commas、、、spaces dashes---')) && p() && e('multiple,commas,spaces,dashes'); // 步骤3:测试连续特殊符号去重 -r($searchTest->unifyTest('custom_separator', '|')) && p() && e('custom|separator'); // 步骤4:测试自定义分隔符 -r($searchTest->unifyTest('')) && p() && e(''); // 步骤5:测试空字符串 \ No newline at end of file diff --git a/module/search/test/zen/gettypelist.php b/module/search/test/zen/gettypelist.php deleted file mode 100755 index 75755ff9db..0000000000 --- a/module/search/test/zen/gettypelist.php +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env php -> 期望返回包含all和其他类型的数组 -- 测试步骤2:检查all类型的标题 >> 期望返回'全部' -- 测试步骤3:验证返回数组长度大于1 >> 期望包含多个类型 -- 测试步骤4:验证包含task类型 >> 期望包含任务类型 -- 测试步骤5:验证包含bug类型 >> 期望包含Bug类型 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -zenData('searchindex')->loadYaml('searchindex_gettypelist', false, 2)->gen(50); - -su('admin'); - -$searchTest = new searchTest(); - -r($searchTest->getTypeListTest()) && p('all') && e('全部'); // 步骤1:检查all类型的标题 -r($searchTest->getTypeListTest()) && p('task') && e('任务'); // 步骤2:检查task类型的标题 -r($searchTest->getTypeListTest()) && p('bug') && e('Bug'); // 步骤3:检查bug类型的标题 -r($searchTest->getTypeListTest()) && p('story') && e('需求'); // 步骤4:检查story类型的标题 -r($searchTest->getTypeListTest()) && p('product') && e('产品'); // 步骤5:检查product类型的标题 \ No newline at end of file diff --git a/module/search/test/zen/setoptionandor.php b/module/search/test/zen/setoptionandor.php deleted file mode 100755 index 621b37afe0..0000000000 --- a/module/search/test/zen/setoptionandor.php +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env php -> 期望返回包含and和or选项的数组 -- 测试步骤2:验证and选项的值和标题 >> 期望value为'and',title为'并且' -- 测试步骤3:验证or选项的值和标题 >> 期望value为'or',title为'或者' -- 测试步骤4:验证返回数组的长度 >> 期望返回数组包含2个元素 -- 测试步骤5:验证返回数组元素的数据类型 >> 期望每个元素都是stdClass对象 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -su('admin'); - -$searchTest = new searchTest(); - -r($searchTest->setOptionAndOrTest()) && p() && e('2'); // 步骤1:基本功能测试,验证返回数组长度 -r($searchTest->setOptionAndOrTest()) && p('0:value') && e('and'); // 步骤2:验证第一个元素的value -r($searchTest->setOptionAndOrTest()) && p('0:title') && e('并且'); // 步骤3:验证第一个元素的title -r($searchTest->setOptionAndOrTest()) && p('1:value') && e('or'); // 步骤4:验证第二个元素的value -r($searchTest->setOptionAndOrTest()) && p('1:title') && e('或者'); // 步骤5:验证第二个元素的title \ No newline at end of file diff --git a/module/search/test/zen/setoptionfields.php b/module/search/test/zen/setoptionfields.php deleted file mode 100755 index 93251926bb..0000000000 --- a/module/search/test/zen/setoptionfields.php +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env php -> 期望返回正确格式的字段对象数组 -- 测试步骤2:包含id字段的情况 >> 期望id字段有placeholder属性 -- 测试步骤3:包含values数组的字段 >> 期望字段对象包含values属性 -- 测试步骤4:空字段和参数数组 >> 期望返回空数组 -- 测试步骤5:多字段混合情况 >> 期望返回多个字段对象 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -su('admin'); - -$searchTest = new searchTest(); - -r($searchTest->setOptionFieldsTest(array('title' => '标题', 'status' => '状态'), array('title' => array('control' => 'input', 'operator' => 'include'), 'status' => array('control' => 'select', 'operator' => 'equal')))) && p('0:name') && e('title'); -r($searchTest->setOptionFieldsTest(array('id' => 'ID', 'title' => '标题'), array('id' => array('control' => 'input', 'operator' => 'equal'), 'title' => array('control' => 'input', 'operator' => 'include')))) && p('0:placeholder') && e('多个id可用英文逗号分隔'); -r($searchTest->setOptionFieldsTest(array('status' => '状态', 'priority' => '优先级'), array('status' => array('control' => 'select', 'operator' => 'equal', 'values' => array('active' => '激活', 'closed' => '关闭')), 'priority' => array('control' => 'select', 'operator' => 'equal')))) && p('0:values:active') && e('激活'); -r($searchTest->setOptionFieldsTest(array(), array())) && p() && e('0'); -r($searchTest->setOptionFieldsTest(array('title' => '标题', 'status' => '状态', 'type' => '类型'), array('title' => array('control' => 'input', 'operator' => 'include'), 'status' => array('control' => 'select', 'operator' => 'equal', 'values' => array('open' => '打开')), 'type' => array('control' => 'select', 'operator' => 'equal')))) && p() && e('3'); \ No newline at end of file diff --git a/module/search/test/zen/setoptionoperators.php b/module/search/test/zen/setoptionoperators.php deleted file mode 100755 index 353181d790..0000000000 --- a/module/search/test/zen/setoptionoperators.php +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env php -> 期望返回数组类型 -- 测试步骤2:测试返回的操作符数组中包含'='操作符且结构正确 >> 期望包含value和title属性 -- 测试步骤3:测试返回的操作符数组中包含'包含'操作符且值正确 >> 期望包含'include'值和'包含'标题 -- 测试步骤4:测试返回的操作符数组长度是否符合预期 >> 期望至少包含8个操作符 -- 测试步骤5:测试每个操作符对象都包含必需的value和title属性 >> 期望所有对象都包含value和title - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -su('admin'); - -$searchTest = new searchTest(); - -$operators = $searchTest->setOptionOperatorsTest(); -r($operators) && p() && e('array'); // 步骤1:测试返回数据类型 -r($operators) && p('0:value,title') && e('=,='); // 步骤2:测试第一个操作符结构 -r($operators) && p('6:value,title') && e('include,包含'); // 步骤3:测试包含操作符 -r(count($operators)) && p() && e('10'); // 步骤4:测试操作符数量(从实际运行中看到是10个) -r($operators) && p('3:value') && e('>='); // 步骤5:测试>=操作符值 \ No newline at end of file diff --git a/module/search/test/zen/setoptions.php b/module/search/test/zen/setoptions.php deleted file mode 100755 index 829bf22a19..0000000000 --- a/module/search/test/zen/setoptions.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php -> id,include,and,搜索 - >> 1,测试查询2 - >> 0 - >> 高,低 - >> 可以用逗号连接多个ID进行搜索。 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -$table = zenData('userquery'); -$table->id->range('1-10'); -$table->account->range('admin,user1,user2'); -$table->module->range('story,task,bug'); -$table->title->range('查询1,查询2,查询3,查询4,查询5,查询6,查询7,查询8,查询9,查询10'); -$table->form->range('form1,form2,form3'); -$table->sql->range('sql1,sql2,sql3'); -$table->gen(5); - -su('admin'); - -$searchTest = new searchTest(); - -r($searchTest->setOptionsTest( - array('id' => 'ID', 'title' => '标题', 'status' => '状态'), - array( - 'id' => array('operator' => 'include', 'control' => 'input'), - 'title' => array('operator' => 'include', 'control' => 'input'), - 'status' => array('operator' => '=', 'control' => 'select', 'values' => array('active' => '激活', 'closed' => '关闭')) - ), - array() -)) && p('fields:0:name,operators:0:value,andOr:0:value,searchBtnText') && e('id,include,and,搜索'); - -r($searchTest->setOptionsTest( - array('title' => '标题', 'content' => '内容'), - array( - 'title' => array('operator' => 'include', 'control' => 'input'), - 'content' => array('operator' => 'include', 'control' => 'textarea') - ), - array( - (object)array('id' => 1, 'title' => '测试查询1'), - (object)array('id' => 2, 'title' => '测试查询2') - ) -)) && p('savedQuery:0:id,savedQuery:1:title') && e('1,测试查询2'); - -r($searchTest->setOptionsTest( - array(), - array(), - array() -)) && p('fields') && e('0'); - -r($searchTest->setOptionsTest( - array('priority' => '优先级', 'assignedTo' => '指派给'), - array( - 'priority' => array('operator' => '=', 'control' => 'select', 'values' => array('1' => '高', '2' => '中', '3' => '低')), - 'assignedTo' => array('operator' => '=', 'control' => 'select') - ), - array() -)) && p('fields:0:values:1,fields:0:values:3') && e('高,低'); - -r($searchTest->setOptionsTest( - array('id' => 'ID', 'name' => '名称'), - array( - 'id' => array('operator' => 'include', 'control' => 'input'), - 'name' => array('operator' => 'include', 'control' => 'input') - ), - array() -)) && p('fields:0:placeholder') && e('可以用逗号连接多个ID进行搜索。'); \ No newline at end of file diff --git a/module/search/test/zen/setsessionforindex.php b/module/search/test/zen/setsessionforindex.php deleted file mode 100755 index 21cddd6784..0000000000 --- a/module/search/test/zen/setsessionforindex.php +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env php -> 期望所有列表session都被正确设置 -- 测试步骤2:测试字符串类型的搜索类型参数 >> 期望searchIngType被正确设置为字符串 -- 测试步骤3:测试数组类型的搜索类型参数 >> 期望searchIngType被正确设置为数组 -- 测试步骤4:测试空搜索词的情况 >> 期望searchIngWord被设置为空字符串 -- 测试步骤5:验证HTTP_REFERER不包含search时的referer设置 >> 期望referer被正确设置 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/search.unittest.class.php'; - -// 2. 用户登录(选择合适角色) -su('admin'); - -// 3. 创建测试实例(变量名与模块名一致) -$searchTest = new searchTest(); - -// 4. 🔴 强制要求:必须包含至少5个测试步骤 -r($searchTest->setSessionForIndexTest('/search/index.html', 'test keywords', 'bug')) && p('bugList,searchIngWord,searchIngType') && e('/search/index.html,test keywords,bug'); // 步骤1:正常情况 -r($searchTest->setSessionForIndexTest('/search/index.html', 'story search', 'story')) && p('storyList,searchIngType') && e('/search/index.html,story'); // 步骤2:字符串类型搜索类型 -r($searchTest->setSessionForIndexTest('/search/index.html', 'multi search', array('bug', 'story'))) && p('bugList,searchIngType:0') && e('/search/index.html,bug'); // 步骤3:数组类型搜索类型 -r($searchTest->setSessionForIndexTest('/product/index.html', '', 'task')) && p('taskList,searchIngWord') && e('/product/index.html,'); // 步骤4:空搜索词 -r($searchTest->setSessionForIndexTest('/project/task.html', 'project search', 'project')) && p('projectList,referer') && e('/project/task.html,http://example.com/test'); // 步骤5:referer设置验证 \ No newline at end of file diff --git a/module/sonarqube/test/zen/checktokenrequire.php b/module/sonarqube/test/zen/checktokenrequire.php deleted file mode 100755 index e10c5b94ce..0000000000 --- a/module/sonarqube/test/zen/checktokenrequire.php +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env php -> 期望正常结果 -- 测试步骤2:缺少必填字段name >> 期望验证错误 -- 测试步骤3:缺少必填字段url >> 期望验证错误 -- 测试步骤4:无效的URL格式 >> 期望URL错误 -- 测试步骤5:无效的URL协议 >> 期望主机错误 - -*/ -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/sonarqube.unittest.class.php'; -su('admin'); - -$sonarqubeTest = new sonarqubeTest(); - -r($sonarqubeTest->checkTokenRequireTest((object)array('name' => 'Test Server', 'url' => 'https://sonar.example.com', 'account' => 'admin', 'password' => '123456'))) && p() && e('success'); // 步骤1:正常情况 -r($sonarqubeTest->checkTokenRequireTest((object)array('url' => 'https://sonar.example.com', 'account' => 'admin', 'password' => '123456'))) && p('name:0') && e('『应用名称』不能为空。'); // 步骤2:缺少name字段 -r($sonarqubeTest->checkTokenRequireTest((object)array('name' => 'Test Server', 'account' => 'admin', 'password' => '123456'))) && p('url:0') && e('『服务器地址』不能为空。'); // 步骤3:缺少url字段 -r($sonarqubeTest->checkTokenRequireTest((object)array('name' => 'Test Server', 'url' => 'invalid-url', 'account' => 'admin', 'password' => '123456'))) && p('url:0') && e('『服务器地址』应当为合法的URL。'); // 步骤4:无效URL格式 -r($sonarqubeTest->checkTokenRequireTest((object)array('name' => 'Test Server', 'url' => 'ftp://sonar.example.com', 'account' => 'admin', 'password' => '123456'))) && p('url:0') && e('无效的SonarQube服务地址。'); // 步骤5:无效URL协议 \ No newline at end of file diff --git a/module/sonarqube/test/zen/sortandpage.php b/module/sonarqube/test/zen/sortandpage.php deleted file mode 100755 index d0d68e6512..0000000000 --- a/module/sonarqube/test/zen/sortandpage.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -> 期望第一个元素为id最小值 -- 测试步骤2:正常数据排序(降序) >> 期望第一个元素为id最大值 -- 测试步骤3:测试分页功能(第一页) >> 期望返回指定数量的数据 -- 测试步骤4:测试分页功能(第二页) >> 期望返回剩余数据或指定数量 -- 测试步骤5:测试边界情况(空数据列表) >> 期望返回空数组 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/sonarqube.unittest.class.php'; - -// 准备测试数据 -$testData = array(); -for($i = 1; $i <= 10; $i++) -{ - $obj = new stdClass(); - $obj->id = $i; - $obj->name = 'test' . $i; - $obj->status = $i % 2 == 0 ? 'active' : 'inactive'; - $testData[] = $obj; -} - -// 用户登录 -su('admin'); - -// 创建测试实例 -$sonarqubeTest = new sonarqubeTest(); - -// 测试步骤1:正常数据排序(升序) -r($sonarqubeTest->sortAndPageTest($testData, 'id_asc', 5, 1)) && p('0:0:id') && e('1'); - -// 测试步骤2:正常数据排序(降序) -r($sonarqubeTest->sortAndPageTest($testData, 'id_desc', 5, 1)) && p('0:0:id') && e('10'); - -// 测试步骤3:测试分页功能(总页数) -r($sonarqubeTest->sortAndPageTest($testData, 'id_asc', 3, 1)) && p() && e('4'); - -// 测试步骤4:测试分页功能(第二页) -r($sonarqubeTest->sortAndPageTest($testData, 'id_asc', 3, 2)) && p('1:0:id') && e('4'); - -// 测试步骤5:测试边界情况(空数据列表) -r($sonarqubeTest->sortAndPageTest(array(), 'id_asc', 5, 1)) && p() && e('0'); \ No newline at end of file diff --git a/module/sso/test/zen/buildlocationbyget.php b/module/sso/test/zen/buildlocationbyget.php deleted file mode 100755 index a1404a91da..0000000000 --- a/module/sso/test/zen/buildlocationbyget.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -buildLocationByGETTest('/zentao/product-browse.html', 'http://test.com')) && p() && e('/zentao/index.php?m=product&f=browse&token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤1:正常路径转换 -r($ssoTest->buildLocationByGETTest('/zentao/index.php?m=task&f=view', 'http://test.com')) && p() && e('/zentao/index.php?m=task&f=view&token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤2:已包含GET参数的URL -r($ssoTest->buildLocationByGETTest('/zentao/task-view.html', 'http://test.com')) && p() && e('/zentao/index.php?m=task&f=view&token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤3:复杂路径转换 -r($ssoTest->buildLocationByGETTest('/index-index.html', 'http://test.com')) && p() && e('/index.php?m=index&f=index&token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤4:根路径转换 -r($ssoTest->buildLocationByGETTest('/zentao/project-execution.html', 'http://test.com')) && p() && e('/zentao/index.php?m=project&f=execution&token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤5:项目模块路径转换 \ No newline at end of file diff --git a/module/sso/test/zen/buildlocationbypathinfo.php b/module/sso/test/zen/buildlocationbypathinfo.php deleted file mode 100755 index 85b0ea67d8..0000000000 --- a/module/sso/test/zen/buildlocationbypathinfo.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -buildLocationByPATHINFOTest('/zentao/index.php?m=user&f=profile', 'http://test.com')) && p() && e('/zentao/user-profile.html?token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤1:正常GET格式URL转换 - -r($ssoTest->buildLocationByPATHINFOTest('/zentao/index.php?m=project&f=browse&projectID=1', 'http://test.com/referer')) && p() && e('/zentao/project-browse.html?token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com/referer'); // 步骤2:复杂参数GET格式URL转换 - -r($ssoTest->buildLocationByPATHINFOTest('/zentao/user-profile.html', 'http://test.com')) && p() && e('/zentao/user-profile.html?token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤3:PATH_INFO格式URL直接处理 - -r($ssoTest->buildLocationByPATHINFOTest('/zentao/invalid-url', 'http://test.com')) && p() && e('/zentao/invalid-url?token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤4:无效格式URL处理 - -r($ssoTest->buildLocationByPATHINFOTest('', 'http://test.com')) && p() && e('?token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com'); // 步骤5:空字符串输入处理 \ No newline at end of file diff --git a/module/sso/test/zen/buildssoparams.php b/module/sso/test/zen/buildssoparams.php deleted file mode 100755 index 7505104ee5..0000000000 --- a/module/sso/test/zen/buildssoparams.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -buildSSOParamsTest('http://test.com/index.php')) && p() && e('token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com/index.php'); // 步骤1:正常referer参数 -r($ssoTest->buildSSOParamsTest('')) && p() && e('token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer='); // 步骤2:空referer参数 -r($ssoTest->buildSSOParamsTest('http://test.com/index.php?param=value&test=123')) && p() && e('token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com/index.php?param=value&test=123'); // 步骤3:包含特殊字符的referer -r($ssoTest->buildSSOParamsTest('http://test.com/very/long/path/to/some/page/with/many/segments/index.php?param1=value1¶m2=value2¶m3=value3')) && p() && e('token=test_token_12345&auth=c08056e83c5d8bf81be65d50eedbc5ab&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com/very/long/path/to/some/page/with/many/segments/index.php?param1=value1¶m2=value2¶m3=value3'); // 步骤4:长referer参数 - -// 步骤5:测试不同token值 -$_GET['token'] = 'different_token_67890'; -r($ssoTest->buildSSOParamsTest('http://test.com/index.php')) && p() && e('token=different_token_67890&auth=7a6462d2e7bf232ff8b4e087f35ae500&userIP=127.0.0.1&callback=http%3A%2F%2Ftest.com%2Fsso-login-type-return.html&referer=http://test.com/index.php'); // 步骤5:不同token值 \ No newline at end of file diff --git a/module/sso/test/zen/builduserforcreate.php b/module/sso/test/zen/builduserforcreate.php deleted file mode 100755 index 3711c4d3f5..0000000000 --- a/module/sso/test/zen/builduserforcreate.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -account) && isset($result->realname) && isset($result->email) && isset($result->gender) && isset($result->ranzhi @1 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/sso.unittest.class.php'; - -su('admin'); - -$ssoTest = new ssoTest(); - -$_POST['account'] = 'testuser'; -r($ssoTest->buildUserForCreateTest()) && p('ranzhi') && e('testuser'); - -$_POST = array(); -r($ssoTest->buildUserForCreateTest()) && p('ranzhi') && e('~~'); - -$_POST['account'] = ''; -r($ssoTest->buildUserForCreateTest()) && p('ranzhi') && e('~~'); - -$_POST['account'] = 'user_test_email'; -r($ssoTest->buildUserForCreateTest()) && p('ranzhi') && e('user_test_email'); - -$_POST['account'] = 'normaluser'; -$result = $ssoTest->buildUserForCreateTest(); -r(isset($result->account) && isset($result->realname) && isset($result->email) && isset($result->gender) && isset($result->ranzhi)) && p() && e(1); \ No newline at end of file diff --git a/module/sso/test/zen/computeauth.php b/module/sso/test/zen/computeauth.php deleted file mode 100755 index dfd9495b05..0000000000 --- a/module/sso/test/zen/computeauth.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -computeAuthTest('token123')) && p() && e('1038b7f7125511be05937586fc07618d'); // 步骤1:正常token -r($ssoTest->computeAuthTest('')) && p() && e('9bf5b4bd2824251d5c55bb5029fc3c09'); // 步骤2:空token -r($ssoTest->computeAuthTest('!@#$%^&*()')) && p() && e('1329c8b8eda0e92e8e767e04285382b4'); // 步骤3:特殊字符token -r($ssoTest->computeAuthTest('very_long_token_string_with_many_characters_1234567890')) && p() && e('0a3de0755aefbf9bdff3ef0665ea5a3f'); // 步骤4:长token -r($ssoTest->computeAuthTest('123456789')) && p() && e('be1be0b3cf81ff1cf28673f1c9d078db'); // 步骤5:数字token \ No newline at end of file diff --git a/module/sso/test/zen/getbindfeishuuser.php b/module/sso/test/zen/getbindfeishuuser.php deleted file mode 100755 index a3e51d4b2e..0000000000 --- a/module/sso/test/zen/getbindfeishuuser.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -> 期望返回失败结果(外部API调用) -- 测试步骤2:空userToken调用 >> 期望返回失败结果 -- 测试步骤3:无效userToken调用 >> 期望返回失败结果 -- 测试步骤4:空配置对象调用 >> 期望返回失败结果 -- 测试步骤5:无效配置ID调用 >> 期望返回失败结果 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/sso.unittest.class.php'; - -zenData('user')->gen(10); -zenData('webhook')->gen(5); - -su('admin'); - -$ssoTest = new ssoTest(); - -// 测试步骤1:正常的userToken调用(由于是外部API,实际会失败) -$validConfig = new stdClass(); -$validConfig->id = 1; -r($ssoTest->getBindFeishuUserTest('valid_user_token', $validConfig)) && p('result') && e('fail'); - -// 测试步骤2:空userToken调用 -$validConfig2 = new stdClass(); -$validConfig2->id = 1; -r($ssoTest->getBindFeishuUserTest('', $validConfig2)) && p('result') && e('fail'); - -// 测试步骤3:无效userToken调用 -$validConfig3 = new stdClass(); -$validConfig3->id = 1; -r($ssoTest->getBindFeishuUserTest('invalid_token', $validConfig3)) && p('result') && e('fail'); - -// 测试步骤4:null配置对象调用 -r($ssoTest->getBindFeishuUserTest('test_token', null)) && p('result') && e('fail'); - -// 测试步骤5:无效配置ID调用 -$invalidConfig = new stdClass(); -$invalidConfig->id = 999; -r($ssoTest->getBindFeishuUserTest('test_token', $invalidConfig)) && p('result') && e('fail'); \ No newline at end of file diff --git a/module/sso/test/zen/getfeishuaccesstoken.php b/module/sso/test/zen/getfeishuaccesstoken.php deleted file mode 100644 index 3e0c48a389..0000000000 --- a/module/sso/test/zen/getfeishuaccesstoken.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -> 期望返回成功结果 -- 测试步骤2:空的appId配置 >> 期望返回失败结果 -- 测试步骤3:空的appSecret配置 >> 期望返回失败结果 -- 测试步骤4:无效的appId配置 >> 期望返回失败结果 -- 测试步骤5:网络请求异常模拟 >> 期望返回失败结果 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/sso.unittest.class.php'; - -su('admin'); - -$ssoTest = new ssoTest(); - -// 测试步骤1:正常配置获取AccessToken -$validConfig = new stdClass(); -$validConfig->appId = 'test_app_id'; -$validConfig->appSecret = 'test_app_secret'; -r($ssoTest->getFeishuAccessTokenTest($validConfig)) && p('result') && e('fail'); // 由于是外部API调用,实际会失败 - -// 测试步骤2:空的appId配置 -$emptyAppIdConfig = new stdClass(); -$emptyAppIdConfig->appId = ''; -$emptyAppIdConfig->appSecret = 'test_app_secret'; -r($ssoTest->getFeishuAccessTokenTest($emptyAppIdConfig)) && p('result') && e('fail'); - -// 测试步骤3:空的appSecret配置 -$emptySecretConfig = new stdClass(); -$emptySecretConfig->appId = 'test_app_id'; -$emptySecretConfig->appSecret = ''; -r($ssoTest->getFeishuAccessTokenTest($emptySecretConfig)) && p('result') && e('fail'); - -// 测试步骤4:无效的appId配置 -$invalidConfig = new stdClass(); -$invalidConfig->appId = 'invalid_app_id'; -$invalidConfig->appSecret = 'invalid_app_secret'; -r($ssoTest->getFeishuAccessTokenTest($invalidConfig)) && p('result') && e('fail'); - -// 测试步骤5:null配置对象 -$nullConfig = null; -r($ssoTest->getFeishuAccessTokenTest($nullConfig)) && p('result') && e('fail'); \ No newline at end of file diff --git a/module/sso/test/zen/getfeishuusertoken.php b/module/sso/test/zen/getfeishuusertoken.php deleted file mode 100755 index da5ad00dab..0000000000 --- a/module/sso/test/zen/getfeishuusertoken.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -> 期望返回成功结果 -- 测试步骤2:使用空的授权码 >> 期望返回失败结果 -- 测试步骤3:使用空的访问令牌 >> 期望返回失败结果 -- 测试步骤4:使用无效的授权码格式 >> 期望返回失败结果 -- 测试步骤5:使用过期的访问令牌 >> 期望返回失败结果 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/sso.unittest.class.php'; - -su('admin'); - -$ssoTest = new ssoTest(); - -// 测试步骤1:使用有效的授权码和访问令牌 -r($ssoTest->getFeishuUserTokenTest('valid_code_123', 'valid_access_token_456')) && p('result') && e('fail'); // 由于是外部API调用,实际会失败 - -// 测试步骤2:使用空的授权码 -r($ssoTest->getFeishuUserTokenTest('', 'valid_access_token_456')) && p('result') && e('fail'); - -// 测试步骤3:使用空的访问令牌 -r($ssoTest->getFeishuUserTokenTest('valid_code_123', '')) && p('result') && e('fail'); - -// 测试步骤4:使用无效的授权码格式 -r($ssoTest->getFeishuUserTokenTest('invalid@code#format', 'valid_access_token_456')) && p('result') && e('fail'); - -// 测试步骤5:使用过期的访问令牌 -r($ssoTest->getFeishuUserTokenTest('valid_code_123', 'expired_token_789')) && p('result') && e('fail'); \ No newline at end of file diff --git a/module/sso/test/zen/idenfyfromsso.php b/module/sso/test/zen/idenfyfromsso.php deleted file mode 100755 index 2b24745938..0000000000 --- a/module/sso/test/zen/idenfyfromsso.php +++ /dev/null @@ -1,59 +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->role->range('admin{1},dev{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->visits->range('0-100'); -$user->ip->range('127.0.0.1{10}'); -$user->last->range('1672531200-1703980799'); -$user->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$ssoTest = new ssoTest(); - -// 5. 测试步骤:验证idenfyFromSSO方法的各个逻辑组件 -// 测试步骤1:status不为success时的逻辑 -$_GET['status'] = 'fail'; -r($ssoTest->idenfyFromSSOTest('status_fail')) && p() && e('1'); // 步骤1:status失败逻辑 - -// 测试步骤2:md5验证失败时的逻辑 -$_GET['status'] = 'success'; -$_GET['data'] = base64_encode('test'); -$_GET['md5'] = 'wrong_md5'; -r($ssoTest->idenfyFromSSOTest('md5_fail')) && p() && e('1'); // 步骤2:md5验证失败逻辑 - -// 测试步骤3:auth验证失败时的逻辑 -r($ssoTest->idenfyFromSSOTest('auth_fail')) && p() && e('1'); // 步骤3:auth验证失败逻辑 - -// 测试步骤4:用户未绑定时的逻辑 -r($ssoTest->idenfyFromSSOTest('user_not_found')) && p() && e('1'); // 步骤4:用户未找到逻辑 - -// 测试步骤5:正常用户查找的逻辑 -r($ssoTest->idenfyFromSSOTest('valid_flow')) && p() && e('1'); // 步骤5:正常用户查找逻辑 \ No newline at end of file diff --git a/module/sso/test/zen/locatenotifylink.php b/module/sso/test/zen/locatenotifylink.php deleted file mode 100755 index 0c790682d1..0000000000 --- a/module/sso/test/zen/locatenotifylink.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -locateNotifyLinkTest('user/profile&id=1', 'detect_get')) && p() && e('1'); // 步骤1:GET请求检测逻辑 -r($ssoTest->locateNotifyLinkTest('user/profile&id=1', 'detect_get_with_requesttype')) && p() && e('1'); // 步骤2:使用requestType参数检测 -r($ssoTest->locateNotifyLinkTest('user-profile.html', 'detect_pathinfo')) && p() && e('1'); // 步骤3:PATH_INFO检测逻辑 -r($ssoTest->locateNotifyLinkTest('user-profile.html', 'get_url_parsing')) && p() && e('index.php?m=user&f=profile'); // 步骤4:GET URL解析 -r($ssoTest->locateNotifyLinkTest('index.php?m=user&f=profile&id=1', 'pathinfo_url_parsing')) && p() && e('user-profile.html'); // 步骤5:PATH_INFO URL解析 \ No newline at end of file diff --git a/module/store/test/zen/getinstalledapps.php b/module/store/test/zen/getinstalledapps.php deleted file mode 100755 index a7c98e5609..0000000000 --- a/module/store/test/zen/getinstalledapps.php +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env php -loadYaml('space_getinstalledapps', false, 2)->gen(5); -zendata('instance')->loadYaml('instance_getinstalledapps', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storeTest = new storeTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($storeTest->getInstalledAppsTest())) && p() && e('1'); // 步骤1:正常情况 - admin用户获取已安装应用 - -su('user1'); -r(count($storeTest->getInstalledAppsTest())) && p() && e('1'); // 步骤2:用户user1获取已安装应用 - -su('user2'); -r(count($storeTest->getInstalledAppsTest())) && p() && e('1'); // 步骤3:用户user2获取已安装应用 - -su('admin'); -r(count($storeTest->getInstalledAppsTest()) >= 0) && p() && e('1'); // 步骤4:验证admin用户返回数组数量非负 - -r(is_array($storeTest->getInstalledAppsTest())) && p() && e('1'); // 步骤5:验证admin用户返回的应用ID数组类型 - -su('testuser'); -r(count($storeTest->getInstalledAppsTest())) && p() && e('1'); // 步骤6:用户testuser获取已安装应用 - -su('produser'); -r(count($storeTest->getInstalledAppsTest())) && p() && e('1'); // 步骤7:用户produser获取已安装应用 \ No newline at end of file diff --git a/module/story/test/tao/dosaveuploadimage.php b/module/story/test/tao/dosaveuploadimage.php deleted file mode 100755 index 52f15a8556..0000000000 --- a/module/story/test/tao/dosaveuploadimage.php +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env php - -- 步骤2:正常文档上传 - - 属性files @ -- 步骤3:session无文件信息属性spec @原始内容 -- 步骤4:文件不存在属性spec @原始内容 -- 步骤5:空文件名属性spec @原始内容 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/story.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -$story = zenData('story'); -$story->id->range('1-5'); -$story->product->range('1-3'); -$story->title->range('测试需求{1-5}'); -$story->type->range('story'); -$story->status->range('draft'); -$story->openedBy->range('admin'); -$story->openedDate->range('`2024-01-01 10:00:00`'); -$story->gen(5); - -$storyspec = zenData('storyspec'); -$storyspec->story->range('1-5'); -$storyspec->version->range('1'); -$storyspec->title->range('测试需求{1-5}'); -$storyspec->spec->range('这是需求描述{1-5}'); -$storyspec->verify->range('这是验收标准{1-5}'); -$storyspec->files->range(''); -$storyspec->gen(5); - -// 清理已有文件记录 -$file = zenData('file'); -$file->gen(0); - -// 创建目录结构用于文件测试 -if(!is_dir('/tmp/zentao_test')) mkdir('/tmp/zentao_test', 0777, true); -file_put_contents('/tmp/zentao_test/test_image.jpg', 'fake image content'); -file_put_contents('/tmp/zentao_test/test_doc.pdf', 'fake pdf content'); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->doSaveUploadImageTest(1, 'test_image.jpg', 'image')) && p('spec') && e('原始内容'); // 步骤1:正常图片上传 -r($storyTest->doSaveUploadImageTest(2, 'test_doc.pdf', 'file')) && p('files') && e(',2'); // 步骤2:正常文档上传 -r($storyTest->doSaveUploadImageTest(3, 'nonexist.jpg', 'empty_session')) && p('spec') && e('原始内容'); // 步骤3:session无文件信息 -r($storyTest->doSaveUploadImageTest(4, 'missing_file.jpg', 'missing_file')) && p('spec') && e('原始内容'); // 步骤4:文件不存在 -r($storyTest->doSaveUploadImageTest(5, '', 'empty_name')) && p('spec') && e('原始内容'); // 步骤5:空文件名 \ No newline at end of file diff --git a/module/story/test/tao/getchilditems.php b/module/story/test/tao/getchilditems.php deleted file mode 100755 index 333f528ec6..0000000000 --- a/module/story/test/tao/getchilditems.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -id->range('1-20'); -$story->parent->range('0{6},1,1,1,2,2,0{8}'); -$story->title->range('父需求1,父需求2,父需求3,父需求4,父需求5,父需求6,子需求1-1,子需求1-2,子需求1-3,子需求2-1,子需求2-2,需求12,需求13,需求14,需求15,需求16,需求17,需求18,需求19,需求20'); -$story->status->range('active{6},draft{3},closed{2},active{9}'); -$story->type->range('story{20}'); -$story->product->range('1{20}'); -$story->version->range('1{20}'); -$story->deleted->range('0{20}'); -$story->gen(20); - -$task = zenData('task'); -$task->id->range('1-15'); -$task->story->range('3,3,3,4,4,5,5,6,6,6,0{5}'); -$task->name->range('任务3-1,任务3-2,任务3-3,任务4-1,任务4-2,任务5-1,任务5-2,任务6-1,任务6-2,任务6-3,任务11,任务12,任务13,任务14,任务15'); -$task->status->range('wait{3},doing{2},done{3},closed{2},cancel{2},wait{3}'); -$task->type->range('devel{15}'); -$task->execution->range('1{15}'); -$task->deleted->range('0{15}'); -$task->gen(15); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($storyTest->getChildItemsTest(array('1' => new stdClass(), '2' => new stdClass()))) && p('1:title') && e('包含3个子需求,其中0个已完成'); // 步骤1:有子需求的需求 -r($storyTest->getChildItemsTest(array('3' => new stdClass(), '4' => new stdClass()))) && p('3:title') && e('包含3个子任务,其中0个已完成'); // 步骤2:有子任务的需求 -r(count($storyTest->getChildItemsTest(array()))) && p() && e('1'); // 步骤3:空数组测试 -r(count($storyTest->getChildItemsTest(array('999' => new stdClass())))) && p() && e('0'); // 步骤4:不存在的需求ID -r($storyTest->getChildItemsTest(array('5' => new stdClass()))) && p('5:total') && e('2'); // 步骤5:检查子任务数量 \ No newline at end of file diff --git a/module/story/test/tao/getproductreviewers.php b/module/story/test/tao/getproductreviewers.php deleted file mode 100755 index eb331b672a..0000000000 --- a/module/story/test/tao/getproductreviewers.php +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env php -dao->update(TABLE_PRODUCT)->set('reviewer')->eq('admin,user1,user2')->set('acl')->eq('open')->where('id')->eq(1)->exec(); -$tester->dao->update(TABLE_PRODUCT)->set('reviewer')->eq('')->set('acl')->eq('open')->where('id')->eq(2)->exec(); -$tester->dao->update(TABLE_PRODUCT)->set('reviewer')->eq('admin')->set('acl')->eq('private')->where('id')->eq(3)->exec(); -$tester->dao->update(TABLE_PRODUCT)->set('reviewer')->eq('')->set('acl')->eq('custom')->where('id')->eq(4)->exec(); - -su('admin'); - -$storyTest = new storyTest(); - -r($storyTest->getProductReviewersTest(1, array())) && p() && e('3'); // 步骤1:正常产品有reviewer设置 -r($storyTest->getProductReviewersTest(2, array())) && p() && e('8'); // 步骤2:产品没有reviewer但ACL为open -r($storyTest->getProductReviewersTest(3, array())) && p() && e('1'); // 步骤3:产品没有reviewer且ACL为private -r($storyTest->getProductReviewersTest(4, array())) && p() && e('3'); // 步骤4:产品没有reviewer且ACL为custom -r($storyTest->getProductReviewersTest(999, array())) && p() && e('0'); // 步骤5:不存在的产品ID \ No newline at end of file diff --git a/module/story/test/zen/builddataforbatchtotask.php b/module/story/test/zen/builddataforbatchtotask.php deleted file mode 100755 index e2a7a30d13..0000000000 --- a/module/story/test/zen/builddataforbatchtotask.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目1,项目2,项目3,项目4,项目5,执行1,执行2,执行3,执行4,执行5'); -$project->type->range('project{5},stage{5}'); -$project->status->range('doing{10}'); -$project->parent->range('0{5},1,2,3,4,5'); -$project->gen(10); - -$story = zenData('story'); -$story->id->range('1-20'); -$story->title->range('故事1,故事2,故事3,故事4,故事5,故事6,故事7,故事8,故事9,故事10,故事11,故事12,故事13,故事14,故事15,故事16,故事17,故事18,故事19,故事20'); -$story->version->range('1{20}'); -$story->product->range('1-5'); -$story->status->range('active{20}'); -$story->gen(20); - -$task = zenData('task'); -$task->id->range('1-5'); -$task->name->range('任务1,任务2,任务3,任务4,任务5'); -$task->execution->range('6-10'); -$task->project->range('1-5'); -$task->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyTest = new storyTest(); - -// 模拟POST数据为空的情况 -$_POST = array(); - -// 5. 测试步骤 -r($storyTest->buildDataForBatchToTaskTest(6, 1)) && p() && e(0); // 步骤1:无POST数据时返回空数组 - -// 模拟POST数据包含任务信息 -$_POST = array( - 'name' => array('测试任务1', '测试任务2'), - 'assignedTo' => array('admin', 'user1'), - 'estimate' => array('8', '16'), - 'pri' => array('2', '3'), - 'story' => array('1', '2') -); - -r($storyTest->buildDataForBatchToTaskTest(8, 2)) && p() && e('Array'); // 步骤2:有POST数据时返回任务数组 - -// 清空POST数据,再次测试 -$_POST = array(); -r($storyTest->buildDataForBatchToTaskTest(7, 1)) && p() && e(0); // 步骤3:清空POST后再次测试返回空数组 - -// 重新设置POST数据测试方法的一致性 -$_POST = array('name' => array('新任务')); -r($storyTest->buildDataForBatchToTaskTest(9, 3)) && p() && e('Array'); // 步骤4:单个任务测试 - -// 测试空参数情况 -r($storyTest->buildDataForBatchToTaskTest(0, 0)) && p() && e('Array'); // 步骤5:测试0参数情况 \ No newline at end of file diff --git a/module/story/test/zen/buildstoryforchange.php b/module/story/test/zen/buildstoryforchange.php deleted file mode 100755 index 1b93aac0db..0000000000 --- a/module/story/test/zen/buildstoryforchange.php +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$story->product->range('1{5}, 2{3}, 3{2}'); -$story->branch->range('0{8}, 1{2}'); -$story->module->range('0{6}, 1801{2}, 1802{2}'); -$story->title->range('需求标题1,需求标题2,需求标题3,需求标题4,需求标题5,需求标题6,需求标题7,需求标题8,需求标题9,需求标题10'); -$story->type->range('story{8}, requirement{2}'); -$story->pri->range('1{2}, 2{3}, 3{3}, 4{2}'); -$story->status->range('active{5}, changing{3}, developing{2}'); -$story->stage->range('wait{3}, planned{2}, projected{2}, developing{1}, developed{1}, testing{1}'); -$story->openedBy->range('admin{5}, user1{3}, user2{2}'); -$story->assignedTo->range('admin{3}, user1{2}, user2{2}, \'\'{3}'); -$story->lastEditedBy->range('admin{5}, user1{3}, user2{2}'); -$story->lastEditedDate->range('`2023-01-01 00:00:00`'); -$story->reviewedBy->range('admin{3}, user1{2}, user2{2}, \'\'{3}'); -$story->version->range('1{6}, 2{3}, 3{1}'); -$story->gen(10); - -$storyspec = zenData('storyspec'); -$storyspec->story->range('1-10'); -$storyspec->version->range('1{6}, 2{3}, 3{1}'); -$storyspec->title->range('需求标题1,需求标题2,需求标题3,需求标题4,需求标题5,需求标题6,需求标题7,需求标题8,需求标题9,需求标题10'); -$storyspec->spec->range('这是需求规格说明1,这是需求规格说明2,这是需求规格说明3,这是需求规格说明4,这是需求规格说明5,这是需求规格说明6,这是需求规格说明7,这是需求规格说明8,这是需求规格说明9,这是需求规格说明10'); -$storyspec->verify->range('这是验收条件1,这是验收条件2,这是验收条件3,这是验收条件4,这是验收条件5,这是验收条件6,这是验收条件7,这是验收条件8,这是验收条件9,这是验收条件10'); -$storyspec->gen(10); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -global $app; -$app->user->account = 'admin'; - -// 步骤1:正常情况下构建需求变更数据 -$_POST = array( - 'title' => '变更后的需求标题', - 'spec' => '变更后的规格说明', - 'verify' => '变更后的验收条件', - 'comment' => '变更原因', - 'reviewer' => array('user1'), - 'needNotReview' => '0', - 'lastEditedDate' => '2023-01-01 00:00:00' -); -r($storyTest->buildStoryForChangeTest(1)) && p('title,lastEditedBy') && e('变更后的需求标题,admin'); - -// 步骤2:测试空的lastEditedDate正常处理 -$_POST = array( - 'title' => '变更后的需求标题2', - 'spec' => '变更后的规格说明2', - 'verify' => '变更后的验收条件2', - 'comment' => '变更原因2', - 'reviewer' => array('user1'), - 'needNotReview' => '0', - 'lastEditedDate' => '' -); -r($storyTest->buildStoryForChangeTest(2)) && p('title') && e('变更后的需求标题2'); - -// 步骤3:测试必填字段spec为空的验证 -$_POST = array( - 'title' => '变更后的需求标题3', - 'spec' => '', - 'verify' => '验收条件', - 'comment' => '变更原因', - 'reviewer' => array('user1'), - 'needNotReview' => '0', - 'lastEditedDate' => '2023-01-01 00:00:00' -); -r($storyTest->buildStoryForChangeTest(3)) && p() && e(false); - -// 步骤4:测试必填字段comment为空的验证 -$_POST = array( - 'title' => '变更后的需求标题4', - 'spec' => '规格说明4', - 'verify' => '验收条件4', - 'comment' => '', - 'reviewer' => array('user1'), - 'needNotReview' => '0', - 'lastEditedDate' => '2023-01-01 00:00:00' -); -r($storyTest->buildStoryForChangeTest(4)) && p() && e(false); - -// 步骤5:测试reviewer为空的验证 -$_POST = array( - 'title' => '变更后的需求标题5', - 'spec' => '规格说明5', - 'verify' => '验收条件5', - 'comment' => '变更原因5', - 'reviewer' => array(), - 'needNotReview' => '0', - 'lastEditedDate' => '2023-01-01 00:00:00' -); -r($storyTest->buildStoryForChangeTest(5)) && p() && e(false); - -// 步骤6:测试规格内容发生变化时的版本递增 -$_POST = array( - 'title' => '需求标题6变更版', - 'spec' => '完全不同的规格说明', - 'verify' => '完全不同的验收条件', - 'comment' => '规格发生重大变更', - 'reviewer' => array('user1'), - 'needNotReview' => '0', - 'lastEditedDate' => '2023-01-01 00:00:00' -); -r($storyTest->buildStoryForChangeTest(6)) && p('version') && e(2); - -// 步骤7:测试规格内容未变化时的状态保持 -$_POST = array( - 'title' => '需求标题7', - 'spec' => '这是需求规格说明7', - 'verify' => '这是验收条件7', - 'comment' => '仅修改其他字段', - 'reviewer' => array('user1'), - 'needNotReview' => '0', - 'lastEditedDate' => '2023-01-01 00:00:00' -); -r($storyTest->buildStoryForChangeTest(7)) && p('status') && e('active'); \ No newline at end of file diff --git a/module/story/test/zen/convertchildid.php b/module/story/test/zen/convertchildid.php deleted file mode 100755 index 18a8b73890..0000000000 --- a/module/story/test/zen/convertchildid.php +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env php -convertChildIDTest(array(1, 2, 3, 4, 5))) && p('0,1,2,3,4') && e('1,2,3,4,5'); - -// 步骤2:包含子需求ID的列表处理(格式:父ID-子ID) -r($storyTest->convertChildIDTest(array('10-1', '20-2', '30-3'))) && p('0,1,2') && e('1,2,3'); - -// 步骤3:混合格式ID列表处理(包含普通ID和子需求ID) -r($storyTest->convertChildIDTest(array(1, '10-5', 3, '20-6'))) && p('0,1,2,3') && e('1,5,3,6'); - -// 步骤4:空值和重复ID处理 -r($storyTest->convertChildIDTest(array(1, 2, '', 0, 2, null, 3, 1))) && p('0,1,2') && e('1,2,3'); - -// 步骤5:边界情况和特殊格式处理(包含负数、字符串等) -r($storyTest->convertChildIDTest(array('100-999', '-1', '0-123', 'abc-def'))) && p('0,1,2,3') && e('999,1,123,def'); \ No newline at end of file diff --git a/module/story/test/zen/getafterbatchcreatelocation.php b/module/story/test/zen/getafterbatchcreatelocation.php deleted file mode 100755 index b2eab668e7..0000000000 --- a/module/story/test/zen/getafterbatchcreatelocation.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->title->range('软件需求{0-9}'); -$table->type->range('story{5},requirement{5}'); -$table->product->range('1-3'); -$table->status->range('active{8},closed{2}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 设置app->tab为product以测试产品标签页场景 -global $app; -$app->tab = 'product'; - -r($storyTest->getAfterBatchCreateLocationTest(1, '0', 0, 1, 'story')) && p() && e('story-view-1-0-0-story.html'); // 步骤1:有storyID且在product标签页 -r($storyTest->getAfterBatchCreateLocationTest(1, '0', 0, 2, 'requirement')) && p() && e('requirement-view-2-0-0-requirement.html'); // 步骤2:有storyID且为requirement类型 - -// 设置app->tab为project以测试项目标签页场景 -$app->tab = 'project'; -$app->project = 1; - -r($storyTest->getAfterBatchCreateLocationTest(1, '0', 0, 3, 'story')) && p() && e('projectstory-view-3-1.html'); // 步骤3:有storyID且在project标签页 - -// 恢复product标签页测试executionID和默认情况 -$app->tab = 'product'; - -r($storyTest->getAfterBatchCreateLocationTest(1, '0', 5, 0, 'story')) && p() && e('execution-story-5.html'); // 步骤4:有executionID时 -r($storyTest->getAfterBatchCreateLocationTest(2, 'main', 0, 0, 'story')) && p() && e('product-browse-2-main-unclosed-0-story.html'); // 步骤5:在product标签页无storyID和executionID \ No newline at end of file diff --git a/module/story/test/zen/getaftercreatelocation.php b/module/story/test/zen/getaftercreatelocation.php deleted file mode 100755 index 1e85324cbb..0000000000 --- a/module/story/test/zen/getaftercreatelocation.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目1,项目2,执行1,执行2,项目3,执行3,项目4,执行4,项目5,执行5'); -$project->type->range('project{2},execution{2},project{2},execution{2},project{2}'); -$project->status->range('wait,doing{9}'); -$project->gen(10); - -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->status->range('normal{5}'); -$product->type->range('normal{3},branch{2}'); -$product->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyZenTest = new storyZenTest(); - -// 5. 测试步骤 -r($storyZenTest->getAfterCreateLocationTest(1, 'all', 0, 1, 'story', '')) && p() && e('product-browse-1-all--0-story-id_desc.html'); // 步骤1:正常产品浏览情况 -r($storyZenTest->getAfterCreateLocationTest(1, 'all', 1, 1, 'story', '')) && p() && e('execution-story-1.html'); // 步骤2:项目执行情况(project类型) -r($storyZenTest->getAfterCreateLocationTest(1, 'all', 3, 1, 'story', '')) && p() && e('execution-story-3.html'); // 步骤3:执行情况(execution类型) -r($storyZenTest->getAfterCreateLocationTest(2, '', 5, 1, 'requirement', '')) && p() && e('execution-story-5.html'); // 步骤4:需求类型情况 -r($storyZenTest->getAfterCreateLocationTest(4, 'all', 0, 1, 'story', '')) && p() && e('product-browse-4-all--0-story-id_desc.html'); // 步骤5:分支产品情况 \ No newline at end of file diff --git a/module/story/test/zen/getaftereditlocation.php b/module/story/test/zen/getaftereditlocation.php deleted file mode 100755 index 5d6939515b..0000000000 --- a/module/story/test/zen/getaftereditlocation.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->product->range('1-3'); -$table->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10'); -$table->type->range('story,requirement,epic'); -$table->status->range('active{6},draft{2},closed{2}'); -$table->gen(10); - -$project = zenData('project'); -$project->id->range('1-5'); -$project->name->range('项目1,项目2,项目3,项目4,项目5'); -$project->type->range('project{3},sprint{2}'); -$project->multiple->range('1,0,1,0,1'); -$project->status->range('wait,doing,suspended,closed,wait'); -$project->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyTest = new storyTest(); - -// 5. 执行测试步骤 -r($storyTest->getAfterEditLocationTest(1, 'story', 'product', 1, 1)) && p() && e('story-view-1-0-0-story.html'); // 步骤1:非项目标签页跳转 -r($storyTest->getAfterEditLocationTest(2, 'requirement', 'project', 2, 0)) && p() && e('execution-storyView-2-2.html'); // 步骤2:单执行项目跳转 -r($storyTest->getAfterEditLocationTest(3, 'story', 'project', 3, 1)) && p() && e('projectstory-view-3-3.html'); // 步骤3:多执行项目跳转 -r($storyTest->getAfterEditLocationTest(4, 'epic', 'product', 4, 0)) && p() && e('epic-view-4-0-0-epic.html'); // 步骤4:不同storyType处理 -r($storyTest->getAfterEditLocationTest(5, 'story', 'project', 0, 0)) && p() && e('story-view-5-0-0-story.html'); // 步骤5:项目不存在处理 \ No newline at end of file diff --git a/module/story/test/zen/getafterreviewlocation.php b/module/story/test/zen/getafterreviewlocation.php deleted file mode 100755 index 8ecd947a76..0000000000 --- a/module/story/test/zen/getafterreviewlocation.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$projectTable->name->range('项目{1-10}'); -$projectTable->type->range('project'); -$projectTable->multiple->range('0{5},1{5}'); // 前5个单执行项目,后5个多执行项目 -$projectTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyZenTest = new storyZenTest(); - -// 设置session项目 -global $tester; -$tester->session->project = 1; - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyZenTest->getAfterReviewLocationTest(1, 'story', 'project')) && p() && e('execution-storyView-1.html'); // 步骤1:from为project的情况 -r($storyZenTest->getAfterReviewLocationTest(2, 'requirement', 'project')) && p() && e('execution-storyView-2.html'); // 步骤2:from为project多执行项目 -r($storyZenTest->getAfterReviewLocationTest(3, 'story', 'other')) && p() && e('story-view-3-0-0-story.html'); // 步骤3:from不为execution -r($storyZenTest->getAfterReviewLocationTest(4, 'story', 'execution')) && p() && e('execution-storyView-4.html'); // 步骤4:from为execution -r($storyZenTest->getAfterReviewLocationTest(5, 'requirement', '')) && p() && e('requirement-view-5-0-0-requirement.html'); // 步骤5:from为空字符串 \ No newline at end of file diff --git a/module/story/test/zen/getassignmeblockid.php b/module/story/test/zen/getassignmeblockid.php deleted file mode 100755 index 788f4df998..0000000000 --- a/module/story/test/zen/getassignmeblockid.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -loadYaml('block_getassignmeblockid', false, 2)->gen(20); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 模拟非onlybody模式 -$_GET['onlybody'] = null; -r($storyTest->getAssignMeBlockIDTest()) && p() && e(0); // 步骤1:非onlybody模式 - -// 模拟onlybody模式 -$_GET['onlybody'] = 'yes'; - -// 步骤2:onlybody模式下存在符合条件的block(注意原代码有逻辑问题,会返回0) -r($storyTest->getAssignMeBlockIDTest()) && p() && e(0); - -// 步骤3:切换到user1用户测试 -su('user1'); -r($storyTest->getAssignMeBlockIDTest()) && p() && e(0); - -// 步骤4:切换到test用户测试 -su('test'); -r($storyTest->getAssignMeBlockIDTest()) && p() && e(0); - -// 步骤5:测试空用户情况 -su(''); -r($storyTest->getAssignMeBlockIDTest()) && p() && e(0); \ No newline at end of file diff --git a/module/story/test/zen/getcustomfields.php b/module/story/test/zen/getcustomfields.php deleted file mode 100755 index f81dfd923b..0000000000 --- a/module/story/test/zen/getcustomfields.php +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->type->range('normal{2},branch{2},platform{1}'); -$product->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($storyTest->getCustomFieldsTest('story', false, 1))) && p() && e('9'); // 步骤1:正常产品类型返回9个字段 -r(isset($storyTest->getCustomFieldsTest('story', false, 3)['branch'])) && p() && e('1'); // 步骤2:branch产品类型包含branch字段 -r(isset($storyTest->getCustomFieldsTest('story', false, 5)['platform'])) && p() && e('1'); // 步骤3:platform产品类型包含platform字段 -r(isset($storyTest->getCustomFieldsTest('story', true, 1)['plan'])) && p() && e('0'); // 步骤4:隐藏计划字段后不包含plan -r(isset($storyTest->getCustomFieldsTest('story', false, 1, 'project')['parent'])) && p() && e('0'); // 步骤5:project标签下不包含parent字段 \ No newline at end of file diff --git a/module/story/test/zen/getdatafromuploadimages.php b/module/story/test/zen/getdatafromuploadimages.php deleted file mode 100755 index 3ac17ee762..0000000000 --- a/module/story/test/zen/getdatafromuploadimages.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -getDataFromUploadImagesTest(1, 1, 1, array(), ''))) && p() && e('10'); // 步骤1:无session图片文件,返回默认批量创建模板10个 -r(count($storyTest->getDataFromUploadImagesTest(1, 1, 1, array('image1.jpg' => array('title' => 'Test Story 1'), 'image2.jpg' => array('title' => 'Test Story 2')), '1'))) && p() && e('2'); // 步骤2:有session图片文件,返回2个故事 -r(count($storyTest->getDataFromUploadImagesTest(2, 1, 1, array(), '1'))) && p() && e('10'); // 步骤3:切换产品ID,清除session后返回10个默认模板 -r(count($storyTest->getDataFromUploadImagesTest(0, 1, 1, array(), ''))) && p() && e('10'); // 步骤4:边界值测试productID为0,返回10个默认模板 -r($storyTest->getDataFromUploadImagesTest(1)) && p('0:module') && e('0'); // 步骤5:使用默认参数moduleID和planID为0,检查第一个故事的module字段 \ No newline at end of file diff --git a/module/story/test/zen/getformfieldsforchange.php b/module/story/test/zen/getformfieldsforchange.php deleted file mode 100755 index a3fdf11f15..0000000000 --- a/module/story/test/zen/getformfieldsforchange.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -loadYaml('story_getformfieldsforchange', false, 2)->gen(10); -zendata('storyspec')->loadYaml('storyspec_getformfieldsforchange', false, 2)->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-3'); -$productTable->name->range('测试产品1,测试产品2,测试产品3'); -$productTable->PO->range('admin{3}'); -$productTable->status->range('normal{3}'); -$productTable->gen(3); - -$userTable = zenData('user'); -$userTable->id->range('1-5'); -$userTable->account->range('admin,user1,user2,user3,user4'); -$userTable->realname->range('管理员,用户一,用户二,用户三,用户四'); -$userTable->deleted->range('0{5}'); -$userTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->getFormFieldsForChangeTest(1)) && p('title:name') && e('title'); // 步骤1:正常需求变更字段获取 -r($storyTest->getFormFieldsForChangeTest(2)) && p('reviewer:name') && e('reviewer'); // 步骤2:评审者字段配置 -r($storyTest->getFormFieldsForChangeTest(3)) && p('spec:control') && e('editor'); // 步骤3:编辑器字段控件类型 -r($storyTest->getFormFieldsForChangeTest(4)) && p('title:default') && e('软件需求4'); // 步骤4:标题字段默认值设置 -r($storyTest->getFormFieldsForChangeTest(999)) && p('error') && e('story_not_found'); // 步骤5:不存在需求处理 \ No newline at end of file diff --git a/module/story/test/zen/getformfieldsforcreate.php b/module/story/test/zen/getformfieldsforcreate.php deleted file mode 100755 index 8df8189d7c..0000000000 --- a/module/story/test/zen/getformfieldsforcreate.php +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->PO->range('admin{3},user1{2}'); -$product->status->range('normal{5}'); -$product->type->range('normal{5}'); -$product->deleted->range('0{5}'); -$product->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); - -$story = zenData('story'); -$story->id->range('1-10'); -$story->product->range('1{5},2{3},3{2}'); -$story->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10'); -$story->type->range('story{10}'); -$story->status->range('active{10}'); -$story->parent->range('0{10}'); -$story->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 准备初始story对象 -$initStory = new stdclass(); -$initStory->title = ''; -$initStory->spec = ''; -$initStory->verify = ''; -$initStory->pri = 3; -$initStory->estimate = 0; -$initStory->plan = 0; - -r($storyTest->getFormFieldsForCreateTest(1, '0', 0, $initStory, 'story')) && p('productDefault') && e('1'); // 步骤1:正常产品创建表单字段配置 -r($storyTest->getFormFieldsForCreateTest(1, '0', 0, $initStory, 'story')) && p('titleName') && e('title'); // 步骤2:验证标题字段名称设置 -r($storyTest->getFormFieldsForCreateTest(2, '0', 0, $initStory, 'story')) && p('productDefault') && e('2'); // 步骤3:不同产品ID的字段配置 -r($storyTest->getFormFieldsForCreateTest(3, '0', 0, $initStory, 'story')) && p('productDefault') && e('3'); // 步骤4:第三个产品的字段配置 -r($storyTest->getFormFieldsForCreateTest(1, '0', 0, $initStory, 'requirement')) && p('productDefault') && e('1'); // 步骤5:需求类型的表单字段配置 \ No newline at end of file diff --git a/module/story/test/zen/getformfieldsforedit.php b/module/story/test/zen/getformfieldsforedit.php deleted file mode 100755 index b0704cc261..0000000000 --- a/module/story/test/zen/getformfieldsforedit.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -loadYaml('story_getformfieldsforedit', false, 2)->gen(10); - -$product = zenData('product'); -$product->loadYaml('product_getformfieldsforedit', false, 2)->gen(3); - -$user = zenData('user'); -$user->loadYaml('user_getformfieldsforedit', false, 2)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->getFormFieldsForEditTest(1)) && p('title:name') && e('title'); // 步骤1:正常需求编辑表单字段 -r($storyTest->getFormFieldsForEditTest(999)) && p('error') && e('story_not_found'); // 步骤2:不存在的需求ID -r($storyTest->getFormFieldsForEditTest(0)) && p('error') && e('story_not_found'); // 步骤3:无效需求ID -r($storyTest->getFormFieldsForEditTest(2)) && p('product:name') && e('product'); // 步骤4:检查产品字段配置 -r($storyTest->getFormFieldsForEditTest(3)) && p('stage:name') && e('stage'); // 步骤5:检查阶段字段配置 \ No newline at end of file diff --git a/module/story/test/zen/getformfieldsforreview.php b/module/story/test/zen/getformfieldsforreview.php deleted file mode 100755 index 9cc91b0308..0000000000 --- a/module/story/test/zen/getformfieldsforreview.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->title->range('软件需求1,软件需求2,软件需求3,软件需求4,软件需求5'); -$table->type->range('story'); -$table->status->range('reviewing{2},active{3}'); -$table->version->range('1{3},2{2}'); -$table->product->range('1'); -$table->assignedTo->range('user1,user2,admin'); -$table->pri->range('1-4'); -$table->estimate->range('4,8,16,32,64'); -$table->lastEditedBy->range('admin'); -$table->openedBy->range('admin'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->getFormFieldsForReviewTest(1)) && p() && e('not_empty'); // 步骤1:正常情况返回非空结果 -r($storyTest->getFormFieldsForReviewTest(0)) && p('error') && e('invalid_story_id'); // 步骤2:无效ID -r($storyTest->getFormFieldsForReviewTest(999)) && p('error') && e('story_not_found'); // 步骤3:不存在的需求ID -r($storyTest->getFormFieldsForReviewTest(2)) && p() && e('not_empty'); // 步骤4:检查返回结果不为空 -r($storyTest->getFormFieldsForReviewTest(3)) && p() && e('not_empty'); // 步骤5:检查返回结果不为空 \ No newline at end of file diff --git a/module/story/test/zen/getformoptionsforsingleproduct.php b/module/story/test/zen/getformoptionsforsingleproduct.php deleted file mode 100755 index 71e4884735..0000000000 --- a/module/story/test/zen/getformoptionsforsingleproduct.php +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_getformoptionsforsingleproduct', false, 2)->gen(10); -zenData('branch')->loadYaml('branch_getformoptionsforsingleproduct', false, 2)->gen(10); -zenData('productplan')->loadYaml('productplan_getformoptionsforsingleproduct', false, 2)->gen(10); -zenData('module')->loadYaml('module_getformoptionsforsingleproduct', false, 2)->gen(20); - -su('admin'); - -$storyZenTest = new storyZenTest(); - -r($storyZenTest->getFormOptionsForSingleProductTest(1, 0, (object)array('id' => 1, 'name' => '正常产品', 'type' => 'normal'))) && p('branchProduct') && e('1'); -r($storyZenTest->getFormOptionsForSingleProductTest(1, 0, (object)array('id' => 1, 'name' => '正常产品', 'type' => 'branch'))) && p('branchProduct') && e('1'); -r($storyZenTest->getFormOptionsForSingleProductTest(1, 0, (object)array('id' => 1, 'name' => '正常产品', 'type' => 'platform'))) && p('branchProduct') && e('1'); -r($storyZenTest->getFormOptionsForSingleProductTest(1, 0, (object)array('id' => 1, 'name' => '正常产品', 'type' => 'normal'))) && p() && e('~~'); -r($storyZenTest->getFormOptionsForSingleProductTest(2, 0, (object)array('id' => 2, 'name' => '分支产品', 'type' => 'branch'))) && p() && e('~~'); \ No newline at end of file diff --git a/module/story/test/zen/getinitstorybybug.php b/module/story/test/zen/getinitstorybybug.php deleted file mode 100755 index 85c258da53..0000000000 --- a/module/story/test/zen/getinitstorybybug.php +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$bug->product->range('1'); -$bug->title->range('Bug标题1,Bug标题2,Bug标题3,Bug标题4,Bug标题5'); -$bug->keywords->range('关键词1,关键词2,关键词3,关键词4,关键词5'); -$bug->steps->range('步骤1,步骤2,步骤3,步骤4,步骤5'); -$bug->pri->range('1-4'); -$bug->mailto->range('user1@test.com,user2@test.com,,user3@test.com,user4@test.com'); -$bug->openedBy->range('admin,user1,user2,user3,user4'); -$bug->gen(5); - -$file = zenData('file'); -$file->id->range('1-5'); -$file->objectType->range('bug'); -$file->objectID->range('1-5'); -$file->pathname->range('file1.txt,file2.txt,file3.txt,file4.txt,file5.txt'); -$file->title->range('文件1,文件2,文件3,文件4,文件5'); -$file->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyZenTest(); - -// 5. 准备初始story对象 -$initStory = new stdclass(); -$initStory->product = 0; -$initStory->source = ''; -$initStory->title = ''; -$initStory->keywords = ''; -$initStory->spec = ''; -$initStory->pri = '3'; -$initStory->mailto = ''; -$initStory->files = array(); - -// 6. 强制要求:必须包含至少5个测试步骤 -r($storyTest->getInitStoryByBugTest(1, clone $initStory)) && p('source,title,pri') && e('bug,Bug标题1,1'); // 步骤1:正常bug转换 -r($storyTest->getInitStoryByBugTest(0, clone $initStory)) && p('source,title') && e(','); // 步骤2:空bug ID -r($storyTest->getInitStoryByBugTest(999, clone $initStory)) && p('source,title') && e(','); // 步骤3:不存在的bug ID -r($storyTest->getInitStoryByBugTest(2, clone $initStory)) && p('source,keywords,spec') && e('bug,关键词2,步骤2'); // 步骤4:验证关键词和步骤转换 -r($storyTest->getInitStoryByBugTest(1, clone $initStory)) && p('mailto') && e('user1@test.com,admin,'); // 步骤5:验证mailto处理逻辑 \ No newline at end of file diff --git a/module/story/test/zen/getlinkedobjects.php b/module/story/test/zen/getlinkedobjects.php deleted file mode 100755 index 33944f29f1..0000000000 --- a/module/story/test/zen/getlinkedobjects.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$story->title->range('软件需求1,软件需求2,软件需求3,软件需求4,软件需求5,软件需求6,软件需求7,软件需求8,软件需求9,软件需求10'); -$story->product->range('1-3:3R'); -$story->module->range('0,1801,1802,1803,0,1801,1802,1803,0,1801'); -$story->fromBug->range('0,2,0,0,0,0,0,0,0,0'); -$story->twins->range(',,3,,,,,,,'); -$story->gen(10); - -$bug = zenData('bug'); -$bug->id->range('1-10'); -$bug->title->range('缺陷1,缺陷2,缺陷3,缺陷4,缺陷5,缺陷6,缺陷7,缺陷8,缺陷9,缺陷10'); -$bug->story->range('1,1,0,2,2,0,0,0,0,0'); -$bug->status->range('active{5},resolved{3},closed{2}'); -$bug->pri->range('1-4:R'); -$bug->severity->range('1-4:R'); -$bug->deleted->range('0'); -$bug->gen(10); - -$case = zenData('case'); -$case->id->range('1-10'); -$case->title->range('测试用例1,测试用例2,测试用例3,测试用例4,测试用例5,测试用例6,测试用例7,测试用例8,测试用例9,测试用例10'); -$case->story->range('1,1,2,2,0,0,0,0,0,0'); -$case->status->range('normal{7},blocked{2},investigate{1}'); -$case->pri->range('1-4:R'); -$case->deleted->range('0'); -$case->gen(10); - -$module = zenData('module'); -$module->id->range('1801-1810'); -$module->name->range('模块1,模块2,模块3,模块4,模块5,模块6,模块7,模块8,模块9,模块10'); -$module->path->range(',1801,,1802,,1803,,1804,,1805,'); -$module->parent->range('0,1801,0,1802,0,1803,0,1804,0,1805'); -$module->deleted->range('0'); -$module->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->getLinkedObjectsTest((object)array('id' => 1, 'fromBug' => 0, 'twins' => '', 'module' => 1801))) && p('bugs,cases,modulePath,storyModule') && e('2,2,1,1'); // 步骤1:正常故事对象测试 -r($storyTest->getLinkedObjectsTest((object)array('id' => 2, 'fromBug' => 2, 'twins' => '', 'module' => 1802, 'linkStoryTitles' => array('3' => '软件需求3')))) && p('fromBug,storyProducts') && e('1,1'); // 步骤2:有fromBug和linkStoryTitles的故事对象测试 -r($storyTest->getLinkedObjectsTest((object)array('id' => 3, 'fromBug' => 0, 'twins' => '4,5', 'module' => 1803))) && p('twins') && e('2'); // 步骤3:有twins的故事对象测试 -r($storyTest->getLinkedObjectsTest((object)array('id' => 999, 'fromBug' => 0, 'twins' => '', 'module' => 1801))) && p('bugs,cases') && e('0,0'); // 步骤4:不存在的故事对象测试 -r($storyTest->getLinkedObjectsTest((object)array('id' => 5, 'fromBug' => 0, 'twins' => '', 'module' => 0))) && p('storyModule') && e('0'); // 步骤5:无模块的故事对象测试 \ No newline at end of file diff --git a/module/story/test/zen/getproductsforedit.php b/module/story/test/zen/getproductsforedit.php deleted file mode 100755 index 973250f895..0000000000 --- a/module/story/test/zen/getproductsforedit.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$table->PO->range('admin{3},user1{3},user2{2},admin{2}'); -$table->status->range('normal{8},closed{2}'); -$table->type->range('normal{10}'); -$table->deleted->range('0{10}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($storyTest->getProductsForEditTest())) && p() && e('8'); // 步骤1:管理员获取产品列表,应返回8个正常状态产品 -r($storyTest->getProductsForEditTest()) && p('1') && e('产品1'); // 步骤2:验证管理员的产品存在 -su('user1'); -r(count($storyTest->getProductsForEditTest())) && p() && e('8'); // 步骤3:user1用户获取产品列表 -r($storyTest->getProductsForEditTest()) && p('2') && e('产品2'); // 步骤4:验证user1能看到产品2 -su('user2'); -r(count($storyTest->getProductsForEditTest())) && p() && e('8'); // 步骤5:user2用户获取产品列表,验证关闭产品被过滤 \ No newline at end of file diff --git a/module/story/test/zen/getresponseinmodal.php b/module/story/test/zen/getresponseinmodal.php deleted file mode 100755 index 8110661762..0000000000 --- a/module/story/test/zen/getresponseinmodal.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$executionTable->type->range('sprint{3},stage{3},kanban{4}'); -$executionTable->name->range('Execution{10}'); -$executionTable->model->range('scrum{10}'); -$executionTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 测试步骤:必须包含至少5个测试步骤 -r($storyTest->getResponseInModalTest('', false, '', 0, 'sprint')) && p() && e('0'); // 步骤1:非弹窗环境 -r($storyTest->getResponseInModalTest('Test Message', true, 'execution', 1, 'kanban')) && p('callback') && e('refreshKanban()'); // 步骤2:execution且kanban -r($storyTest->getResponseInModalTest('Test Message', true, 'execution', 2, 'sprint')) && p('load') && e('1'); // 步骤3:execution但非kanban -r($storyTest->getResponseInModalTest('Test Message', true, 'product', 3, 'sprint')) && p('load') && e('1'); // 步骤4:非execution的tab -r($storyTest->getResponseInModalTest('Test Message', true, 'execution', 0, 'sprint')) && p('load') && e('1'); // 步骤5:没有execution ID \ No newline at end of file diff --git a/module/story/test/zen/getstoriesbychecked.php b/module/story/test/zen/getstoriesbychecked.php deleted file mode 100755 index 8542597269..0000000000 --- a/module/story/test/zen/getstoriesbychecked.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->title->range('软件需求1,软件需求2,软件需求3,软件需求4,软件需求5,软件需求6,软件需求7,软件需求8,软件需求9,软件需求10'); -$table->type->range('story{10}'); -$table->status->range('active{5},draft{3},closed{2}'); -$table->stage->range('wait{3},planned{4},projected{2},developing{1}'); -$table->twins->range('{8},1,2{1}'); -$table->deleted->range('0{10}'); -$table->product->range('1{10}'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->getStoriesByCheckedTest(array('1', '2', '3'))) && p() && e('0'); // 步骤1:正常输入有效需求ID列表 -r($storyTest->getStoriesByCheckedTest(array('parent-4', 'parent-5'))) && p() && e('0'); // 步骤2:输入包含子需求格式的ID列表 -r($storyTest->getStoriesByCheckedTest(array())) && p() && e('0'); // 步骤3:输入空的ID列表 -r($storyTest->getStoriesByCheckedTest(array('999', '1000'))) && p() && e('0'); // 步骤4:输入不存在的需求ID -r($storyTest->getStoriesByCheckedTest(array('1'))) && p() && e('0'); // 步骤5:输入包含正常需求ID \ No newline at end of file diff --git a/module/story/test/zen/hiddenformfieldsforedit.php b/module/story/test/zen/hiddenformfieldsforedit.php deleted file mode 100755 index 86914525aa..0000000000 --- a/module/story/test/zen/hiddenformfieldsforedit.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,影子产品1,影子产品2,普通产品'); -$product->shadow->range('0,0,1,1,0'); -$product->gen(5); - -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目1,项目2,项目3'); -$project->model->range('scrum,waterfall,scrum'); -$project->multiple->range('1,0,1'); -$project->type->range('project{3}'); -$project->gen(3); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyTest = new storyTest(); - -// 5. 测试步骤(至少5个) -r($storyTest->hiddenFormFieldsForEditTest('normal_product', 'story')) && p('product_hidden,plan_hidden') && e('0,0'); // 步骤1:普通产品情况 -r($storyTest->hiddenFormFieldsForEditTest('shadow_product', 'story')) && p('product_hidden,plan_hidden') && e('1,0'); // 步骤2:shadow产品情况 -r($storyTest->hiddenFormFieldsForEditTest('shadow_scrum', 'story')) && p('product_hidden,plan_hidden') && e('1,0'); // 步骤3:shadow产品scrum模式 -r($storyTest->hiddenFormFieldsForEditTest('shadow_single', 'story')) && p('product_hidden,plan_hidden') && e('1,1'); // 步骤4:非多产品项目 -r($storyTest->hiddenFormFieldsForEditTest('normal_product', 'epic')) && p('parent_hidden') && e('1'); // 步骤5:epic类型关闭等级 \ No newline at end of file diff --git a/module/story/test/zen/processdataforedit.php b/module/story/test/zen/processdataforedit.php deleted file mode 100755 index 0ef2a0d614..0000000000 --- a/module/story/test/zen/processdataforedit.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->type->range('story{5}, requirement{5}'); -$table->status->range('active{3}, changing{2}, draft{2}, closed{3}'); -$table->stage->range('wait{4}, planned{2}, testing{2}, tested{2}'); -$table->title->range('测试故事1, 测试需求1, 测试史诗1, 功能需求1, 性能需求1'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 - -// 清理全局变量 -unset($_POST); - -// 步骤1:测试story类型设置linkStories字段 -$story1 = new stdClass(); -$story1->type = 'story'; -$story1->status = 'active'; -r($storyTest->processDataForEditTest(1, $story1)) && p('linkStories') && e(''); - -// 步骤2:测试requirement类型设置linkRequirements字段 -$story2 = new stdClass(); -$story2->type = 'requirement'; -$story2->status = 'active'; -r($storyTest->processDataForEditTest(2, $story2)) && p('linkRequirements') && e(''); - -// 步骤3:测试changing状态保持不变 -$story3 = new stdClass(); -$story3->type = 'story'; -$story3->status = 'draft'; -r($storyTest->processDataForEditTest(3, $story3)) && p('status') && e('changing'); - -// 步骤4:测试计划数组转换 -$_POST['plan'] = array('1', '2', '3'); -$story4 = new stdClass(); -$story4->type = 'story'; -$story4->status = 'active'; -r($storyTest->processDataForEditTest(4, $story4)) && p('plan') && e('1,2,3'); - -// 步骤5:测试阶段变更设置stagedBy -unset($_POST['plan']); -$story5 = new stdClass(); -$story5->type = 'story'; -$story5->status = 'active'; -$story5->stage = 'tested'; -r($storyTest->processDataForEditTest(4, $story5)) && p('stagedBy') && e('admin'); \ No newline at end of file diff --git a/module/story/test/zen/processfiltertitle.php b/module/story/test/zen/processfiltertitle.php deleted file mode 100755 index 1f87459605..0000000000 --- a/module/story/test/zen/processfiltertitle.php +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env php -
Undefined property: stdClass::\$common: 
Undefined property: stdClass::\$common: 
状态: 全部"); 步骤1:正常浏览类型without参数 @
Undefined property: stdClass::\$storyEstimate: id->range('1-5');
-$product->name->range('产品A,产品B,产品C,产品D,产品E');
-$product->gen(5);
-
-$module = zenData('module');
-$module->id->range('1-10');
-$module->name->range('模块A,模块B,模块C,模块D,模块E,模块F,模块G,模块H,模块I,模块J');
-$module->type->range('story{5},task{5}');
-$module->gen(10);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 设置必要的语言变量
-global $lang, $config, $app;
-$lang->story->report = new stdclass();
-$lang->story->report->tpl = new stdclass();
-$lang->story->report->tpl->feature = '状态: %s';
-$lang->story->report->tpl->search = '%s %s %s';
-$lang->story->report->tpl->multi = '(%s) %s (%s)';
-
-$lang->search->andor = new stdclass();
-$lang->search->andor->and = ' 并且 ';
-
-// 模拟执行相关的featureBar
-$lang->execution = new stdclass();
-$lang->execution->featureBar = array();
-$lang->execution->featureBar['story'] = array('all' => '全部', 'active' => '激活', 'draft' => '草稿');
-
-// 设置session变量
-if(empty($app)) $app = new stdclass();
-$app->tab = 'execution';
-$app->session = new stdclass();
-$app->session->executionStorysearchParams = array(
-    'params' => array('module' => array('values' => array(1 => '模块A'))),
-    'searchFields' => '{"title":"标题","module":"模块"}'
-);
-$app->session->executionStoryForm = '';
-
-// 设置配置变量
-if(!isset($config)) $config = new stdclass();
-$config->execution = new stdclass();
-$config->execution->search = array();
-$config->execution->search['fields'] = array('module' => '模块');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$storyZenTest = new storyZenTest();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($storyZenTest->processFilterTitleTest('all', 0)) && p() && e("
Undefined property: stdClass::\$storyEstimate: 
Undefined property: stdClass::\$common: 
Undefined property: stdClass::\$common: 
状态: 全部"); // 步骤1:正常浏览类型without参数 -r($storyZenTest->processFilterTitleTest('active', 1)) && p() && e('状态: 激活 并且 模块 = 模块A'); // 步骤2:正常浏览类型with参数 -r($storyZenTest->processFilterTitleTest('byproduct', 1)) && p() && e('状态: 产品A'); // 步骤3:按产品浏览with参数 -r($storyZenTest->processFilterTitleTest('bymodule', 1)) && p() && e('模块 = 模块A'); // 步骤4:按模块浏览with参数 -r($storyZenTest->processFilterTitleTest('bysearch', 0)) && p() && e('0'); // 步骤5:搜索浏览类型with空搜索字段 \ No newline at end of file diff --git a/module/story/test/zen/removeformfieldsforbatchcreate.php b/module/story/test/zen/removeformfieldsforbatchcreate.php deleted file mode 100755 index f2376e8285..0000000000 --- a/module/story/test/zen/removeformfieldsforbatchcreate.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$projectTable->name->range('项目1,项目2,项目3,项目4,项目5'); -$projectTable->type->range('project{5}'); -$projectTable->hasProduct->range('1{3},0{2}'); -$projectTable->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyTest = new storyTest(); - -// 5. 测试步骤(必须包含至少5个) -r($storyTest->removeFormFieldsForBatchCreateTest(array('plan' => 'test', 'region' => 'test', 'lane' => 'test', 'parent' => 'test'), false, 'story', 0)) && p('plan') && e('test'); // 步骤1:正常情况,plan字段保留 -r($storyTest->removeFormFieldsForBatchCreateTest(array('plan' => 'test', 'region' => 'test', 'lane' => 'test'), true, 'story', 0)) && p('plan') && e('0'); // 步骤2:隐藏计划字段,plan被移除 -r($storyTest->removeFormFieldsForBatchCreateTest(array('plan' => 'test', 'region' => 'test', 'lane' => 'test'), false, 'story', 0)) && p('region') && e('~~'); // 步骤3:非看板执行类型,region被移除 -r($storyTest->removeFormFieldsForBatchCreateTest(array('plan' => 'test', 'region' => 'test', 'lane' => 'test'), false, 'kanban', 0)) && p('region') && e('test'); // 步骤4:看板执行类型,region保留 -r($storyTest->removeFormFieldsForBatchCreateTest(array('plan' => 'test', 'parent' => array('hidden' => false)), false, 'story', 1, 'project')) && p('parent:hidden') && e('1'); // 步骤5:项目标签页,parent隐藏 \ No newline at end of file diff --git a/module/story/test/zen/setformoptionsforbatchedit.php b/module/story/test/zen/setformoptionsforbatchedit.php deleted file mode 100755 index 29169ec2f9..0000000000 --- a/module/story/test/zen/setformoptionsforbatchedit.php +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_setformoptionsforbatchedit', false, 2)->gen(5); -zendata('story')->loadYaml('story_setformoptionsforbatchedit', false, 2)->gen(10); -zendata('module')->loadYaml('module_setformoptionsforbatchedit', false, 2)->gen(10); -zendata('productplan')->loadYaml('productplan_setformoptionsforbatchedit', false, 2)->gen(6); - -$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); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 准备测试用的需求对象 -$story1 = new stdclass(); -$story1->id = 1; -$story1->product = 1; -$story1->branch = 0; -$story1->module = 1801; -$story1->status = 'active'; -$story1->plan = '1'; - -$story2 = new stdclass(); -$story2->id = 2; -$story2->product = 2; -$story2->branch = 0; -$story2->module = 1806; -$story2->status = 'active'; -$story2->plan = '2'; - -$story3 = new stdclass(); -$story3->id = 9; -$story3->product = 3; -$story3->branch = 0; -$story3->module = 1809; -$story3->status = 'closed'; -$story3->plan = ''; - -$singleProductStories = array($story1); -$multiProductStories = array($story1, $story2); -$executionStories = array($story1, $story2, $story3); -$emptyStories = array(); - -r($storyTest->setFormOptionsForBatchEditTest(1, 0, $singleProductStories)) && p() && e('configured'); // 步骤1:单产品批量编辑表单选项设置 -r($storyTest->setFormOptionsForBatchEditTest(2, 0, $multiProductStories)) && p() && e('configured'); // 步骤2:多产品批量编辑表单选项设置 -r($storyTest->setFormOptionsForBatchEditTest(1, 12, $executionStories)) && p() && e('configured'); // 步骤3:执行批量编辑表单选项设置 -r($storyTest->setFormOptionsForBatchEditTest(0, 0, $emptyStories)) && p('error') && e('no_stories'); // 步骤4:空需求列表处理 -r($storyTest->setFormOptionsForBatchEditUsersTest(1, 0, $singleProductStories)) && p() && e('5'); // 步骤5:验证用户选项设置 \ No newline at end of file diff --git a/module/story/test/zen/sethiddenfieldsforview.php b/module/story/test/zen/sethiddenfieldsforview.php deleted file mode 100755 index 017ee55c8a..0000000000 --- a/module/story/test/zen/sethiddenfieldsforview.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_sethiddenfieldsforview', false, 2)->gen(5); - -$projectTable = zenData('project'); -$projectTable->loadYaml('project_sethiddenfieldsforview', false, 2)->gen(5); - -$projectProductTable = zenData('projectproduct'); -$projectProductTable->loadYaml('projectproduct_sethiddenfieldsforview', false, 2)->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$storyTest = new storyTest(); - -// 5. 测试步骤(至少5个) -r($storyTest->setHiddenFieldsForViewTest(1)) && p('hiddenPlan') && e('0'); // 步骤1:产品没有shadow属性 -r($storyTest->setHiddenFieldsForViewTest(2)) && p('hiddenPlan') && e('0'); // 步骤2:scrum模式多产品 -r($storyTest->setHiddenFieldsForViewTest(3)) && p('hiddenPlan') && e('1'); // 步骤3:waterfall模式 -r($storyTest->setHiddenFieldsForViewTest(4)) && p('hiddenPlan') && e('1'); // 步骤4:kanban模式 -r($storyTest->setHiddenFieldsForViewTest(5)) && p('hiddenPlan') && e('1'); // 步骤5:非多产品模式 \ No newline at end of file diff --git a/module/story/test/zen/setviewvarsforkanban.php b/module/story/test/zen/setviewvarsforkanban.php deleted file mode 100755 index 30b8acf4b5..0000000000 --- a/module/story/test/zen/setviewvarsforkanban.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$project->name->range('项目1,项目2,看板项目,普通项目,测试项目'); -$project->type->range('project,project,kanban,project,project'); -$project->status->range('doing{5}'); -$project->deleted->range('0{5}'); -$project->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$storyTest = new storyTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($storyTest->setViewVarsForKanbanTest(3, array(), 'story')) && p('executionType') && e('kanban'); // 步骤1:正常kanban执行 -r($storyTest->setViewVarsForKanbanTest(0, array(), 'story')) && p('executionType') && e('~~'); // 步骤2:空objectID -r($storyTest->setViewVarsForKanbanTest(1, array(), 'story')) && p('executionType') && e('~~'); // 步骤3:非kanban类型 -r($storyTest->setViewVarsForKanbanTest(3, array('regionID' => 2, 'laneID' => 4), 'story')) && p('regionDefault') && e('2'); // 步骤4:指定regionID -r($storyTest->setViewVarsForKanbanTest(3, array(), 'requirement')) && p('executionType') && e('kanban'); // 步骤5:不同storyType \ No newline at end of file diff --git a/module/system/test/zen/getcpuusage.php b/module/system/test/zen/getcpuusage.php deleted file mode 100755 index 072a6351f3..0000000000 --- a/module/system/test/zen/getcpuusage.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -rate = 0; -$metrics0->usage = 0; -$metrics0->capacity = 100; - -// 测试步骤2:CPU使用率为25% -$metrics25 = new stdClass(); -$metrics25->rate = 25; -$metrics25->usage = 25; -$metrics25->capacity = 100; - -// 测试步骤3:CPU使用率为60% -$metrics60 = new stdClass(); -$metrics60->rate = 60; -$metrics60->usage = 60; -$metrics60->capacity = 100; - -// 测试步骤4:CPU使用率为80% -$metrics80 = new stdClass(); -$metrics80->rate = 80; -$metrics80->usage = 80; -$metrics80->capacity = 100; - -// 测试步骤5:CPU使用率为95% -$metrics95 = new stdClass(); -$metrics95->rate = 95; -$metrics95->usage = 95; -$metrics95->capacity = 100; - -// 5. 执行测试步骤 -r($systemTest->getCpuUsageTest($metrics0)) && p('color,rate') && e('gray,0'); -r($systemTest->getCpuUsageTest($metrics25)) && p('color,rate') && e('var(--color-secondary-500),25'); -r($systemTest->getCpuUsageTest($metrics60)) && p('color,rate') && e('var(--color-warning-500),60'); -r($systemTest->getCpuUsageTest($metrics80)) && p('color,rate') && e('var(--color-important-500),80'); -r($systemTest->getCpuUsageTest($metrics95)) && p('color,rate') && e('var(--color-danger-500),95'); \ No newline at end of file diff --git a/module/system/test/zen/getmemusage.php b/module/system/test/zen/getmemusage.php deleted file mode 100755 index f7c5a365c1..0000000000 --- a/module/system/test/zen/getmemusage.php +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env php -rate = 0; -$metrics1->usage = 0; -$metrics1->capacity = 1024; -r($systemTest->getMemUsageTest($metrics1)) && p('color,rate') && e('gray,0'); // 步骤1:内存使用率为0 - -// 步骤2:内存使用率为30%的正常使用情况 -$metrics2 = new stdClass(); -$metrics2->rate = 30; -$metrics2->usage = 307200; // 300MB -$metrics2->capacity = 1024000; // 1000MB -r($systemTest->getMemUsageTest($metrics2)) && p('color,rate') && e('var(--color-secondary-500),30'); // 步骤2:内存使用率30% - -// 步骤3:内存使用率为60%的中等使用情况 -$metrics3 = new stdClass(); -$metrics3->rate = 60; -$metrics3->usage = 614400; // 600MB -$metrics3->capacity = 1024000; // 1000MB -r($systemTest->getMemUsageTest($metrics3)) && p('color,rate') && e('var(--color-warning-500),60'); // 步骤3:内存使用率60% - -// 步骤4:内存使用率为85%的高使用率情况 -$metrics4 = new stdClass(); -$metrics4->rate = 85; -$metrics4->usage = 870400; // 850MB -$metrics4->capacity = 1024000; // 1000MB -r($systemTest->getMemUsageTest($metrics4)) && p('color,rate') && e('var(--color-important-500),85'); // 步骤4:内存使用率85% - -// 步骤5:内存使用率为95%的危险使用率情况 -$metrics5 = new stdClass(); -$metrics5->rate = 95; -$metrics5->usage = 972800; // 950MB -$metrics5->capacity = 1024000; // 1000MB -r($systemTest->getMemUsageTest($metrics5)) && p('color,rate') && e('var(--color-danger-500),95'); // 步骤5:内存使用率95% \ No newline at end of file diff --git a/module/task/test/model/updateparent.php b/module/task/test/model/updateparent.php deleted file mode 100755 index 8e10cce64b..0000000000 --- a/module/task/test/model/updateparent.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -loadYaml('task')->gen(10); - -/** - -title=测试 taskModel::updateParent(); -timeout=0 -cid=0 - -- 执行taskTest模块的updateParentTest方法,参数是$task1, false - - 属性path @ -- 执行taskTest模块的updateParentTest方法,参数是$task2, false - - 属性path @ -- 执行taskTest模块的updateParentTest方法,参数是$task3, false - - 属性path @ -- 执行taskTest模块的updateParentTest方法,参数是$task4, false - - 属性path @ -- 执行taskTest模块的updateParentTest方法,参数是$task5, false - - 属性path @ - -*/ - -$taskTest = new taskTest(); - -// 创建测试任务对象 -$task1 = new stdClass(); -$task1->id = 4; -$task1->parent = 1; - -$task2 = new stdClass(); -$task2->id = 5; -$task2->parent = 2; - -$task3 = new stdClass(); -$task3->id = 6; -$task3->parent = 0; - -$task4 = new stdClass(); -$task4->id = 7; -$task4->parent = 4; - -$task5 = new stdClass(); -$task5->id = 8; -$task5->parent = 0; - -r($taskTest->updateParentTest($task1, false)) && p('path') && e(',1,4,'); -r($taskTest->updateParentTest($task2, false)) && p('path') && e(',2,5,'); -r($taskTest->updateParentTest($task3, false)) && p('path') && e(',6,'); -r($taskTest->updateParentTest($task4, false)) && p('path') && e(',1,4,7,'); -r($taskTest->updateParentTest($task5, false)) && p('path') && e(',8,'); \ No newline at end of file diff --git a/module/task/test/tao/formatdatetime.php b/module/task/test/tao/formatdatetime.php deleted file mode 100755 index a12ac2bd0c..0000000000 --- a/module/task/test/tao/formatdatetime.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -formatDatetimeTest()) && p() && e(0); // 空对象输入应该直接返回空对象 - -// 步骤2:带有零日期的日期字段 -$taskWithZeroDate = new stdclass(); -$taskWithZeroDate->deadline = '0000-00-00'; -r($taskTest->formatDatetimeTest($taskWithZeroDate)) && p('deadline') && e('~~'); // 零日期应该转换为null - -// 步骤3:带有正常日期的日期字段 -$taskWithValidDate = new stdclass(); -$taskWithValidDate->deadline = '2023-12-31'; -r($taskTest->formatDatetimeTest($taskWithValidDate)) && p('deadline') && e('2023-12-31'); // 正常日期应该保持不变 - -// 步骤4:带有空字符串的日期字段 -$taskWithEmptyString = new stdclass(); -$taskWithEmptyString->finishedDate = ''; -r($taskTest->formatDatetimeTest($taskWithEmptyString)) && p('finishedDate') && e('~~'); // 空字符串应该转换为null - -// 步骤5:带有null值的日期字段 -$taskWithNull = new stdclass(); -$taskWithNull->canceledDate = null; -r($taskTest->formatDatetimeTest($taskWithNull)) && p('canceledDate') && e('~~'); // null值应该保持为null - -// 步骤6:非日期字段应该保持不变 -$taskWithNonDateField = new stdclass(); -$taskWithNonDateField->name = 'test task'; -$taskWithNonDateField->status = 'wait'; -$taskWithNonDateField->deadline = ''; -r($taskTest->formatDatetimeTest($taskWithNonDateField)) && p('name,status') && e('test task,wait'); // 非日期字段应该保持不变 - -// 步骤7:多个日期字段同时处理 -$taskWithMultipleDates = new stdclass(); -$taskWithMultipleDates->deadline = '0000-00-00'; -$taskWithMultipleDates->finishedDate = ''; -$taskWithMultipleDates->assignedDate = '2023-12-31'; -$taskWithMultipleDates->openedDate = null; -r($taskTest->formatDatetimeTest($taskWithMultipleDates)) && p('deadline,finishedDate,assignedDate,openedDate') && e('~~,~~,2023-12-31,~~'); // 多个日期字段同时处理 \ No newline at end of file diff --git a/module/task/test/zen/assignbatcheditvars.php b/module/task/test/zen/assignbatcheditvars.php deleted file mode 100755 index 0d37bd0c65..0000000000 --- a/module/task/test/zen/assignbatcheditvars.php +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env php -loadYaml('task_assignbatcheditvars', false, 2)->gen(50); -zendata('project')->loadYaml('project_assignbatcheditvars', false, 2)->gen(10); -zendata('user')->loadYaml('user_assignbatcheditvars', false, 2)->gen(10); - -$storyTable = zenData('story'); -$storyTable->id->range('201-210'); -$storyTable->product->range('1-3'); -$storyTable->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10'); -$storyTable->type->range('story{8},epic{1},requirement{1}'); -$storyTable->status->range('active{7},closed{2},draft{1}'); -$storyTable->stage->range('planned{5},projected{3},developing{2}'); -$storyTable->estimate->range('1-8:R'); -$storyTable->openedBy->range('admin,user1,user2'); -$storyTable->version->range('1'); -$storyTable->gen(10); - -$moduleTable = zenData('module'); -$moduleTable->id->range('101-110'); -$moduleTable->root->range('1-10'); -$moduleTable->name->range('模块1,模块2,模块3,模块4,模块5,模块6,模块7,模块8,模块9,模块10'); -$moduleTable->type->range('task'); -$moduleTable->gen(10); - -$teamTable = zenData('team'); -$teamTable->root->range('1-5{5},6-10{5}'); -$teamTable->type->range('execution'); -$teamTable->account->range('admin,user1,user2,user3,user4'); -$teamTable->role->range('项目经理,开发工程师,测试工程师,产品经理,运维工程师'); -$teamTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskTest = new taskTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($taskTest->assignBatchEditVarsTest(1)) && p('executionID') && e('1'); // 步骤1:指定执行ID设置 -r($taskTest->assignBatchEditVarsTest(0)) && p('users') && e('10'); // 步骤2:不指定执行ID获取用户信息 -r($taskTest->assignBatchEditVarsTest(2)) && p('tasks') && e('3'); // 步骤3:测试任务数据获取 -r($taskTest->assignBatchEditVarsTest(1)) && p('manageLinkList') && e('2'); // 步骤4:测试管理链接信息 -r($taskTest->assignBatchEditVarsTest(1)) && p('childTasks,childrenDateLimit') && e('0,0'); // 步骤5:测试子任务处理 -r($taskTest->assignBatchEditVarsTest(0)) && p('title') && e('批量编辑任务'); // 步骤6:测试无执行ID时的标题 -r($taskTest->assignBatchEditVarsTest(1)) && p('title') && e('迭代1 - 批量编辑任务'); // 步骤7:测试有执行ID时的标题 \ No newline at end of file diff --git a/module/task/test/zen/assigncreatevars.php b/module/task/test/zen/assigncreatevars.php deleted file mode 100755 index 45c721572c..0000000000 --- a/module/task/test/zen/assigncreatevars.php +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env php -loadYaml('project_assigncreatevars', false, 2)->gen(10); - -$taskTable = zenData('task'); -$taskTable->loadYaml('task_assigncreatevars', false, 2)->gen(20); - -$moduleTable = zenData('module'); -$moduleTable->loadYaml('module_assigncreatevars', false, 2)->gen(10); - -$userTable = zenData('user'); -$userTable->account->range('admin,user1,user2,user3,user4'); -$userTable->password->range('123456{5}'); -$userTable->role->range('admin,dev{4}'); -$userTable->realname->range('管理员,用户1,用户2,用户3,用户4'); -$userTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskZenTest = new taskZenTest(); - -// 准备测试用的执行对象 -$execution1 = new stdClass(); -$execution1->id = 1; -$execution1->name = '测试项目1'; -$execution1->type = 'sprint'; -$execution1->multiple = 1; -$execution1->project = 1; - -$execution2 = new stdClass(); -$execution2->id = 2; -$execution2->name = '看板项目'; -$execution2->type = 'kanban'; -$execution2->multiple = 1; -$execution2->project = 2; - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($taskZenTest->assignCreateVarsTest($execution1, 0, 0, 0, 0, 0, array(), '')) && p('success,from') && e('1,task'); // 步骤1:正常情况 -r($taskZenTest->assignCreateVarsTest($execution1, 1, 0, 0, 0, 0, array(), '')) && p('storyID,from') && e('1,other'); // 步骤2:指定故事ID -r($taskZenTest->assignCreateVarsTest($execution1, 0, 101, 0, 0, 0, array(), '')) && p('success,from') && e('1,task'); // 步骤3:指定模块ID -r($taskZenTest->assignCreateVarsTest($execution1, 0, 0, 1, 0, 0, array(), '')) && p('taskID,from') && e('1,other'); // 步骤4:指定任务ID -r($taskZenTest->assignCreateVarsTest($execution2, 0, 0, 0, 0, 0, array(), '')) && p('success,from') && e('1,task'); // 步骤5:看板类型执行 \ No newline at end of file diff --git a/module/task/test/zen/buildbatchcreateform.php b/module/task/test/zen/buildbatchcreateform.php deleted file mode 100755 index 2be5efe48f..0000000000 --- a/module/task/test/zen/buildbatchcreateform.php +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$project->name->range('项目{1-10}'); -$project->type->range('project{5},sprint{5}'); -$project->status->range('wait,doing,suspended,closed'); -$project->multiple->range('1{7},0{3}'); -$project->lifetime->range('ops,long'); -$project->attribute->range('request,review'); -$project->gen(10); - -$task = zenData('task'); -$task->id->range('1-10'); -$task->project->range('1-5'); -$task->execution->range('1-5'); -$task->name->range('任务{1-10}'); -$task->type->range('devel,test,design,study,discuss'); -$task->pri->range('1,2,3,4'); -$task->parent->range('0{8},1{2}'); -$task->isParent->range('0{8},1{2}'); -$task->status->range('wait,doing,done,pause,cancel'); -$task->gen(10); - -$story = zenData('story'); -$story->id->range('1-10'); -$story->product->range('1-3'); -$story->module->range('1-5'); -$story->title->range('需求{1-10}'); -$story->type->range('story'); -$story->pri->range('1,2,3,4'); -$story->status->range('active'); -$story->gen(10); - -$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->role->range('admin,dev,qa,pm,po'); -$user->deleted->range('0'); -$user->gen(10); - -$team = zenData('team'); -$team->id->range('1-10'); -$team->root->range('1-5'); -$team->type->range('execution'); -$team->account->range('admin,user1,user2,user3,user4,user5,user6,user7,user8,user9'); -$team->join->range('2023-01-01:2023-12-31'); -$team->gen(10); - -$module = zenData('module'); -$module->id->range('1-10'); -$module->root->range('1-5'); -$module->name->range('模块{1-10}'); -$module->type->range('task'); -$module->deleted->range('0'); -$module->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskZenTest = new taskZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$execution1 = new stdClass(); -$execution1->id = 1; -$execution1->name = '迭代1'; -$execution1->type = 'sprint'; -$execution1->multiple = 1; -$execution1->project = 1; -$execution1->lifetime = 'ops'; -$execution1->attribute = 'request'; - -r($taskZenTest->buildBatchCreateFormTest($execution1)) && p('title,execution,project') && e('批量添加任务,1,1'); // 步骤1:正常执行对象 - -$execution2 = new stdClass(); -$execution2->id = 2; -$execution2->name = '看板执行'; -$execution2->type = 'kanban'; -$execution2->multiple = 1; -$execution2->project = 2; -$execution2->lifetime = 'long'; -$execution2->attribute = 'review'; - -r($taskZenTest->buildBatchCreateFormTest($execution2)) && p('title,execution') && e('批量添加任务,2'); // 步骤2:看板类型执行 - -$execution3 = new stdClass(); -$execution3->id = 3; -$execution3->name = '迭代3'; -$execution3->type = 'sprint'; -$execution3->multiple = 1; -$execution3->project = 3; -$execution3->lifetime = 'ops'; -$execution3->attribute = 'request'; - -r($taskZenTest->buildBatchCreateFormTest($execution3, 0, 0, 1)) && p('title,execution,parent') && e('批量添加任务,3,1'); // 步骤3:带父任务ID - -$execution4 = new stdClass(); -$execution4->id = 4; -$execution4->name = '迭代4'; -$execution4->type = 'sprint'; -$execution4->multiple = 1; -$execution4->project = 4; -$execution4->lifetime = 'long'; -$execution4->attribute = 'review'; - -r($taskZenTest->buildBatchCreateFormTest($execution4, 1, 5)) && p('title,execution,storyID') && e('批量添加任务,4,1'); // 步骤4:带需求和模块ID - -$execution5 = new stdClass(); -$execution5->id = 5; -$execution5->name = '迭代5'; -$execution5->type = 'sprint'; -$execution5->multiple = 0; -$execution5->project = 5; -$execution5->lifetime = 'ops'; -$execution5->attribute = 'request'; - -r($taskZenTest->buildBatchCreateFormTest($execution5)) && p('title,execution,project') && e('批量添加任务,5,5'); // 步骤5:非多迭代项目执行 \ No newline at end of file diff --git a/module/task/test/zen/buildeffortforfinish.php b/module/task/test/zen/buildeffortforfinish.php deleted file mode 100755 index 896dea967c..0000000000 --- a/module/task/test/zen/buildeffortforfinish.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -id = 1; -$oldTask->name = 'Test Task'; -$oldTask->status = 'doing'; - -$task = new stdclass(); -$task->finishedDate = '2024-01-15 10:30:00'; -$task->work = 'Initial work description'; - -// 5. 强制要求:必须包含至少5个测试步骤 -r($taskTest->buildEffortForFinishTest($oldTask, $task, '5.5', '')) && p('consumed,left,account') && e('5.5,0,admin'); // 步骤1:正常消耗时间 -r($taskTest->buildEffortForFinishTest($oldTask, $task, '0', '')) && p('consumed,left,account') && e('0,0,admin'); // 步骤2:边界值0消耗 -r($taskTest->buildEffortForFinishTest($oldTask, $task, '-1', '')) && p('0') && e('"总计消耗"必须大于之前消耗'); // 步骤3:负数消耗时间 -r($taskTest->buildEffortForFinishTest($oldTask, $task, '3.5', 'Task completed successfully')) && p('consumed,work') && e('3.5,Task completed successfully'); // 步骤4:带评论输入 -r($taskTest->buildEffortForFinishTest($oldTask, $task, '', '')) && p('consumed,left,account') && e('0,0,admin'); // 步骤5:空字符串消耗时间 \ No newline at end of file diff --git a/module/task/test/zen/buildrecordform.php b/module/task/test/zen/buildrecordform.php deleted file mode 100755 index 9009ee2b27..0000000000 --- a/module/task/test/zen/buildrecordform.php +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env php -id->range('1'); -$project->name->range('测试项目'); -$project->type->range('project'); -$project->status->range('doing'); -$project->gen(1); - -$execution = zenData('project'); -$execution->id->range('2'); -$execution->parent->range('1'); -$execution->name->range('测试执行'); -$execution->type->range('sprint'); -$execution->status->range('doing'); -$execution->gen(1); - -$story = zenData('story'); -$story->id->range('1'); -$story->title->range('测试需求'); -$story->type->range('story'); -$story->status->range('active'); -$story->version->range('1'); -$story->gen(1); - -$task = zenData('task'); -$task->id->range('1-10'); -$task->project->range('1'); -$task->execution->range('2'); -$task->name->range('测试任务{1-10}'); -$task->type->range('devel'); -$task->mode->range('linear{5},'); -$task->assignedTo->range('admin{3},user1{3},user2{4}'); -$task->status->range('wait{3},doing{4},done{3}'); -$task->story->range('0{8},1{2}'); -$task->storyVersion->range('1'); -$task->gen(10); - -$taskTeam = zenData('taskteam'); -$taskTeam->id->range('1-15'); -$taskTeam->task->range('1{3},2{3},3{3},4{3},5{3}'); -$taskTeam->account->range('admin,user1,user2'); -$taskTeam->status->range('wait{5},doing{5},done{5}'); -$taskTeam->gen(15); - -$taskEstimate = zenData('taskestimate'); -$taskEstimate->id->range('1-20'); -$taskEstimate->task->range('1{4},2{4},3{4},4{4},5{4}'); -$taskEstimate->account->range('admin,user1,user2,user3'); -$taskEstimate->consumed->range('1.0{5},2.0{5},3.0{5},1.5{5}'); -$taskEstimate->left->range('0.5{5},1.0{5},0{5},2.0{5}'); -$taskEstimate->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('管理员,用户一,用户二,用户三,用户四,用户五,用户六,用户七,用户八,用户九'); -$user->deleted->range('0'); -$user->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskTest = new taskZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($taskTest->buildRecordFormTest(1, '', '')) && p('taskID,title') && e('1,任务日志'); // 步骤1:正常情况 -r($taskTest->buildRecordFormTest(1, 'execution', 'order_desc')) && p('taskID,from,orderBy') && e('1,execution,order_desc,id_desc'); // 步骤2:团队模式排序处理 -r($taskTest->buildRecordFormTest(2, '', '')) && p('taskID,taskEffortFold') && e('2,0'); // 步骤3:默认折叠状态 -r($taskTest->buildRecordFormTest(1, '', '')) && p('taskID,taskAssignedTo,taskEffortFold') && e('1,admin,1'); // 步骤4:当前用户分配的任务 -r($taskTest->buildRecordFormTest(3, 'kanban', 'date_asc')) && p('taskID,from,usersCount') && e('3,kanban,10'); // 步骤5:用户列表验证 \ No newline at end of file diff --git a/module/task/test/zen/buildtaskforclose.php b/module/task/test/zen/buildtaskforclose.php deleted file mode 100755 index 66c26cca03..0000000000 --- a/module/task/test/zen/buildtaskforclose.php +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env php -id->range('1-7'); -$task->name->range('测试任务1,测试任务2,测试任务3,关闭任务4,完成任务5,任务6,任务7'); -$task->status->range('done{2},cancel{2},doing{1},wait{1},pause{1}'); -$task->consumed->range('1{3},2{2},0{2}'); -$task->left->range('0{3},1{2},2{2}'); -$task->assignedTo->range('admin{2},user1{2},user2{2},closed{1}'); -$task->openedBy->range('admin{3},user1{2},user2{2}'); -$task->execution->range('1{7}'); -$task->project->range('1{7}'); -$task->type->range('devel{3},test{2},design{1},affair{1}'); -$task->gen(7); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskZenTest = new taskZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 步骤1:关闭已完成任务(状态done) -$oldTask1 = new stdclass(); -$oldTask1->id = 1; -$oldTask1->status = 'done'; -$_POST = array('closedReason' => '', 'comment' => '任务关闭', 'uid' => ''); -r($taskZenTest->buildTaskForCloseTest($oldTask1)) && p('closedReason') && e('done'); - -// 步骤2:关闭已取消任务(状态cancel) -$oldTask2 = new stdclass(); -$oldTask2->id = 2; -$oldTask2->status = 'cancel'; -$_POST = array('closedReason' => '', 'comment' => '取消关闭', 'uid' => ''); -r($taskZenTest->buildTaskForCloseTest($oldTask2)) && p('closedReason') && e('cancel'); - -// 步骤3:关闭进行中任务(状态doing) -$oldTask3 = new stdclass(); -$oldTask3->id = 3; -$oldTask3->status = 'doing'; -$_POST = array('closedReason' => 'bydesign', 'comment' => '按设计关闭', 'uid' => ''); -r($taskZenTest->buildTaskForCloseTest($oldTask3)) && p('closedReason') && e(''); - -// 步骤4:验证关闭后状态设置 -$oldTask4 = new stdclass(); -$oldTask4->id = 4; -$oldTask4->status = 'wait'; -$_POST = array('closedReason' => '', 'comment' => '验证状态', 'uid' => ''); -r($taskZenTest->buildTaskForCloseTest($oldTask4)) && p('status,assignedTo') && e('closed,closed'); - -// 步骤5:验证任务ID正确设置 -$oldTask5 = new stdclass(); -$oldTask5->id = 5; -$oldTask5->status = 'wait'; -$_POST = array('closedReason' => '', 'comment' => '验证ID', 'uid' => ''); -r($taskZenTest->buildTaskForCloseTest($oldTask5)) && p('id,status') && e('5,closed'); \ No newline at end of file diff --git a/module/task/test/zen/buildtaskforedit.php b/module/task/test/zen/buildtaskforedit.php deleted file mode 100755 index e79d8c2578..0000000000 --- a/module/task/test/zen/buildtaskforedit.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -loadYaml('task'); -$taskTable->gen(10); - -zenData('user')->gen(5); -zenData('project')->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskTest = new taskZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($taskTest->buildTaskForEditTest((object)array('id' => 1, 'estimate' => 8, 'left' => 5, 'consumed' => 3, 'status' => 'doing', 'assignedTo' => 'admin', 'name' => '新任务名称'))) && p('estimate,left,consumed,status') && e('8,5,3,doing'); // 步骤1:正常任务更新 -r($taskTest->buildTaskForEditTest((object)array('id' => 2, 'estimate' => 10, 'left' => 0, 'consumed' => 10, 'status' => 'done', 'assignedTo' => 'admin', 'name' => '已完成任务'))) && p('status,left,finishedBy') && e('done,0,admin'); // 步骤2:任务完成状态更新 -r($taskTest->buildTaskForEditTest((object)array('id' => 3, 'estimate' => 5, 'left' => 5, 'consumed' => 0, 'status' => 'cancel', 'assignedTo' => 'admin', 'name' => '取消的任务'))) && p('status,canceledBy') && e('cancel,admin'); // 步骤3:任务取消状态更新 -r($taskTest->buildTaskForEditTest((object)array('id' => 4, 'estimate' => -1, 'left' => 3, 'consumed' => 2, 'status' => 'doing', 'assignedTo' => 'admin', 'name' => '负数估算任务'))) && p() && e('预计工时不能为负数。'); // 步骤4:estimate负数异常 -r($taskTest->buildTaskForEditTest((object)array('id' => 5, 'estimate' => 8, 'left' => -1, 'consumed' => 3, 'status' => 'doing', 'assignedTo' => 'admin', 'name' => '负数剩余任务'))) && p() && e('预计剩余不能为负数。'); // 步骤5:left负数异常 -r($taskTest->buildTaskForEditTest((object)array('id' => 6, 'estimate' => 8, 'left' => 5, 'consumed' => -1, 'status' => 'doing', 'assignedTo' => 'admin', 'name' => '负数消耗任务'))) && p() && e('已消耗工时不能为负数。'); // 步骤6:consumed负数异常 -r($taskTest->buildTaskForEditTest((object)array('id' => 7, 'estimate' => 6, 'left' => 6, 'consumed' => 0, 'status' => 'wait', 'assignedTo' => 'admin', 'name' => '新名称任务'))) && p('version') && e('2'); // 步骤7:名称变更版本递增 \ No newline at end of file diff --git a/module/task/test/zen/buildtasksforbatchcreate.php b/module/task/test/zen/buildtasksforbatchcreate.php deleted file mode 100755 index fa71a8bede..0000000000 --- a/module/task/test/zen/buildtasksforbatchcreate.php +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->project->range('1{5}, 2{5}'); -$table->execution->range('1{5}, 2{5}'); -$table->parent->range('0{3}, 1{4}, 2{3}'); -$table->name->range('任务1, 任务2, 任务3, 子任务1, 子任务2, 子任务3, 子任务4, 孙任务1, 孙任务2, 孙任务3'); -$table->type->range('devel{5}, test{3}, design{2}'); -$table->status->range('wait{7}, doing{2}, done{1}'); -$table->assignedTo->range('admin{3}, user1{3}, user2{2}, {2}'); -$table->estimate->range('1, 2, 3, 4, 5, 1.5, 2.5, 3.5, 4.5, 5.5'); -$table->story->range('1{3}, 2{2}, 0{5}'); -$table->gen(10); - -$projectTable = zenData('project'); -$projectTable->id->range('1-3'); -$projectTable->project->range('0{3}'); -$projectTable->name->range('项目1, 项目2, 项目3'); -$projectTable->type->range('project{1}, execution{2}'); -$projectTable->status->range('doing{3}'); -$projectTable->gen(3); - -$storyTable = zenData('story'); -$storyTable->id->range('1-3'); -$storyTable->product->range('1{3}'); -$storyTable->title->range('需求1, 需求2, 需求3'); -$storyTable->version->range('1{3}'); -$storyTable->gen(3); - -zenData('user')->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskTest = new taskZenTest(); - -// 模拟执行对象 -$execution = new stdClass(); -$execution->id = 1; -$execution->project = 1; - -$invalidExecution = new stdClass(); -$invalidExecution->id = 0; -$invalidExecution->project = 0; - -// 5. 强制要求:必须包含至少5个测试步骤 - -// 步骤1:模拟正常批量创建任务数据(无层级关系) -$_POST = array( - 'level' => array(0, 0, 0), - 'name' => array('任务1', '任务2', '任务3') -); -r($taskTest->buildTasksForBatchCreateTest($execution, 1, array())) && p('count(*)') && e('3'); // 步骤1:正常批量创建任务数据构建 - -// 步骤2:模拟父任务名称为空时的验证 -$_POST = array( - 'level' => array(0, 1), - 'name' => array('', '子任务1') -); -r($taskTest->buildTasksForBatchCreateTest($execution, 2, array())) && p() && e('父级名称不能为空!'); // 步骤2:父任务名称为空时的验证 - -// 步骤3:模拟无效执行对象的处理 -$_POST = array( - 'level' => array(0), - 'name' => array('测试任务') -); -r($taskTest->buildTasksForBatchCreateTest($invalidExecution, 1, array())) && p('count(*)') && e('1'); // 步骤3:无效执行对象的处理 - -// 步骤4:模拟空任务数据 -$_POST = array(); -r($taskTest->buildTasksForBatchCreateTest($execution, 3, array())) && p() && e('0'); // 步骤4:空任务数据的处理 - -// 步骤5:模拟正常的包含看板字段的数据 -$_POST = array( - 'level' => array(0, 0), - 'name' => array('看板任务1', '看板任务2') -); -r($taskTest->buildTasksForBatchCreateTest($execution, 1, array('laneID' => 2, 'columnID' => 2))) && p('count(*)') && e('2'); // 步骤5:复杂层级任务的数据构建 \ No newline at end of file diff --git a/module/task/test/zen/checkcreatetesttasks.php b/module/task/test/zen/checkcreatetesttasks.php deleted file mode 100755 index 72b3a062ee..0000000000 --- a/module/task/test/zen/checkcreatetesttasks.php +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env php -execution = 1; -$validTask1->name = '测试任务1'; -$validTask1->type = 'test'; -$validTask1->estimate = 8.0; -$validTask1->estStarted = '2024-06-01'; -$validTask1->deadline = '2024-06-10'; - -$validTask2 = new stdClass(); -$validTask2->execution = 1; -$validTask2->name = '测试任务2'; -$validTask2->type = 'test'; -$validTask2->estimate = 4.0; -$validTask2->estStarted = '2024-06-02'; -$validTask2->deadline = '2024-06-08'; - -$validTasks = array($validTask1, $validTask2); -r($taskTest->checkCreateTestTasksTest($validTasks)) && p() && e('1'); // 步骤1:正常情况 - -// 步骤2:传入空任务数组 -$emptyTasks = array(); -r($taskTest->checkCreateTestTasksTest($emptyTasks)) && p('0') && e('请至少选择一个软件需求。'); // 步骤2:空数组 - -// 步骤3:传入包含负数estimate的任务 -$negativeEstimateTask = new stdClass(); -$negativeEstimateTask->execution = 1; -$negativeEstimateTask->name = '测试任务3'; -$negativeEstimateTask->type = 'test'; -$negativeEstimateTask->estimate = -2.0; -$negativeEstimateTask->estStarted = '2024-06-01'; -$negativeEstimateTask->deadline = '2024-06-10'; - -$negativeEstimateTasks = array($negativeEstimateTask); -r($taskTest->checkCreateTestTasksTest($negativeEstimateTasks)) && p('testEstimate[1]') && e('最初预计不能为负数'); // 步骤3:负数estimate - -// 步骤4:传入开始日期晚于结束日期的任务 -$invalidDateTask = new stdClass(); -$invalidDateTask->execution = 1; -$invalidDateTask->name = '测试任务4'; -$invalidDateTask->type = 'test'; -$invalidDateTask->estimate = 4.0; -$invalidDateTask->estStarted = '2024-06-15'; -$invalidDateTask->deadline = '2024-06-10'; - -$invalidDateTasks = array($invalidDateTask); -r($taskTest->checkCreateTestTasksTest($invalidDateTasks)) && p('testDeadline[1]') && e('"截止日期"必须大于"预计开始"'); // 步骤4:无效日期 - -// 步骤5:传入缺少必需字段的任务 -$missingFieldTask = new stdClass(); -$missingFieldTask->execution = 1; -$missingFieldTask->name = ''; -$missingFieldTask->type = 'test'; -$missingFieldTask->estimate = 4.0; -$missingFieldTask->estStarted = '2024-06-01'; -$missingFieldTask->deadline = '2024-06-10'; - -$missingFieldTasks = array($missingFieldTask); -r($taskTest->checkCreateTestTasksTest($missingFieldTasks)) && p() && e('Array'); // 步骤5:缺少必需字段 \ No newline at end of file diff --git a/module/task/test/zen/formatexporttask.php b/module/task/test/zen/formatexporttask.php deleted file mode 100755 index 27e5b2f926..0000000000 --- a/module/task/test/zen/formatexporttask.php +++ /dev/null @@ -1,120 +0,0 @@ -#!/usr/bin/env php - '项目一', - 2 => '项目二', - 3 => '项目三' -); - -$executions = array( - 1 => '执行一', - 2 => '执行二', - 3 => '执行三' -); - -$users = array( - 'admin' => '管理员', - 'user1' => '用户一', - 'user2' => '用户二', - 'user3' => '用户三' -); - -// 创建任务对象进行测试 -$normalTask = (object)array( - 'id' => 1, - 'name' => '测试任务', - 'project' => 1, - 'execution' => 1, - 'type' => 'devel', - 'pri' => 3, - 'status' => 'doing', - 'closedReason' => '', - 'mode' => 'linear', - 'openedBy' => 'admin', - 'assignedTo' => 'user1', - 'finishedBy' => '', - 'canceledBy' => '', - 'closedBy' => '', - 'lastEditedBy' => 'admin', - 'openedDate' => '2023-01-01 10:00:00', - 'assignedDate' => '2023-01-02 11:00:00', - 'finishedDate' => '0000-00-00 00:00:00', - 'canceledDate' => '0000-00-00 00:00:00', - 'closedDate' => '0000-00-00 00:00:00', - 'lastEditedDate' => '2023-01-15 10:00:00', - 'estimate' => 16.0, - 'consumed' => 8.0, - 'left' => 8.0, - 'desc' => '普通任务描述' -); - -$csvTask = (object)array( - 'id' => 2, - 'name' => 'CSV测试任务', - 'project' => 2, - 'execution' => 2, - 'type' => 'test', - 'pri' => 2, - 'status' => 'done', - 'closedReason' => 'done', - 'mode' => 'multi', - 'openedBy' => 'user1', - 'assignedTo' => 'user2', - 'finishedBy' => 'user2', - 'canceledBy' => '', - 'closedBy' => 'user2', - 'lastEditedBy' => 'user2', - 'openedDate' => '2023-01-03 10:00:00', - 'assignedDate' => '2023-01-04 11:00:00', - 'finishedDate' => '2023-01-05 12:00:00', - 'canceledDate' => '0000-00-00 00:00:00', - 'closedDate' => '2023-01-06 13:00:00', - 'lastEditedDate' => '2023-01-16 10:00:00', - 'estimate' => 24.0, - 'consumed' => 20.0, - 'left' => 4.0, - 'desc' => '包含
换行和"引号"还有 空格的描述' -); - -// 模拟CSV导出的post数据 -$_POST['fileType'] = 'excel'; - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$_POST['fileType'] = 'excel'; -r($taskTest->formatExportTaskTest($normalTask, $projects, $executions, $users)) && p('project') && e('项目一(#1)'); // 步骤1:正常情况项目名称映射 -$_POST['fileType'] = 'csv'; -r($taskTest->formatExportTaskTest($csvTask, $projects, $executions, $users)) && p('desc') && e('包含\n换行和""引号""还有 空格'); // 步骤2:CSV格式特殊字符处理 -$_POST['fileType'] = 'excel'; -r($taskTest->formatExportTaskTest($normalTask, $projects, $executions, $users)) && p('openedDate') && e('2023-01-01'); // 步骤3:日期格式处理 -r($taskTest->formatExportTaskTest($normalTask, $projects, $executions, $users)) && p('openedBy') && e('管理员'); // 步骤4:用户名称映射 -$zeroDateTask = clone $normalTask; -$zeroDateTask->finishedDate = '0000-00-00 00:00:00'; -r($taskTest->formatExportTaskTest($zeroDateTask, $projects, $executions, $users)) && p('finishedDate') && e(''); // 步骤5:零值日期处理 \ No newline at end of file diff --git a/module/task/test/zen/generalcreateresponse.php b/module/task/test/zen/generalcreateresponse.php deleted file mode 100755 index 5b941839dc..0000000000 --- a/module/task/test/zen/generalcreateresponse.php +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$task->name->range('任务{1-10}'); -$task->execution->range('1-3'); -$task->story->range('0,1,2,0,1'); -$task->module->range('1-5'); -$task->status->range('wait'); -$task->gen(5); - -$project = zenData('project'); -$project->id->range('1-5'); -$project->name->range('项目{1-5}'); -$project->type->range('execution'); -$project->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$taskZenTest = new taskZenTest(); - -// 5. 测试步骤 - 必须包含至少5个测试步骤 - -// 创建测试任务对象 -$testTask = new stdClass(); -$testTask->execution = 1; -$testTask->story = 0; -$testTask->module = 0; - -r($taskZenTest->generalCreateResponseTest($testTask, 1, 'continueAdding')) && p('result,message') && e('success,成功添加,继续为该软件需求添加任务'); // 步骤1:continueAdding选项 - -$testTask->story = 2; -$testTask->module = 3; -r($taskZenTest->generalCreateResponseTest($testTask, 2, 'continueAdding')) && p('result,load') && e('success,task-create-1-2-3.html'); // 步骤2:continueAdding带story和module - -r($taskZenTest->generalCreateResponseTest($testTask, 1, 'toTaskList')) && p('result,load') && e('success,execution-task-1-unclosed-0-id_desc.html'); // 步骤3:toTaskList选项 - -r($taskZenTest->generalCreateResponseTest($testTask, 1, 'toStoryList')) && p('result') && e('success'); // 步骤4:其他选项默认处理 - -r($taskZenTest->generalCreateResponseTest($testTask, 1, '')) && p('result') && e('success'); // 步骤5:空字符串处理 \ No newline at end of file diff --git a/module/task/test/zen/getassignedtooptions.php b/module/task/test/zen/getassignedtooptions.php deleted file mode 100755 index 8c5dfceffe..0000000000 --- a/module/task/test/zen/getassignedtooptions.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -getAssignedToOptionsTest('')) && p('single:multiple') && e('0'); // 步骤1:验证single模式multiple为false -r($taskTest->getAssignedToOptionsTest('')) && p('single:checkbox') && e('0'); // 步骤2:验证single模式checkbox为false -r($taskTest->getAssignedToOptionsTest('')) && p('single:toolbar') && e('0'); // 步骤3:验证空manageLink时single模式无工具栏 -r($taskTest->getAssignedToOptionsTest('')) && p('multiple:multiple') && e('1'); // 步骤4:验证multiple模式multiple为true -r($taskTest->getAssignedToOptionsTest('')) && p('multiple:checkbox') && e('1'); // 步骤5:验证multiple模式checkbox为true \ No newline at end of file diff --git a/module/task/test/zen/getcustomfields.php b/module/task/test/zen/getcustomfields.php deleted file mode 100755 index 3779662c89..0000000000 --- a/module/task/test/zen/getcustomfields.php +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env php - 1, 'type' => 'sprint', 'lifetime' => 'short', 'attribute' => 'normal'); -$stageExecution = (object)array('id' => 2, 'type' => 'stage', 'lifetime' => 'short', 'attribute' => 'normal'); -$opsExecution = (object)array('id' => 3, 'type' => 'sprint', 'lifetime' => 'ops', 'attribute' => 'normal'); -$requestExecution = (object)array('id' => 4, 'type' => 'sprint', 'lifetime' => 'short', 'attribute' => 'request'); -$reviewExecution = (object)array('id' => 5, 'type' => 'sprint', 'lifetime' => 'short', 'attribute' => 'review'); - -// 5. 执行测试步骤(至少5个测试步骤) -r($taskTest->getCustomFieldsTestWithObject($normalExecution, 'batchCreate')) && p('0') && e('module,story,assignedTo,estimate,estStarted,deadline,desc,pri'); // 步骤1:正常batchCreate操作 -r($taskTest->getCustomFieldsTestWithObject($stageExecution, 'batchCreate')) && p('0') && e('module,story,assignedTo,estimate,desc,pri'); // 步骤2:stage类型排除时间字段 -r($taskTest->getCustomFieldsTestWithObject($opsExecution, 'batchCreate')) && p('0') && e('module,assignedTo,estimate,estStarted,deadline,desc,pri'); // 步骤3:ops类型排除story字段 -r($taskTest->getCustomFieldsTestWithObject($normalExecution, 'batchEdit')) && p('0') && e('module,assignedTo,status,pri,estimate,record,left'); // 步骤4:batchEdit操作获取字段 -r($taskTest->getCustomFieldsTestWithObject($requestExecution, 'batchCreate')) && p('0') && e('module,assignedTo,estimate,estStarted,deadline,desc,pri'); // 步骤5:request属性排除story字段 \ No newline at end of file diff --git a/module/task/test/zen/getexportfields.php b/module/task/test/zen/getexportfields.php deleted file mode 100755 index a46f2da81b..0000000000 --- a/module/task/test/zen/getexportfields.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -getExportFieldsTest('id,name,status', array())) && p('id,name,status') && e('编号,任务名称,任务状态'); // 步骤1:正常情况 -r($taskTest->getExportFieldsTest('id,name', array('exportFields' => array('assignedTo', 'openedBy')))) && p('assignedTo,openedBy') && e('指派给,由谁创建'); // 步骤2:POST参数 -r($taskTest->getExportFieldsTest('id,name', array('exportFields' => array('pri,estimate,consumed')))) && p('pri,estimate,consumed') && e('优先级,最初预计,总计消耗'); // 步骤3:新UI组件兼容 -r($taskTest->getExportFieldsTest('id,name,nonexist', array())) && p('id,name,nonexist') && e('编号,任务名称,nonexist'); // 步骤4:不存在语言标签 -r($taskTest->getExportFieldsTest('', array())) && p() && e('0'); // 步骤5:空字段输入 \ No newline at end of file diff --git a/module/task/test/zen/processexportdata.php b/module/task/test/zen/processexportdata.php deleted file mode 100755 index abb848e617..0000000000 --- a/module/task/test/zen/processexportdata.php +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env php -id->range('1'); -$story->title->range('需求1'); -$story->gen(1); - -$bug = zenData('bug'); -$bug->id->range('1'); -$bug->title->range('Bug1'); -$bug->gen(1); - -$user = zenData('user'); -$user->account->range('admin,user1,user2'); -$user->realname->range('管理员,用户1,用户2'); -$user->gen(3); - -$project = zenData('project'); -$project->id->range('1-2'); -$project->name->range('项目1,执行1'); -$project->type->range('project,execution'); -$project->gen(2); - -$module = zenData('module'); -$module->id->range('1-2'); -$module->name->range('模块1,模块2'); -$module->type->range('task'); -$module->gen(2); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskTest = new taskTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 创建完整任务对象的辅助函数 -function createTaskObject($id, $name, $options = array()) { - $task = new stdClass(); - $task->id = $id; - $task->name = $name; - $task->project = isset($options['project']) ? $options['project'] : 1; - $task->execution = isset($options['execution']) ? $options['execution'] : 1; - $task->module = isset($options['module']) ? $options['module'] : 1; - $task->story = isset($options['story']) ? $options['story'] : 0; - $task->fromBug = isset($options['fromBug']) ? $options['fromBug'] : 0; - $task->type = isset($options['type']) ? $options['type'] : 'devel'; - $task->pri = isset($options['pri']) ? $options['pri'] : 3; - $task->status = isset($options['status']) ? $options['status'] : 'wait'; - $task->closedReason = isset($options['closedReason']) ? $options['closedReason'] : ''; - $task->mode = isset($options['mode']) ? $options['mode'] : ''; - $task->openedBy = isset($options['openedBy']) ? $options['openedBy'] : 'admin'; - $task->assignedTo = isset($options['assignedTo']) ? $options['assignedTo'] : 'admin'; - $task->finishedBy = isset($options['finishedBy']) ? $options['finishedBy'] : ''; - $task->canceledBy = isset($options['canceledBy']) ? $options['canceledBy'] : ''; - $task->closedBy = isset($options['closedBy']) ? $options['closedBy'] : ''; - $task->lastEditedBy = isset($options['lastEditedBy']) ? $options['lastEditedBy'] : ''; - $task->openedDate = isset($options['openedDate']) ? $options['openedDate'] : '2023-10-01 10:00:00'; - $task->assignedDate = isset($options['assignedDate']) ? $options['assignedDate'] : '2023-10-01 10:00:00'; - $task->finishedDate = isset($options['finishedDate']) ? $options['finishedDate'] : '0000-00-00 00:00:00'; - $task->canceledDate = isset($options['canceledDate']) ? $options['canceledDate'] : '0000-00-00 00:00:00'; - $task->closedDate = isset($options['closedDate']) ? $options['closedDate'] : '0000-00-00 00:00:00'; - $task->lastEditedDate = isset($options['lastEditedDate']) ? $options['lastEditedDate'] : '0000-00-00 00:00:00'; - $task->estimate = isset($options['estimate']) ? $options['estimate'] : 8; - $task->consumed = isset($options['consumed']) ? $options['consumed'] : 0; - $task->left = isset($options['left']) ? $options['left'] : 8; - $task->mailto = isset($options['mailto']) ? $options['mailto'] : ''; - $task->parent = isset($options['parent']) ? $options['parent'] : 0; - $task->isParent = isset($options['isParent']) ? $options['isParent'] : 0; - $task->team = isset($options['team']) ? $options['team'] : ''; - $task->desc = isset($options['desc']) ? $options['desc'] : ''; - return $task; -} - -// 步骤1:空任务数组处理 -r($taskTest->processExportDataTest(array(), 1)) && p() && e(array()); - -// 步骤2:正常任务数据处理 -$task1 = createTaskObject(1, '任务1'); -r($taskTest->processExportDataTest(array($task1), 1)) && p('0:name') && e('任务1'); - -// 步骤3:包含关联需求的任务处理 -$task2 = createTaskObject(2, '任务2', array('story' => 1, 'consumed' => 2, 'left' => 6)); -r($taskTest->processExportDataTest(array($task2), 1)) && p('0:story') && e('需求1(#1)'); - -// 步骤4:包含关联Bug的任务处理 -$task3 = createTaskObject(3, '任务3', array('fromBug' => 1, 'consumed' => 4, 'left' => 0)); -r($taskTest->processExportDataTest(array($task3), 1)) && p('0:fromBug') && e('#1 Bug1'); - -// 步骤5:父任务名称处理 -$task4 = createTaskObject(4, '任务4', array('isParent' => 1, 'consumed' => 8, 'left' => 0)); -r($taskTest->processExportDataTest(array($task4), 1)) && p('0:name') && e('[父] 任务4'); - -// 步骤6:子任务名称处理 -$task5 = createTaskObject(5, '任务5', array('parent' => 4, 'consumed' => 2, 'left' => 2)); -r($taskTest->processExportDataTest(array($task5), 1)) && p('0:name') && e('[子] 任务5'); - -// 步骤7:多人任务名称处理 -$task6 = createTaskObject(6, '任务6', array('team' => 'multi', 'consumed' => 5, 'left' => 3)); -r($taskTest->processExportDataTest(array($task6), 1)) && p('0:name') && e('[多人] 任务6'); - -// 步骤8:邮件收件人格式化 -$task7 = createTaskObject(7, '任务7', array('mailto' => 'user1,user2', 'consumed' => 1, 'left' => 7)); -r($taskTest->processExportDataTest(array($task7), 1)) && p('0:mailto') && e('用户1,用户2'); - -// 步骤9:任务进度计算 -$task8 = createTaskObject(8, '任务8', array('consumed' => 6, 'left' => 2)); -r($taskTest->processExportDataTest(array($task8), 1)) && p('0:progress') && e('75%'); \ No newline at end of file diff --git a/module/task/test/zen/responseafterrecord.php b/module/task/test/zen/responseafterrecord.php deleted file mode 100755 index be3e914a77..0000000000 --- a/module/task/test/zen/responseafterrecord.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->execution->range('1-5'); -$table->name->range('测试任务1,测试任务2,测试任务3,测试任务4,测试任务5'); -$table->status->range('wait,doing,done,pause,cancel'); -$table->type->range('design,devel,test,study,misc'); -$table->assignedTo->range('admin,user1,user2,user3'); -$table->consumed->range('0-10'); -$table->left->range('0-5'); -$table->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$taskTest = new taskTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$task = new stdClass(); -$task->id = 1; -$task->execution = 1; -$task->name = '测试任务'; -$task->status = 'doing'; -$task->type = 'devel'; -$task->assignedTo = 'admin'; -$task->consumed = 5; -$task->left = 2; - -r($taskTest->responseAfterRecordTest($task, array(), '')) && p('error') && e('Zen object not available'); // 步骤1:正常情况,验证错误处理 -r($taskTest->responseAfterRecordTest($task, array('status' => 'done'), '')) && p('error') && e('Zen object not available'); // 步骤2:有变更情况,验证错误处理 -r($taskTest->responseAfterRecordTest($task, array(), 'modal')) && p('error') && e('Zen object not available'); // 步骤3:模态请求,验证错误处理 -r($taskTest->responseAfterRecordTest($task, array(), 'list')) && p('error') && e('Zen object not available'); // 步骤4:列表来源,验证错误处理 -r($taskTest->responseAfterRecordTest($task, array('left' => '0'), 'kanban')) && p('error') && e('Zen object not available'); // 步骤5:看板来源,验证错误处理 \ No newline at end of file diff --git a/module/task/test/zen/responsemodal.php b/module/task/test/zen/responsemodal.php deleted file mode 100755 index f32561abeb..0000000000 --- a/module/task/test/zen/responsemodal.php +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$task->project->range('1-3'); -$task->execution->range('1-3'); -$task->name->range('Task{1-10}'); -$task->type->range('devel,test,design,study,misc'); -$task->status->range('wait,doing,done'); -$task->assignedTo->range('admin,user1,user2'); -$task->gen(5); - -$project = zenData('project'); -$project->id->range('1-5'); -$project->name->range('项目{1-5}'); -$project->type->range('project'); -$project->status->range('wait,doing,suspended,closed'); -$project->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$taskTest = new taskZenTest(); - -// 5. 创建测试数据对象 -$taskObj = new stdClass(); -$taskObj->id = 1; -$taskObj->execution = 1; - -$kanbanTaskObj = new stdClass(); -$kanbanTaskObj->id = 2; -$kanbanTaskObj->execution = 3; - -// 6. 模拟不同的应用状态 -global $app; - -// 测试步骤1:测试recordworkhour方法的返回 -$app->rawMethod = 'recordworkhour'; -r($taskTest->responseModalTest($taskObj, '')) && p('result,message') && e('success,保存成功'); // 步骤1:recordworkhour方法返回 - -// 测试步骤2:测试普通kanban执行类型的返回 -$app->rawMethod = 'edit'; -$app->tab = 'execution'; -r($taskTest->responseModalTest($kanbanTaskObj, '')) && p('result,message') && e('success,保存成功'); // 步骤2:kanban执行类型返回 - -// 测试步骤3:测试非kanban执行类型的返回 -$app->tab = 'execution'; -r($taskTest->responseModalTest($taskObj, '')) && p('result,message') && e('success,保存成功'); // 步骤3:非kanban执行类型返回 - -// 测试步骤4:测试edittask来源的返回 -$app->rawMethod = 'edit'; -$app->tab = 'task'; -r($taskTest->responseModalTest($taskObj, 'edittask')) && p('result,message') && e('success,保存成功'); // 步骤4:edittask来源返回 - -// 测试步骤5:测试不同参数覆盖 -$app->rawMethod = 'edit'; -$app->tab = 'task'; -r($taskTest->responseModalTest($taskObj, 'other')) && p('result') && e('success'); // 步骤5:其他来源参数返回 \ No newline at end of file diff --git a/module/testcase/test/model/processdatas.php b/module/testcase/test/model/processdatas.php deleted file mode 100755 index ed2fd478fd..0000000000 --- a/module/testcase/test/model/processdatas.php +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env php - array( - 'stepDesc' => '1. 打开登录页面' - ) -); -r($testcaseTest->processDatasTest($data1)) && p('0:desc:1:content') && e('打开登录页面'); - -// 步骤2:测试处理多行步骤描述 -$data2 = array( - 0 => array( - 'stepDesc' => "1、第一个步骤\n2、第二个步骤" - ) -); -r($testcaseTest->processDatasTest($data2)) && p('0:desc:2:content') && e('第二个步骤'); - -// 步骤3:测试处理带中文分隔符的步骤 -$data3 = array( - 0 => array( - 'stepDesc' => '1、登录系统' - ) -); -r($testcaseTest->processDatasTest($data3)) && p('0:desc:1:content') && e('登录系统'); - -// 步骤4:测试处理带期望字段的完整数据 -$data4 = array( - 0 => array( - 'stepDesc' => '1. 输入用户名', - 'stepExpect' => '1. 显示登录界面' - ) -); -r($testcaseTest->processDatasTest($data4)) && p('0:expect:1:content') && e('显示登录界面'); - -// 步骤5:测试处理空数据输入 -$data5 = array(); -r($testcaseTest->processDatasTest($data5)) && p() && e(array()); - -// 步骤6:测试处理复杂嵌套编号格式 -$data6 = array( - 0 => array( - 'stepDesc' => '1.1.1. 输入用户名' - ) -); -r($testcaseTest->processDatasTest($data6)) && p('0:desc:1.1.1:content') && e('输入用户名'); - -// 步骤7:测试处理无编号的纯文本 -$data7 = array( - 0 => array( - 'stepDesc' => '测试内容' - ) -); -r($testcaseTest->processDatasTest($data7)) && p('0:desc:1:content') && e('测试内容'); - -/** - -title=测试 testcaseModel::processDatas(); -timeout=0 -cid=0 - -- 执行testcaseTest模块的processDatasTest方法,参数是$data1 第0条的desc:1:content属性 @打开登录页面 -- 执行testcaseTest模块的processDatasTest方法,参数是$data2 第0条的desc:2:content属性 @第二个步骤 -- 执行testcaseTest模块的processDatasTest方法,参数是$data3 第0条的desc:1:content属性 @登录系统 -- 执行testcaseTest模块的processDatasTest方法,参数是$data4 第0条的expect:1:content属性 @显示登录界面 -- 执行testcaseTest模块的processDatasTest方法,参数是$data5 @rray() -- 执行testcaseTest模块的processDatasTest方法,参数是$data6 第0条的desc:1.1.1:content属性 @输入用户名 -- 执行testcaseTest模块的processDatasTest方法,参数是$data7 第0条的desc:1:content属性 @测试内容 - -*/ \ No newline at end of file diff --git a/module/testcase/test/model/savexmindimport.php b/module/testcase/test/model/savexmindimport.php deleted file mode 100755 index ed24f85191..0000000000 --- a/module/testcase/test/model/savexmindimport.php +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->type->range('normal{5}'); -$product->status->range('normal{5}'); -$product->gen(5); - -$scene = zenData('scene'); -$scene->id->range('1-10'); -$scene->product->range('1-5'); -$scene->title->range('场景1,场景2,场景3,场景4,场景5'); -$scene->parent->range('0{5},1-5'); -$scene->grade->range('1{5},2{5}'); -$scene->path->range(',1,,2,,3,,4,,5,'); -$scene->gen(10); - -$case = zenData('case'); -$case->id->range('1-20'); -$case->product->range('1-5'); -$case->title->range('测试用例1,测试用例2,测试用例3,测试用例4,测试用例5'); -$case->type->range('feature{20}'); -$case->status->range('normal{20}'); -$case->gen(20); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->saveXmindImportTest(array(array('tmpId' => 'scene1', 'tmpPId' => '', 'name' => '测试场景1', 'product' => 1, 'branch' => 0)), array((object)array('tmpPId' => 'scene1', 'title' => '测试用例1', 'product' => 1, 'module' => 0, 'type' => 'feature', 'pri' => 3, 'status' => 'normal', 'stage' => 'unittest', 'story' => 0)))) && p('result') && e('fail'); // 步骤1:场景和用例数据导入失败测试 -r($testcaseTest->saveXmindImportTest(array(), array((object)array('tmpPId' => '', 'title' => '测试用例2', 'product' => 1, 'module' => 0, 'type' => 'feature', 'pri' => 3, 'status' => 'normal', 'stage' => 'unittest', 'story' => 0)))) && p('result') && e('fail'); // 步骤2:空场景列表导入失败测试 -r($testcaseTest->saveXmindImportTest(array(array('tmpId' => 'scene2', 'tmpPId' => '', 'name' => '测试场景2', 'product' => 1, 'branch' => 0)), array())) && p('result') && e('success'); // 步骤3:空用例列表导入成功测试 -r($testcaseTest->saveXmindImportTest(array(array('tmpId' => 'scene3', 'tmpPId' => '', 'name' => '', 'product' => 1, 'branch' => 0)), array())) && p('result') && e('success'); // 步骤4:空场景名称导入测试 -r($testcaseTest->saveXmindImportTest(array(array('tmpId' => 'scene4', 'tmpPId' => '', 'name' => '测试场景4', 'product' => 999, 'branch' => 0)), array())) && p('result') && e('success'); // 步骤5:无效产品ID场景导入测试 \ No newline at end of file diff --git a/module/testcase/test/zen/addeditaction.php b/module/testcase/test/zen/addeditaction.php deleted file mode 100755 index 43ffb38be5..0000000000 --- a/module/testcase/test/zen/addeditaction.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$caseTable->product->range('1-3'); -$caseTable->title->range('测试用例{1-10}'); -$caseTable->status->range('normal{5},wait{3},blocked{2}'); -$caseTable->gen(10); - -$actionTable = zenData('action'); -$actionTable->id->range('1-20'); -$actionTable->objectType->range('case'); -$actionTable->objectID->range('1-10'); -$actionTable->action->range('Edited,Commented,submitReview'); -$actionTable->gen(0); - -$actionProductTable = zenData('actionproduct'); -$actionProductTable->action->range('1-20'); -$actionProductTable->product->range('1-3'); -$actionProductTable->gen(0); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->addEditActionTest(1, 'normal', 'blocked', array('status' => array('normal', 'blocked')), '测试编辑')) && p('result') && e(1); // 步骤1:正常编辑操作 -r($testcaseTest->addEditActionTest(2, 'normal', 'normal', array(), '仅添加评论')) && p('result') && e(1); // 步骤2:仅评论操作 -r($testcaseTest->addEditActionTest(3, 'normal', 'wait', array('status' => array('normal', 'wait')), '提交审核')) && p('result') && e(2); // 步骤3:状态变为wait -r($testcaseTest->addEditActionTest(4, 'blocked', 'blocked', array('title' => array('旧标题', '新标题')), '修改标题')) && p('result') && e(1); // 步骤4:状态不变仅编辑 -r($testcaseTest->addEditActionTest(5, 'wait', 'wait', array(), '')) && p('result') && e(1); // 步骤5:无变更无评论 \ No newline at end of file diff --git a/module/testcase/test/zen/assignbranchforedit.php b/module/testcase/test/zen/assignbranchforedit.php deleted file mode 100755 index f9dddc1f13..0000000000 --- a/module/testcase/test/zen/assignbranchforedit.php +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env php -loadYaml('case_assignbranchforedit', false, 2); -$caseTable->gen(5); - -$branchTable = zenData('branch'); -$branchTable->loadYaml('branch_assignbranchforedit', false, 2); -$branchTable->gen(6); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 步骤1:execution模式下分配分支选项 -$case1 = new stdclass(); -$case1->product = 1; -$case1->project = 1; -$case1->branch = 1; -r($testcaseTest->assignBranchForEditTest($case1, 1, 'execution')) && p('1') && e('分支1'); // 步骤1:execution模式正常情况 - -// 步骤2:project模式下分配分支选项 -$case2 = new stdclass(); -$case2->product = 1; -$case2->project = 2; -$case2->branch = 2; -r($testcaseTest->assignBranchForEditTest($case2, 0, 'project')) && p('2') && e('分支2 (已关闭)'); // 步骤2:project模式正常情况 - -// 步骤3:当前用例分支不在分支列表中时的处理 -$case3 = new stdclass(); -$case3->product = 2; -$case3->project = 1; -$case3->branch = 999; -r($testcaseTest->assignBranchForEditTest($case3, 1, 'execution')) && p('999') && e('0'); // 步骤3:分支缺失处理 - -// 步骤4:包含已关闭状态分支的处理 -$case4 = new stdclass(); -$case4->product = 1; -$case4->project = 1; -$case4->branch = 4; -r($testcaseTest->assignBranchForEditTest($case4, 1, 'execution')) && p('4') && e('分支4 (已关闭)'); // 步骤4:关闭分支处理 - -// 步骤5:测试主分支(BRANCH_MAIN)的特殊处理 -$case5 = new stdclass(); -$case5->product = 1; -$case5->project = 1; -$case5->branch = 0; -r($testcaseTest->assignBranchForEditTest($case5, 1, 'execution')) && p('0') && e('主干'); // 步骤5:主分支处理 \ No newline at end of file diff --git a/module/testcase/test/zen/assigncasesforbrowse.php b/module/testcase/test/zen/assigncasesforbrowse.php deleted file mode 100755 index d1b999239d..0000000000 --- a/module/testcase/test/zen/assigncasesforbrowse.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php -loadYaml('case_assigncasesforbrowse', false, 2); -$case->gen(15); - -$product = zenData('product'); -$product->loadYaml('case_assigncasesforbrowse', false, 2); -$product->gen(3); - -$story = zenData('story'); -$story->loadYaml('case_assigncasesforbrowse', false, 2); -$story->gen(10); - -$module = zenData('module'); -$module->loadYaml('case_assigncasesforbrowse', false, 2); -$module->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->assignCasesForBrowseTest(1, 'all', 'all', 0, 0, '', 'id_desc', 0, 20, 1, 'testcase')) && p('orderBy') && e('id_desc'); // 步骤1:正常产品ID和参数获取用例数据 -r($testcaseTest->assignCasesForBrowseTest(1, 'all', 'wait', 0, 0, '', 'id_desc', 0, 20, 1, 'testcase')) && p('orderBy') && e('id_desc'); // 步骤2:不同browseType参数测试 -r($testcaseTest->assignCasesForBrowseTest(1, 'all', 'all', 0, 0, '', 'caseID_desc', 0, 20, 1, 'testcase')) && p('orderBy') && e('caseID_desc'); // 步骤3:测试排序参数caseID替换功能 -r($testcaseTest->assignCasesForBrowseTest(1, 'all', 'all', 0, 0, '', 'id_desc', 50, 10, 2, 'testcase')) && p('pager:recPerPage') && e('10'); // 步骤4:测试分页参数功能 -r($testcaseTest->assignCasesForBrowseTest(1, 'all', 'all', 0, 0, '', 'id_desc', 0, 20, 1, 'doc')) && p('orderBy') && e('id_desc'); // 步骤5:测试from参数不同值的处理 \ No newline at end of file diff --git a/module/testcase/test/zen/assigncreatescenevars.php b/module/testcase/test/zen/assigncreatescenevars.php deleted file mode 100755 index c91086f3f2..0000000000 --- a/module/testcase/test/zen/assigncreatescenevars.php +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$productTable->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$productTable->type->range('normal{5},branch{5}'); -$productTable->status->range('normal{8},closed{2}'); -$productTable->deleted->range('0{8},1{2}'); -$productTable->gen(10); - -$branchTable = zenData('branch'); -$branchTable->id->range('1-5'); -$branchTable->product->range('6-10'); -$branchTable->name->range('主分支,开发分支,测试分支,发布分支,紧急分支'); -$branchTable->status->range('active{4},closed{1}'); -$branchTable->deleted->range('0'); -$branchTable->gen(5); - -$moduleTable = zenData('module'); -$moduleTable->id->range('1-10'); -$moduleTable->root->range('1-10'); -$moduleTable->name->range('模块1,模块2,模块3,模块4,模块5,模块6,模块7,模块8,模块9,模块10'); -$moduleTable->type->range('case{10}'); -$moduleTable->deleted->range('0{8},1{2}'); -$moduleTable->gen(10); - -$sceneTable = zenData('scene'); -$sceneTable->id->range('1-5'); -$sceneTable->product->range('1-5'); -$sceneTable->module->range('1-5'); -$sceneTable->title->range('场景1,场景2,场景3,场景4,场景5'); -$sceneTable->deleted->range('0'); -$sceneTable->gen(5); - -su('admin'); - -$testcaseTest = new testcaseTest(); - -r($testcaseTest->assignCreateSceneVarsTest(1)) && p('product:name') && e('产品1'); -r($testcaseTest->assignCreateSceneVarsTest(1, '1')) && p('branch') && e('1'); -r($testcaseTest->assignCreateSceneVarsTest(1, '', 5)) && p('moduleID') && e(5); -r($testcaseTest->assignCreateSceneVarsTest(999, '', 0)) && p('moduleID') && e(0); -r($testcaseTest->assignCreateSceneVarsTest(2, '', 0)) && p('product:name') && e('产品2'); \ No newline at end of file diff --git a/module/testcase/test/zen/assigncreatevars.php b/module/testcase/test/zen/assigncreatevars.php deleted file mode 100755 index 7060e9a5ba..0000000000 --- a/module/testcase/test/zen/assigncreatevars.php +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$product->name->range('产品{1-10}'); -$product->code->range('P{001-010}'); -$product->type->range('normal{7},branch{3}'); -$product->status->range('normal'); -$product->PO->range('admin'); -$product->QD->range('admin'); -$product->RD->range('admin'); -$product->acl->range('open'); -$product->createdBy->range('admin'); -$product->createdDate->range('`2023-01-01 10:00:00`'); -$product->createdVersion->range('1.0'); -$product->deleted->range('0'); -$product->gen(10); - -$branch = zenData('branch'); -$branch->id->range('1-5'); -$branch->product->range('1,1,1,2,2'); -$branch->name->range('main,develop,feature,release,hotfix'); -$branch->status->range('active'); -$branch->createdDate->range('`2023-01-01`'); -$branch->deleted->range('0'); -$branch->gen(5); - -$story = zenData('story'); -$story->id->range('1-8'); -$story->product->range('1{5},2{3}'); -$story->title->range('用户登录功能,产品管理功能,测试用例管理,缺陷跟踪功能,项目管理功能,报表统计功能,系统设置功能,权限管理功能'); -$story->type->range('story'); -$story->status->range('active'); -$story->openedBy->range('admin'); -$story->openedDate->range('`2023-01-01 10:00:00`'); -$story->version->range('1'); -$story->deleted->range('0'); -$story->gen(8); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->assignCreateVarsTest(1, '', 0, '', 0, 0)) && p('productSet,hasView,viewProduct') && e('1,1,1'); // 步骤1:正常产品ID调用 -r($testcaseTest->assignCreateVarsTest(1, 'main', 1821, '', 0, 0)) && p('productSet,viewBranch') && e('1,main'); // 步骤2:带分支参数调用 -r($testcaseTest->assignCreateVarsTest(1, '', 0, 'project', 1, 0)) && p('productSet,viewProjectID') && e('1,1'); // 步骤3:来源为project调用 -r($testcaseTest->assignCreateVarsTest(1, '', 0, 'execution', 1, 0)) && p('productSet,viewExecutionID') && e('1,1'); // 步骤4:来源为execution调用 -r($testcaseTest->assignCreateVarsTest(1, '', 0, '', 0, 1)) && p('productSet,hasView') && e('1,1'); // 步骤5:带故事ID调用 \ No newline at end of file diff --git a/module/testcase/test/zen/assignforbatchcreate.php b/module/testcase/test/zen/assignforbatchcreate.php deleted file mode 100755 index 9782f415be..0000000000 --- a/module/testcase/test/zen/assignforbatchcreate.php +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_assignforbatchcreate', false, 2); -$productTable->gen(5); - -$storyTable = zenData('story'); -$storyTable->loadYaml('story_assignforbatchcreate', false, 2); -$storyTable->gen(10); - -$branchTable = zenData('branch'); -$branchTable->loadYaml('branch_assignforbatchcreate', false, 2); -$branchTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->assignForBatchCreateTest(1, '', 0, 0)) && p('result') && e('1'); // 步骤1:正常情况 -r($testcaseTest->assignForBatchCreateTest(2, 'main', 0, 0)) && p('result') && e('1'); // 步骤2:branch类型产品 -r($testcaseTest->assignForBatchCreateTest(1, '', 0, 1)) && p('result') && e('1'); // 步骤3:指定需求ID -r($testcaseTest->assignForBatchCreateTest(999, '', 0, 0)) && p('message') && e('Product not found'); // 步骤4:无效产品ID -r($testcaseTest->assignForBatchCreateTest(1, '', 2, 3)) && p('result,currentModuleID') && e('1,2'); // 步骤5:指定模块和需求 \ No newline at end of file diff --git a/module/testcase/test/zen/assignforbatchedit.php b/module/testcase/test/zen/assignforbatchedit.php deleted file mode 100755 index 4f35daf31d..0000000000 --- a/module/testcase/test/zen/assignforbatchedit.php +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env php -loadYaml('product_assignforbatchedit', false, 2)->gen(5); -zendata('branch')->loadYaml('branch_assignforbatchedit', false, 2)->gen(8); -zendata('case')->loadYaml('case_assignforbatchedit', false, 2)->gen(10); -zendata('module')->loadYaml('module_assignforbatchedit', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 准备测试用例数据 -$normalCases = array( - (object)array('id' => 1, 'product' => 1, 'branch' => 0, 'lib' => 0, 'module' => 1821, 'story' => 1), - (object)array('id' => 2, 'product' => 1, 'branch' => 0, 'lib' => 0, 'module' => 1822, 'story' => 2), - (object)array('id' => 3, 'product' => 1, 'branch' => 0, 'lib' => 0, 'module' => 1823, 'story' => 0) -); - -$branchCases = array( - (object)array('id' => 4, 'product' => 2, 'branch' => 1, 'lib' => 0, 'module' => 1824, 'story' => 3), - (object)array('id' => 5, 'product' => 2, 'branch' => 2, 'lib' => 0, 'module' => 1825, 'story' => 4) -); - -$multiBranchCases = array( - (object)array('id' => 6, 'product' => 3, 'branch' => 1, 'lib' => 0, 'module' => 1826, 'story' => 1), - (object)array('id' => 7, 'product' => 3, 'branch' => 2, 'lib' => 0, 'module' => 1827, 'story' => 2) -); - -$emptyCases = array(); - -$multiProductCases = array( - (object)array('id' => 8, 'product' => 1, 'branch' => 0, 'lib' => 0, 'module' => 1828, 'story' => 1), - (object)array('id' => 9, 'product' => 2, 'branch' => 1, 'lib' => 0, 'module' => 1829, 'story' => 2), - (object)array('id' => 10, 'product' => 3, 'branch' => 0, 'lib' => 0, 'module' => 1830, 'story' => 0) -); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->assignForBatchEditTest(1, '0', 'case', $normalCases)) && p('products') && e('1'); // 步骤1:正常产品情况 -r($testcaseTest->assignForBatchEditTest(2, '1', 'case', $branchCases)) && p('branchProduct') && e('0'); // 步骤2:分支产品情况 -r($testcaseTest->assignForBatchEditTest(3, 'all', 'case', $multiBranchCases)) && p('branchProduct') && e('0'); // 步骤3:多分支情况 -r($testcaseTest->assignForBatchEditTest(1, '0', 'case', $emptyCases)) && p('products') && e('1'); // 步骤4:空用例数组 -r($testcaseTest->assignForBatchEditTest(1, '0', 'case', $multiProductCases)) && p('products') && e('1'); // 步骤5:多产品用例 \ No newline at end of file diff --git a/module/testcase/test/zen/assignforbrowse.php b/module/testcase/test/zen/assignforbrowse.php deleted file mode 100755 index 659cd7a9a5..0000000000 --- a/module/testcase/test/zen/assignforbrowse.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$product->name->range('产品1,产品2,产品3,产品4,产品5,测试产品{5}'); -$product->type->range('normal{8},branch{2}'); -$product->status->range('normal{8},closed{2}'); -$product->deleted->range('0'); -$product->gen(10); - -$project = zenData('project'); -$project->id->range('1-10'); -$project->name->range('项目1,项目2,项目3,项目4,项目5,测试项目{5}'); -$project->model->range('scrum{4},waterfall{3},kanban{3}'); -$project->type->range('project{6},sprint{4}'); -$project->status->range('wait{2},doing{4},suspended{2},done{2}'); -$project->deleted->range('0'); -$project->gen(10); - -$module = zenData('module'); -$module->id->range('1-20'); -$module->root->range('1-5'); -$module->name->range('需求管理,用户管理,系统设置,测试模块,接口模块,前端模块,后端模块,数据库模块,安全模块,性能模块{10}'); -$module->parent->range('0{10},1{5},2{3},3{2}'); -$module->type->range('case{15},story{5}'); -$module->deleted->range('0'); -$module->gen(20); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->assignForBrowseTest(1, '0', 'all', 1, 0, 1, 0, 'feature')) && p('productID') && e('1'); // 步骤1:正常情况 -r($testcaseTest->assignForBrowseTest(2, '0', 'bysearch', 0, 0, 2, 0, 'performance')) && p('projectID') && e('0'); // 步骤2:无项目ID -r($testcaseTest->assignForBrowseTest(3, '0', 'bymodule', 2, 0, 0, 0, 'config')) && p('moduleName') && e('所有模块'); // 步骤3:无模块ID -r($testcaseTest->assignForBrowseTest(4, 'all', 'all', 3, 0, 3, 1, 'interface')) && p('browseType') && e('all'); // 步骤4:分支为all -r($testcaseTest->assignForBrowseTest(5, '1', 'assignedtome', 4, 10, 4, 2, 'unit')) && p('param') && e('10'); // 步骤5:不同浏览类型 \ No newline at end of file diff --git a/module/testcase/test/zen/assignmoduleoptionmenuforedit.php b/module/testcase/test/zen/assignmoduleoptionmenuforedit.php deleted file mode 100755 index 547ecc64cd..0000000000 --- a/module/testcase/test/zen/assignmoduleoptionmenuforedit.php +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env php -id->range('1001-1010'); -$moduleTable->root->range('1{5}, 2{5}'); -$moduleTable->name->range('模块A,模块B,模块C,模块D,模块E,模块F,模块G,模块H,模块I,模块J'); -$moduleTable->type->range('case'); -$moduleTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -// 步骤1:测试普通产品用例的模块选项菜单分配 -$case1 = new stdclass(); -$case1->product = 1; -$case1->module = 1001; -$case1->branch = '1'; -$case1->lib = 0; -$case1->fromCaseID = 0; -r($testcaseTest->assignModuleOptionMenuForEditTest($case1)) && p('1001') && e('/1'); // 步骤1:普通产品用例 - -// 步骤2:测试空模块的边界情况处理 -$case2 = new stdclass(); -$case2->product = 1; -$case2->module = 0; -$case2->branch = '1'; -$case2->lib = 0; -$case2->fromCaseID = 0; -r($testcaseTest->assignModuleOptionMenuForEditTest($case2)) && p('0') && e('/'); // 步骤2:空模块处理 - -// 步骤3:测试用例模块不在当前菜单中的处理 -$case3 = new stdclass(); -$case3->product = 1; -$case3->module = 9999; -$case3->branch = '1'; -$case3->lib = 0; -$case3->fromCaseID = 0; -r($testcaseTest->assignModuleOptionMenuForEditTest($case3)) && p('9999') && e('~~'); // 步骤3:缺失模块处理 - -// 步骤4:测试空分支的用例模块选项菜单分配 -$case4 = new stdclass(); -$case4->product = 1; -$case4->module = 1002; -$case4->branch = ''; -$case4->lib = 0; -$case4->fromCaseID = 0; -r($testcaseTest->assignModuleOptionMenuForEditTest($case4)) && p('1002') && e('/2'); // 步骤4:空分支处理 - -// 步骤5:测试大模块ID的边界情况 -$case5 = new stdclass(); -$case5->product = 2; -$case5->module = 1005; -$case5->branch = '0'; -$case5->lib = 0; -$case5->fromCaseID = 0; -r($testcaseTest->assignModuleOptionMenuForEditTest($case5)) && p('1005') && e('/5'); // 步骤5:大ID模块处理 \ No newline at end of file diff --git a/module/testcase/test/zen/assignproductandbranchforbrowse.php b/module/testcase/test/zen/assignproductandbranchforbrowse.php deleted file mode 100755 index 492709212e..0000000000 --- a/module/testcase/test/zen/assignproductandbranchforbrowse.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$productTable->name->range('普通产品,分支产品A,分支产品B,正常产品,测试产品'); -$productTable->type->range('normal,branch,branch,normal,normal'); -$productTable->status->range('normal{5}'); -$productTable->deleted->range('0{5}'); -$productTable->gen(5); - -$branchTable = zenData('branch'); -$branchTable->id->range('1-6'); -$branchTable->product->range('2{3},3{3}'); -$branchTable->name->range('主分支,开发分支,发布分支,分支1,分支2,分支3'); -$branchTable->status->range('active{4},closed{2}'); -$branchTable->deleted->range('0{6}'); -$branchTable->gen(6); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例 -$testcaseTest = new testcaseTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->assignProductAndBranchForBrowseTest(1, '', 0)) && p('productID,productName,branch') && e('1,普通产品,0'); // 步骤1:普通产品类型 -r($testcaseTest->assignProductAndBranchForBrowseTest(2, 'main', 0)) && p('productID,productName,branch') && e('2,分支产品A,main'); // 步骤2:分支产品类型 -r($testcaseTest->assignProductAndBranchForBrowseTest(999, '', 0)) && p('productID') && e('999'); // 步骤3:不存在的产品ID -r($testcaseTest->assignProductAndBranchForBrowseTest(0, '', 0)) && p('productID') && e('0'); // 步骤4:空的产品ID -r($testcaseTest->assignProductAndBranchForBrowseTest(3, 'dev', 100)) && p('productID,productName,branch') && e('3,分支产品B,dev'); // 步骤5:带项目ID的分支产品 \ No newline at end of file diff --git a/module/testcase/test/zen/assignshowimportvars.php b/module/testcase/test/zen/assignshowimportvars.php deleted file mode 100755 index ec8a3b9652..0000000000 --- a/module/testcase/test/zen/assignshowimportvars.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -gen('5'); -zenData('branch')->gen('5'); -zenData('module')->gen('10'); -zenData('story')->gen('15'); -zenData('user')->gen('1'); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 测试步骤1:正常情况 - 提供有效数据 -$caseData1 = array( - array('title' => '测试用例1', 'module' => 1), - array('title' => '测试用例2', 'module' => 2), - array('title' => '测试用例3', 'module' => 3) -); -r($testcaseTest->assignShowImportVarsTest(1, '0', $caseData1, 10, 1, 100)) && p('allCount') && e('3'); - -// 测试步骤2:空用例数据 - 期望错误处理 -r($testcaseTest->assignShowImportVarsTest(1, '0', array(), 0, 1, 100)) && p('error') && e('noData'); - -// 测试步骤3:大量用例数据 - 超过最大导入数量(创建150个用例,超过系统限制100) -$largeCaseData = array(); -for($i = 1; $i <= 150; $i++) { - $largeCaseData[] = array('title' => "测试用例{$i}", 'module' => ($i % 5) + 1); -} -r($testcaseTest->assignShowImportVarsTest(1, '0', $largeCaseData, 50, 1, 10)) && p('allCount') && e('150'); - -// 测试步骤4:边界值测试 - maxImport=0,应该显示导入限制页面 -r($testcaseTest->assignShowImportVarsTest(1, '0', $largeCaseData, 50, 1, 0)) && p('showMaxImportPage') && e('1'); - -// 测试步骤5:分页功能测试 - 测试第二页 -r($testcaseTest->assignShowImportVarsTest(1, '0', $largeCaseData, 50, 2, 10)) && p('allPager') && e('15'); \ No newline at end of file diff --git a/module/testcase/test/zen/assigntitleforbatchedit.php b/module/testcase/test/zen/assigntitleforbatchedit.php deleted file mode 100755 index d0b8a1b6ed..0000000000 --- a/module/testcase/test/zen/assigntitleforbatchedit.php +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('产品1,产品2,产品3,产品4,产品5'); -$table->type->range('normal{3},branch{2}'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 创建测试用例对象 -$libCases = array(); -$productCases = array(); -$mixedCases = array(); - -for($i = 1; $i <= 3; $i++) -{ - $case = new stdClass(); - $case->id = $i; - $case->product = 0; - $case->lib = $i; - $libCases[] = $case; -} - -for($i = 4; $i <= 7; $i++) -{ - $case = new stdClass(); - $case->id = $i; - $case->product = $i - 3; - $case->lib = 0; - $productCases[] = $case; - $mixedCases[] = $case; -} - -for($i = 8; $i <= 10; $i++) -{ - $case = new stdClass(); - $case->id = $i; - $case->product = 0; - $case->lib = $i - 7; - $mixedCases[] = $case; -} - -r($testcaseTest->assignTitleForBatchEditTest(1, '', 'lib', $libCases)) && p('1:0') && e('1'); // 步骤1:lib类型用例处理 -r($testcaseTest->assignTitleForBatchEditTest(1, '', '', $productCases)) && p('0:0') && e('1'); // 步骤2:product类型用例处理 -r($testcaseTest->assignTitleForBatchEditTest(0, '', '', $mixedCases)) && p('0:1') && e('1'); // 步骤3:地盘标签下混合用例 -r($testcaseTest->assignTitleForBatchEditTest(1, '', '', array())) && p('0:0') && e('1'); // 步骤4:空cases数组 -r($testcaseTest->assignTitleForBatchEditTest(0, '', 'unknown', array())) && p('') && e('Array'); // 步骤5:未知类型处理 \ No newline at end of file diff --git a/module/testcase/test/zen/buildbrowsesearchform.php b/module/testcase/test/zen/buildbrowsesearchform.php deleted file mode 100755 index 839630ff96..0000000000 --- a/module/testcase/test/zen/buildbrowsesearchform.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -gen(5); - -su('admin'); - -$testcase = new testcaseTest(); - -r($testcase->buildBrowseSearchFormTest(1, 0, 1, '/testcase-browse-1.html', 'testcase')) && p('onMenuBar,searchProductsCount') && e('yes,5'); // 测试步骤1:正常情况下构建搜索表单 -r($testcase->buildBrowseSearchFormTest(1, 0, 1, '/testcase-browse-1.html', 'other')) && p('onMenuBar') && e('~~'); // 测试步骤2:非testcase模块不设置onMenuBar -r($testcase->buildBrowseSearchFormTest(2, 0, 1, '/testcase-browse-2.html', 'testcase')) && p('onMenuBar,searchProductsCount') && e('yes,5'); // 测试步骤3:不同productID的搜索表单构建 -r($testcase->buildBrowseSearchFormTest(1, 1, 2, '/testcase-browse-1.html', 'testcase')) && p('onMenuBar,searchFieldsCount') && e('yes,20'); // 测试步骤4:不同projectID的搜索表单构建 -r($testcase->buildBrowseSearchFormTest(1, 2, 1, '/testcase-browse-1.html', 'testcase')) && p('onMenuBar,searchFieldsCount') && e('yes,20'); // 测试步骤5:不同queryID的搜索表单构建 \ No newline at end of file diff --git a/module/testcase/test/zen/buildcasesforbathccreate.php b/module/testcase/test/zen/buildcasesforbathccreate.php deleted file mode 100755 index eb9265410a..0000000000 --- a/module/testcase/test/zen/buildcasesforbathccreate.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->type->range('normal{3},branch{2}'); -$product->status->range('normal{5}'); -$product->gen(5); - -$story = zenData('story'); -$story->id->range('1-10'); -$story->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10'); -$story->product->range('1-5'); -$story->status->range('active{10}'); -$story->version->range('1{10}'); -$story->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->buildCasesForBathcCreateTest(1)) && p('0:product') && e('1'); // 步骤1:正常情况 -r($testcaseTest->buildCasesForBathcCreateTest(2)) && p('0:product') && e('2'); // 步骤2:不同产品ID -r($testcaseTest->buildCasesForBathcCreateTest(0)) && p('0:product') && e('0'); // 步骤3:无效产品ID -r($testcaseTest->buildCasesForBathcCreateTest(999)) && p('0:product') && e('999'); // 步骤4:不存在的产品ID -r($testcaseTest->buildCasesForBathcCreateTest(1)) && p('0:openedBy') && e('admin'); // 步骤5:验证openedBy字段 \ No newline at end of file diff --git a/module/testcase/test/zen/buildlinkcasessearchform.php b/module/testcase/test/zen/buildlinkcasessearchform.php deleted file mode 100755 index 09abc236e5..0000000000 --- a/module/testcase/test/zen/buildlinkcasessearchform.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$caseTable->product->range('1-2'); -$caseTable->project->range('1-3'); -$caseTable->execution->range('1-3'); -$caseTable->title->range('TestCase{1-5}'); -$caseTable->status->range('normal{3},wait{2}'); -$caseTable->type->range('feature{3},interface{2}'); -$caseTable->gen(5); - -$productTable = zenData('product'); -$productTable->id->range('1-2'); -$productTable->name->range('Product{1-2}'); -$productTable->type->range('normal'); -$productTable->status->range('normal'); -$productTable->gen(2); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -$case = new stdclass(); -$case->id = 1; -$case->product = 1; -$case->project = 1; -$case->execution = 1; - -r($testcaseTest->buildLinkCasesSearchFormTest($case, 0)) && p('hasProductField') && e('0'); // 步骤1:正常情况,product字段应被移除 - -global $tester; -$tester->app->tab = 'project'; -r($testcaseTest->buildLinkCasesSearchFormTest($case, 0)) && p('objectID') && e('1'); // 步骤2:project标签页,objectID为项目ID - -$tester->app->tab = 'execution'; -r($testcaseTest->buildLinkCasesSearchFormTest($case, 0)) && p('objectID') && e('1'); // 步骤3:execution标签页,objectID为执行ID - -$tester->app->tab = ''; -r($testcaseTest->buildLinkCasesSearchFormTest($case, 1)) && p('hasProductField') && e('0'); // 步骤4:确认product字段被移除 - -r($testcaseTest->buildLinkCasesSearchFormTest($case, 5)) && p('actionURL') && e('/testcase-linkCases-caseID=1&browseType=bySearch&queryID=myQueryID'); // 步骤5:验证actionURL格式 \ No newline at end of file diff --git a/module/testcase/test/zen/buildupdatecaseforshowimport.php b/module/testcase/test/zen/buildupdatecaseforshowimport.php deleted file mode 100755 index 5262677f66..0000000000 --- a/module/testcase/test/zen/buildupdatecaseforshowimport.php +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$caseTable->product->range('1-3'); -$caseTable->title->range('测试用例{1-10}'); -$caseTable->version->range('1-5'); -$caseTable->status->range('normal{5},blocked{3},investigate{2}'); -$caseTable->gen(10); - -$stepTable = zenData('casestep'); -$stepTable->id->range('1-20'); -$stepTable->case->range('1-10'); -$stepTable->version->range('1-5'); -$stepTable->type->range('step{15},group{3},item{2}'); -$stepTable->desc->range('打开页面,输入用户名,输入密码,点击登录,验证结果'); -$stepTable->expect->range('页面正常显示,用户名输入成功,密码输入成功,登录成功,验证通过'); -$stepTable->gen(20); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 构建测试数据 -// 构建新的case对象 -$case = new stdClass(); -$case->desc = array('打开页面', '输入用户名', '输入密码'); -$case->expect = array('页面正常显示', '用户名输入成功', '密码输入成功'); -$case->stepType = array('step', 'step', 'step'); - -// 构建旧的case对象 -$oldCase = new stdClass(); -$oldCase->version = 1; -$oldCase->status = 'normal'; - -// 构建旧的步骤数组 -$oldStep = array(); -$step1 = new stdClass(); -$step1->desc = '打开页面'; -$step1->expect = '页面正常显示'; -$step1->type = 'step'; -$oldStep[] = $step1; - -$step2 = new stdClass(); -$step2->desc = '输入用户名'; -$step2->expect = '用户名输入成功'; -$step2->type = 'step'; -$oldStep[] = $step2; - -$step3 = new stdClass(); -$step3->desc = '输入密码'; -$step3->expect = '密码输入成功'; -$step3->type = 'step'; -$oldStep[] = $step3; - -// 6. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->buildUpdateCaseForShowImportTest($case, $oldCase, $oldStep, false)) && p() && e('0'); // 步骤1:步骤数量相同且内容未变化 - -// 步骤2:步骤数量发生变化的情况 -$caseChanged = clone $case; -$caseChanged->desc[] = '点击登录'; -$caseChanged->expect[] = '登录成功'; -$caseChanged->stepType[] = 'step'; -r($testcaseTest->buildUpdateCaseForShowImportTest($caseChanged, $oldCase, $oldStep, false)) && p() && e('1'); - -// 步骤3:步骤数量相同但描述内容发生变化 -$caseDescChanged = clone $case; -$caseDescChanged->desc[0] = '打开登录页面'; -r($testcaseTest->buildUpdateCaseForShowImportTest($caseDescChanged, $oldCase, $oldStep, false)) && p() && e('1'); - -// 步骤4:步骤数量相同但期望内容发生变化 -$caseExpectChanged = clone $case; -$caseExpectChanged->expect[0] = '登录页面正常显示'; -r($testcaseTest->buildUpdateCaseForShowImportTest($caseExpectChanged, $oldCase, $oldStep, false)) && p() && e('1'); - -// 步骤5:forceNotReview为true时不改变状态 -$caseForceNotReview = clone $caseDescChanged; -$oldStatusExists = isset($caseForceNotReview->status); -$result = $testcaseTest->buildUpdateCaseForShowImportTest($caseForceNotReview, $oldCase, $oldStep, true); -r($result) && p() && e('1'); \ No newline at end of file diff --git a/module/testcase/test/zen/checkcasesforshowimport.php b/module/testcase/test/zen/checkcasesforshowimport.php deleted file mode 100755 index e1dc5d1c35..0000000000 --- a/module/testcase/test/zen/checkcasesforshowimport.php +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env php -checkCasesForShowImportTest($emptyCases)) && p() && e('0'); - -// 步骤2:正常情况 - 有效测试用例数组 -$validCases = array( - (object)array( - 'title' => '测试用例1', - 'type' => 'feature', - 'steps' => array(1 => '步骤1', 2 => '步骤2'), - 'expects' => array(1 => '期望1', 2 => '期望2') - ) -); -r($testcaseTest->checkCasesForShowImportTest($validCases)) && p('0:title') && e('测试用例1'); - -// 步骤3:边界值 - 有期望但无对应步骤 -$invalidStepsCases = array( - (object)array( - 'title' => '测试用例2', - 'type' => 'feature', - 'steps' => array(1 => '步骤1'), - 'expects' => array(1 => '期望1', 2 => '期望2') - ) -); -r($testcaseTest->checkCasesForShowImportTest($invalidStepsCases)) && p('steps[0]') && e('步骤2不能为空'); - -// 步骤4:异常输入 - title字段为空 -$emptyTitleCases = array( - (object)array( - 'title' => '', - 'type' => 'feature', - 'steps' => array(1 => '步骤1'), - 'expects' => array(1 => '期望1') - ) -); -r($testcaseTest->checkCasesForShowImportTest($emptyTitleCases)) && p('title[0]') && e('『用例名称』不能为空。'); - -// 步骤5:权限验证 - type字段为空 -$emptyTypeCases = array( - (object)array( - 'title' => '测试用例', - 'type' => '', - 'steps' => array(1 => '步骤1'), - 'expects' => array(1 => '期望1') - ) -); -r($testcaseTest->checkCasesForShowImportTest($emptyTypeCases)) && p('type[0]') && e('『用例类型』不能为空。'); \ No newline at end of file diff --git a/module/testcase/test/zen/checkproducts.php b/module/testcase/test/zen/checkproducts.php deleted file mode 100755 index df66fec2e4..0000000000 --- a/module/testcase/test/zen/checkproducts.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('产品1,产品2,产品3,产品4,产品5'); -$product->status->range('normal{5}'); -$product->deleted->range('0{5}'); -$product->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->checkProductsTest(array(1 => '产品1', 2 => '产品2'), 'qa', 0, 0, false, false)) && p() && e('no_redirect'); // 步骤1:qa模式下有产品的情况 -r($testcaseTest->checkProductsTest(array(), 'qa', 0, 0, false, false)) && p() && e('no_redirect'); // 步骤2:qa模式下无产品但非AJAX请求 -r($testcaseTest->checkProductsTest(array(), 'qa', 0, 0, true, false)) && p() && e('redirect_to_error_page'); // 步骤3:qa模式下无产品且为AJAX zin请求 -r($testcaseTest->checkProductsTest(array(1 => '产品1'), 'project', 1, 0, false, false)) && p() && e('no_redirect'); // 步骤4:project模式下有产品的情况 -r($testcaseTest->checkProductsTest(array(), 'execution', 0, 1, false, true)) && p() && e('redirect_to_error_page'); // 步骤5:execution模式下无产品且为AJAX fetch请求 \ No newline at end of file diff --git a/module/testcase/test/zen/getbrowsebranch.php b/module/testcase/test/zen/getbrowsebranch.php deleted file mode 100755 index de22a0df5f..0000000000 --- a/module/testcase/test/zen/getbrowsebranch.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -getBrowseBranchTest('', 'test_branch')) && p() && e('test_branch'); // 步骤1:空字符串时返回cookie中的preBranch -r($testcaseTest->getBrowseBranchTest('main', 'test_branch')) && p() && e('main'); // 步骤2:非空字符串直接返回 -r($testcaseTest->getBrowseBranchTest('', '')) && p() && e('0'); // 步骤3:空字符串且preBranch也为空时返回0 -r($testcaseTest->getBrowseBranchTest('develop', 'test_branch')) && p() && e('develop'); // 步骤4:另一个非空字符串测试 -r($testcaseTest->getBrowseBranchTest('feature/test', 'test_branch')) && p() && e('feature/test'); // 步骤5:包含特殊字符的分支名 \ No newline at end of file diff --git a/module/testcase/test/zen/getgroupcases.php b/module/testcase/test/zen/getgroupcases.php deleted file mode 100755 index 8c4f73310c..0000000000 --- a/module/testcase/test/zen/getgroupcases.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -loadYaml('case_getgroupcases', false, 2)->gen(10); -zendata('story')->loadYaml('story_getgroupcases', false, 2)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->getGroupCasesTest(1, '0', 'story', 'feature', 'all')) && p('1:rowspan') && e('1'); // 步骤1:正常情况,按story分组验证rowspan -r($testcaseTest->getGroupCasesTest(0, '0', 'story', 'feature', 'all')) && p() && e('0'); // 步骤2:边界值,productID=0 -r($testcaseTest->getGroupCasesTest(1, '0', 'module', 'feature', 'all')) && p('1:rowspan') && e('0'); // 步骤3:非story分组时rowspan为0 -r($testcaseTest->getGroupCasesTest(999, '0', 'story', 'feature', 'all')) && p() && e('0'); // 步骤4:不存在用例数据的产品 -r($testcaseTest->getGroupCasesTest(1, '0', 'story', 'feature', 'all')) && p('1:caseID') && e('1'); // 步骤5:验证caseID正确设置 -r($testcaseTest->getGroupCasesTest(1, '0', 'story', 'feature', 'all')) && p('1:title') && e('这个是测试用例1'); // 步骤6:验证用例标题 \ No newline at end of file diff --git a/module/testcase/test/zen/getimporteddata.php b/module/testcase/test/zen/getimporteddata.php deleted file mode 100755 index a3e840eb93..0000000000 --- a/module/testcase/test/zen/getimporteddata.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$product->name->range('禅道项目管理,测试产品{3},演示产品'); -$product->code->range('zentao,test{3},demo'); -$product->type->range('normal'); -$product->status->range('normal'); -$product->deleted->range('0'); -$product->gen(5); - -$case = zenData('case'); -zendata('case')->loadYaml('case_getimporteddata', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->getImportedDataTest(1, '')) && p('0:caseData') && e(array()); // 步骤1:空文件路径 -r($testcaseTest->getImportedDataTest(0, '')) && p('0:caseData') && e(array()); // 步骤2:无效产品ID -r($testcaseTest->getImportedDataTest(-1, '')) && p('0:caseData') && e(array()); // 步骤3:负数产品ID -r($testcaseTest->getImportedDataTest(999, '')) && p('0:caseData') && e(array()); // 步骤4:不存在产品ID -r($testcaseTest->getImportedDataTest(1, 'nonexistent.csv')) && p('0:caseData') && e(array()); // 步骤5:不存在文件 \ No newline at end of file diff --git a/module/testcase/test/zen/getimportfield.php b/module/testcase/test/zen/getimportfield.php deleted file mode 100755 index 252d27b8ee..0000000000 --- a/module/testcase/test/zen/getimportfield.php +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env php -getImportFieldTest('story', '用户登录功能(#123)', $case1)) && p('story') && e('123'); -r($testcaseTest->getImportFieldTest('module', '系统管理模块(#456)', $case2)) && p('module') && e('456'); -r($testcaseTest->getImportFieldTest('stepDesc', '1. 打开登录页面\n2. 输入用户名密码', $case3)) && p('steps') && e('1. 打开登录页面\n2. 输入用户名密码'); -r($testcaseTest->getImportFieldTest('stepExpect', '1. 页面正常显示\n2. 登录成功', $case4)) && p('expects') && e('1. 页面正常显示\n2. 登录成功'); -r($testcaseTest->getImportFieldTest('stage', "功能测试阶段\n集成测试阶段", $case5)) && p('stage') && e('feature,intergrate'); -r($testcaseTest->getImportFieldTest('type', '功能测试', $case6)) && p('type') && e('feature'); -r($testcaseTest->getImportFieldTest('title', '测试用例标题', $case7)) && p('title') && e('测试用例标题'); \ No newline at end of file diff --git a/module/testcase/test/zen/importcases.php b/module/testcase/test/zen/importcases.php deleted file mode 100755 index 0b2ffa14fb..0000000000 --- a/module/testcase/test/zen/importcases.php +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$case->project->range('1{5}'); -$case->product->range('1{5}'); -$case->execution->range('1{5}'); -$case->branch->range('0{5}'); -$case->lib->range('0{5}'); -$case->module->range('1{5}'); -$case->story->range('0{5}'); -$case->storyVersion->range('1{5}'); -$case->title->range('原始测试用例1,原始测试用例2,原始测试用例3,原始测试用例4,原始测试用例5'); -$case->pri->range('3{5}'); -$case->type->range('feature{5}'); -$case->status->range('normal{5}'); -$case->version->range('1{5}'); -$case->openedBy->range('admin{5}'); -$case->openedDate->range('`2024-01-01 10:00:00`{5}'); -$case->lastEditedBy->range('admin{5}'); -$case->lastEditedDate->range('`2024-01-01 10:00:00`{5}'); -$case->deleted->range('0{5}'); -$case->gen(5); - -$product = zenData('product'); -$product->id->range('1-5'); -$product->name->range('产品A,产品B,产品C,产品D,产品E'); -$product->status->range('normal{5}'); -$product->deleted->range('0{5}'); -$product->gen(5); - -$project = zenData('project'); -$project->id->range('1-3'); -$project->name->range('项目A,项目B,项目C'); -$project->type->range('project{3}'); -$project->status->range('doing{3}'); -$project->deleted->range('0{3}'); -$project->gen(3); - -$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); - -$module = zenData('module'); -$module->id->range('1-5'); -$module->root->range('1{5}'); -$module->name->range('模块A,模块B,模块C,模块D,模块E'); -$module->type->range('story{5}'); -$module->deleted->range('0{5}'); -$module->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 测试步骤1:导入空用例数组 -$emptyCases = array(); -r($testcaseTest->importCasesTest($emptyCases)) && p() && e(array()); // 步骤1:正常情况 - -// 测试步骤2:导入新测试用例(无ID) -$newCases = array(); -$newCase = new stdClass(); -$newCase->product = 1; -$newCase->title = '新导入用例'; -$newCase->type = 'feature'; -$newCase->pri = 3; -$newCase->status = 'normal'; -$newCase->openedBy = 'admin'; -$newCase->openedDate = '2024-01-01 10:00:00'; -$newCases[] = $newCase; -r($testcaseTest->importCasesTest($newCases)) && p('0:title') && e('新导入用例'); // 步骤2:边界值 - -// 测试步骤3:导入已有测试用例(有ID)进行更新 -$updateCases = array(); -$updateCase = new stdClass(); -$updateCase->id = 1; -$updateCase->product = 1; -$updateCase->title = '更新的测试用例标题'; -$updateCase->type = 'feature'; -$updateCase->pri = 1; -$updateCase->status = 'normal'; -$updateCase->lastEditedBy = 'admin'; -$updateCase->lastEditedDate = '2024-01-01 10:00:00'; -$updateCases[] = $updateCase; -r($testcaseTest->importCasesTest($updateCases)) && p('0:title') && e('更新的测试用例标题'); // 步骤3:异常输入 - -// 测试步骤4:导入产品不匹配的用例(应跳过) -$mismatchCases = array(); -$mismatchCase = new stdClass(); -$mismatchCase->id = 1; -$mismatchCase->product = 2; // 不匹配现有用例的产品 -$mismatchCase->title = '产品不匹配的用例'; -$mismatchCase->type = 'feature'; -$mismatchCase->pri = 3; -$mismatchCase->status = 'normal'; -$mismatchCase->lastEditedBy = 'admin'; -$mismatchCase->lastEditedDate = '2024-01-01 10:00:00'; -$mismatchCases[] = $mismatchCase; -r($testcaseTest->importCasesTest($mismatchCases)) && p('0:title') && e('产品不匹配的用例'); // 步骤4:权限验证 - -// 测试步骤5:导入多个用例的混合场景 -$mixedCases = array(); -$newCase2 = new stdClass(); -$newCase2->product = 1; -$newCase2->title = '新建用例测试'; -$newCase2->type = 'feature'; -$newCase2->pri = 2; -$newCase2->status = 'normal'; -$newCase2->openedBy = 'admin'; -$newCase2->openedDate = '2024-01-01 10:00:00'; - -$updateCase2 = new stdClass(); -$updateCase2->id = 2; -$updateCase2->product = 1; -$updateCase2->title = '更新用例测试'; -$updateCase2->type = 'feature'; -$updateCase2->pri = 1; -$updateCase2->status = 'normal'; -$updateCase2->lastEditedBy = 'admin'; -$updateCase2->lastEditedDate = '2024-01-01 10:00:00'; - -$mixedCases[] = $newCase2; -$mixedCases[] = $updateCase2; -r($testcaseTest->importCasesTest($mixedCases)) && p('0:title,1:title') && e('新建用例测试,更新用例测试'); // 步骤5:业务规则 \ No newline at end of file diff --git a/module/testcase/test/zen/initlibcase.php b/module/testcase/test/zen/initlibcase.php deleted file mode 100755 index d81cf5fb4a..0000000000 --- a/module/testcase/test/zen/initlibcase.php +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$caseTable->title->range('测试用例{1-10}'); -$caseTable->precondition->range('前置条件{1-10}'); -$caseTable->keywords->range('关键词{1-10}'); -$caseTable->pri->range('1-4'); -$caseTable->type->range('功能,性能,配置,安装,安全'); -$caseTable->stage->range('功能测试阶段,集成测试阶段'); -$caseTable->status->range('normal,wait,blocked'); -$caseTable->version->range('1-3'); -$caseTable->color->range('#FF0000,#00FF00,#0000FF'); -$caseTable->module->range('1-5,0{2}'); -$caseTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 准备测试数据 -$case = new stdclass(); -$case->id = 1; -$case->title = '测试用例标题'; -$case->precondition = '前置条件'; -$case->keywords = '关键词'; -$case->pri = 1; -$case->type = '功能'; -$case->stage = '功能测试阶段'; -$case->status = 'normal'; -$case->version = 1; -$case->color = '#FF0000'; -$case->module = 1; - -$libID = 1; -$maxOrder = 100; -$maxModuleOrder = 50; -$libCases = array(); - -$existingCase = clone $case; -$existingCase->id = 2; -$libCasesWithExisting = array(2 => array(5 => (object)array('version' => 2))); - -$emptyModuleCase = clone $case; -$emptyModuleCase->module = 0; - -$caseWithModule = clone $case; -$caseWithModule->module = 5; - -// 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->initLibCaseTest($case, $libID, $maxOrder, $maxModuleOrder, $libCases)) && p('lib,title,precondition,keywords,pri,type,stage,status,fromCaseID,fromCaseVersion,color,order') && e('1,测试用例标题,前置条件,关键词,1,功能,功能测试阶段,normal,1,1,#FF0000,100'); // 步骤1:正常情况 -r($testcaseTest->initLibCaseTest($case, $libID, $maxOrder, $maxModuleOrder, $libCases)) && p('openedBy') && e('admin'); // 步骤2:新增库用例验证openedBy -r($testcaseTest->initLibCaseTest($existingCase, $libID, $maxOrder, $maxModuleOrder, $libCasesWithExisting)) && p('id,lastEditedBy,version') && e('5,admin,3'); // 步骤3:更新已存在的库用例 -r($testcaseTest->initLibCaseTest($emptyModuleCase, $libID, $maxOrder, $maxModuleOrder, $libCases)) && p('module') && e('0'); // 步骤4:模块为空的处理 -r($testcaseTest->initLibCaseTest($case, $libID, $maxOrder, $maxModuleOrder, $libCases)) && p('fromCaseID,fromCaseVersion') && e('1,1'); // 步骤5:来源用例信息设置 \ No newline at end of file diff --git a/module/testcase/test/zen/parseuploadfile.php b/module/testcase/test/zen/parseuploadfile.php deleted file mode 100755 index 8801c10c75..0000000000 --- a/module/testcase/test/zen/parseuploadfile.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('normal{5}'); -$table->type->range('normal{5}'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(substr($testcaseTest->parseUploadFileTest(1, 'all', array()), -6)) && p() && e(' given'); // 步骤1:正常产品ID但无文件上传 -r(substr($testcaseTest->parseUploadFileTest(2, '0', array()), -6)) && p() && e(' given'); // 步骤2:指定分支但无文件上传 -r(substr($testcaseTest->parseUploadFileTest(0, 'all', array()), -6)) && p() && e(' given'); // 步骤3:无效产品ID但无文件上传 -r(substr($testcaseTest->parseUploadFileTest(-1, 'all', array()), -6)) && p() && e(' given'); // 步骤4:负数产品ID但无文件上传 -r(substr($testcaseTest->parseUploadFileTest(999, 'all', array()), -6)) && p() && e(' given'); // 步骤5:不存在的产品ID但无文件上传 \ No newline at end of file diff --git a/module/testcase/test/zen/prepareeditextras.php b/module/testcase/test/zen/prepareeditextras.php deleted file mode 100755 index 7ca8adcf28..0000000000 --- a/module/testcase/test/zen/prepareeditextras.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$case->title->range('测试用例1,测试用例2,测试用例3,测试用例4,测试用例5'); -$case->product->range('1{3},0{2}'); -$case->version->range('1,2,3,1,2'); -$case->lastEditedBy->range('admin{5}'); -$case->status->range('normal{3},wait{2}'); -$case->lib->range('0{3},1{2}'); -$case->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->prepareEditExtrasTest(1, 1, 'normal', array('期望1'), array('步骤1'), 0, 'no', '', '')) && p() && e('success_id_1'); // 步骤1:正常情况 -r($testcaseTest->prepareEditExtrasTest(2, 1, 'normal', array('期望1'), array(''), 0, 'no', '', '')) && p() && e('validation_failed'); // 步骤2:步骤验证失败 -r($testcaseTest->prepareEditExtrasTest(3, 2, 'normal', array('期望1'), array('步骤1'), 0, 'no', '', '')) && p() && e('success_version_2'); // 步骤3:版本号检查 -r($testcaseTest->prepareEditExtrasTest(4, 1, 'normal', array('期望1'), array('步骤1'), 0, 'auto', '', '')) && p() && e('auto_script_<script>test</script>'); // 步骤4:自动化脚本 - -$_POST['lib'] = 3; -r($testcaseTest->prepareEditExtrasTest(5, 1, 'normal', array('期望1'), array('步骤1'), 0, 'no', '', '')) && p() && e('lib_case_3'); // 步骤5:库案例特殊处理 \ No newline at end of file diff --git a/module/testcase/test/zen/preparereviewdata.php b/module/testcase/test/zen/preparereviewdata.php deleted file mode 100755 index 3d257330c0..0000000000 --- a/module/testcase/test/zen/preparereviewdata.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -loadYaml('case_preparereviewdata', false, 2)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 强制要求:必须包含至少5个测试步骤 -$_POST['result'] = 'pass'; -$_POST['reviewedBy'] = array('admin', 'user1'); -$_POST['comment'] = '评审通过'; -$_POST['uid'] = 'test123'; - -$oldCase = new stdclass(); -$oldCase->status = 'wait'; - -r($testcaseTest->prepareReviewDataTest(1, $oldCase)) && p('status') && e('normal'); // 步骤1:正常情况 - -$_POST['result'] = 'fail'; -$oldCase->status = 'blocked'; - -r($testcaseTest->prepareReviewDataTest(2, $oldCase)) && p('status') && e('blocked'); // 步骤2:边界值 - -unset($_POST['result']); - -r($testcaseTest->prepareReviewDataTest(3, $oldCase)) && p('result') && e('必须选择评审结果'); // 步骤3:异常输入 - -$_POST['result'] = 'pass'; -$_POST['reviewedBy'] = array('admin', 'user1', 'user2'); - -r($testcaseTest->prepareReviewDataTest(4, $oldCase)) && p('reviewedBy') && e('admin,user1,user2'); // 步骤4:权限验证 - -$_POST['result'] = 'pass'; -$_POST['comment'] = '评审通过'; - -r($testcaseTest->prepareReviewDataTest(5, $oldCase)) && p('id') && e('5'); // 步骤5:业务规则 \ No newline at end of file diff --git a/module/testcase/test/zen/preprocessforedit.php b/module/testcase/test/zen/preprocessforedit.php deleted file mode 100755 index 696f443013..0000000000 --- a/module/testcase/test/zen/preprocessforedit.php +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env php -preProcessForEditTest('withSteps')) && p('firstStepDesc') && e('existing desc'); // 步骤1:已有steps的case对象保持不变 -r($testcaseTest->preProcessForEditTest('emptySteps')) && p('firstStepType') && e('step'); // 步骤2:空steps数组初始化默认步骤 -r($testcaseTest->preProcessForEditTest('nullSteps')) && p('stepsCount') && e('1'); // 步骤3:null steps初始化默认步骤 -r($testcaseTest->preProcessForEditTest('falseSteps')) && p('firstStepDesc') && e('~~'); // 步骤4:false steps初始化默认步骤 -r($testcaseTest->preProcessForEditTest('noSteps')) && p('testType') && e('noSteps'); // 步骤5:无steps属性初始化默认步骤 \ No newline at end of file diff --git a/module/testcase/test/zen/processcaseforexport.php b/module/testcase/test/zen/processcaseforexport.php deleted file mode 100755 index bb7d8b6505..0000000000 --- a/module/testcase/test/zen/processcaseforexport.php +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$case->product->range('1{2},2{1}'); -$case->gen(3); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$testcaseTest = new testcaseZenTest(); - -// 准备测试数据 -$products = array(1 => '产品1', 2 => '产品2'); -$branches = array(0 => '主干', 1 => '分支1'); -$users = array('admin' => '管理员', 'user1' => '用户1', 'user2' => '用户2'); -$results = array(); -$relatedModules = array(1 => '模块1', 2 => '模块2'); -$relatedStories = array(1 => '需求1', 2 => '需求2'); -$relatedCases = array(2 => '测试用例2', 3 => '测试用例3'); -$relatedSteps = array(); -$relatedFiles = array(); -$relatedScenes = array(1 => '场景1', 2 => '场景2'); - -// 构造测试用例对象1:正常情况 -$case1 = new stdClass(); -$case1->id = 1; -$case1->product = 1; -$case1->branch = 0; -$case1->module = 1; -$case1->story = 1; -$case1->scene = 1; -$case1->title = '测试用例1'; -$case1->pri = 2; -$case1->type = 'feature'; -$case1->status = 'normal'; -$case1->openedBy = 'admin'; -$case1->openedDate = '2023-01-01 10:00:00'; -$case1->lastEditedBy = 'admin'; -$case1->lastEditedDate = '2023-01-15 12:00:00'; -$case1->lastRunner = 'admin'; -$case1->lastRunDate = '2023-02-01 14:00:00'; -$case1->lastRunResult = 'pass'; -$case1->linkCase = ''; -$case1->bugs = 0; -$case1->results = 0; -$case1->stepNumber = 2; -$case1->caseFails = 0; -$case1->stage = 'unittest,feature'; - -// 构造测试用例对象2:空关联数据 -$case2 = new stdClass(); -$case2->id = 2; -$case2->product = 999; // 不存在的产品 -$case2->branch = 999; // 不存在的分支 -$case2->module = 999; // 不存在的模块 -$case2->story = 999; // 不存在的需求 -$case2->scene = 999; // 不存在的场景 -$case2->title = '测试用例2'; -$case2->pri = 1; -$case2->type = 'interface'; -$case2->status = 'blocked'; -$case2->openedBy = 'user1'; -$case2->openedDate = '2023-01-02 11:00:00'; -$case2->lastEditedBy = 'user1'; -$case2->lastEditedDate = '2023-01-16 13:00:00'; -$case2->lastRunner = 'user1'; -$case2->lastRunDate = '2023-02-02 15:00:00'; -$case2->lastRunResult = 'fail'; -$case2->linkCase = ''; -$case2->bugs = 0; -$case2->results = 0; -$case2->stepNumber = 2; -$case2->caseFails = 0; -$case2->stage = 'integrate'; - -// 构造测试用例对象3:零值日期 -$case3 = new stdClass(); -$case3->id = 3; -$case3->product = 2; -$case3->branch = 1; -$case3->module = 2; -$case3->story = 2; -$case3->scene = 2; -$case3->title = '测试用例3'; -$case3->pri = 3; -$case3->type = 'config'; -$case3->status = 'investigate'; -$case3->openedBy = 'user2'; -$case3->openedDate = '0000-00-00 00:00:00'; -$case3->lastEditedBy = 'user2'; -$case3->lastEditedDate = '0000-00-00 00:00:00'; -$case3->lastRunner = 'user2'; -$case3->lastRunDate = '0000-00-00 00:00:00'; -$case3->lastRunResult = 'skip'; -$case3->linkCase = ''; -$case3->bugs = 0; -$case3->results = 0; -$case3->stepNumber = 2; -$case3->caseFails = 0; -$case3->stage = 'system'; - -// 构造测试用例对象4:带链接用例 -$case4 = new stdClass(); -$case4->id = 4; -$case4->product = 1; -$case4->branch = 0; -$case4->module = 1; -$case4->story = 1; -$case4->scene = 1; -$case4->title = '测试用例4'; -$case4->pri = 2; -$case4->type = 'feature'; -$case4->status = 'normal'; -$case4->openedBy = 'admin'; -$case4->openedDate = '2023-01-01 10:00:00'; -$case4->lastEditedBy = 'admin'; -$case4->lastEditedDate = '2023-01-15 12:00:00'; -$case4->lastRunner = 'admin'; -$case4->lastRunDate = '2023-02-01 14:00:00'; -$case4->lastRunResult = 'pass'; -$case4->linkCase = '2,3'; -$case4->bugs = 0; -$case4->results = 0; -$case4->stepNumber = 2; -$case4->caseFails = 0; -$case4->stage = 'feature,unittest'; - -// 构造测试用例对象5:完整关联数据 -$case5 = new stdClass(); -$case5->id = 5; -$case5->product = 2; -$case5->branch = 1; -$case5->module = 2; -$case5->story = 2; -$case5->scene = 2; -$case5->title = '测试用例5'; -$case5->pri = 1; -$case5->type = 'interface'; -$case5->status = 'blocked'; -$case5->openedBy = 'user1'; -$case5->openedDate = '2023-01-02 11:00:00'; -$case5->lastEditedBy = 'user1'; -$case5->lastEditedDate = '2023-01-16 13:00:00'; -$case5->lastRunner = 'user1'; -$case5->lastRunDate = '2023-02-02 15:00:00'; -$case5->lastRunResult = 'fail'; -$case5->linkCase = ''; -$case5->bugs = 1; -$case5->results = 3; -$case5->stepNumber = 5; -$case5->caseFails = 1; -$case5->stage = 'integrate,system'; - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->processCaseForExportTest($case1, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('openedDate') && e('2023-01-01'); // 步骤1:正常用例日期格式化 -r($testcaseTest->processCaseForExportTest($case1, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('product') && e('产品1(#1)'); // 步骤2:正常用例产品处理 -r($testcaseTest->processCaseForExportTest($case2, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('product') && e(''); // 步骤3:空关联数据产品处理 -r($testcaseTest->processCaseForExportTest($case3, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('openedDate') && e(''); // 步骤4:零值日期处理 -r($testcaseTest->processCaseForExportTest($case5, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('product') && e('产品2(#2)'); // 步骤5:完整关联数据处理 \ No newline at end of file diff --git a/module/testcase/test/zen/processcasesforbrowse.php b/module/testcase/test/zen/processcasesforbrowse.php deleted file mode 100755 index 95dbe601fc..0000000000 --- a/module/testcase/test/zen/processcasesforbrowse.php +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->title->range('测试用例1,测试用例2,测试用例3,测试用例4,测试用例5,测试用例6,测试用例7,测试用例8,测试用例9,测试用例10'); -$table->product->range('1,1,1,2,2,2,3,3,3,1'); -$table->module->range('1001,1002,1003,1001,1002,1003,1001,1002,1003,1001'); -$table->scene->range('1,2,3,0,0,1,2,3,0,0'); -$table->status->range('wait,normal,blocked,investigate,done,wait,normal,blocked,investigate,done'); -$table->type->range('feature,performance,config,install,feature,performance,config,install,feature,performance'); -$table->pri->range('1,2,3,4,1,2,3,4,1,2'); -$table->openedBy->range('admin,user1,user2,tester,admin,user1,user2,tester,admin,user1'); -$table->gen(10); - -$sceneTable = zenData('scene'); -$sceneTable->id->range('1-5'); -$sceneTable->title->range('场景1,场景2,场景3,场景4,场景5'); -$sceneTable->product->range('1,1,2,2,3'); -$sceneTable->module->range('1001,1002,1001,1002,1001'); -$sceneTable->parent->range('0,1,0,3,0'); -$sceneTable->grade->range('1,2,1,2,1'); -$sceneTable->path->range(',1,,1,2,,3,,3,4,,5,'); -$sceneTable->sort->range('1,2,3,4,5'); -$sceneTable->openedBy->range('admin,user1,user2,admin,user1'); -$sceneTable->deleted->range('0'); -$sceneTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($testcaseTest->processCasesForBrowseTest(array()))) && p() && e('0'); // 步骤1:空数组计数 -r(count($testcaseTest->processCasesForBrowseTest(array((object)array('id' => 1, 'title' => '<测试用例1>', 'scene' => 1))))) && p() && e('2'); // 步骤2:包含场景的用例计数 -r(count($testcaseTest->processCasesForBrowseTest(array((object)array('id' => 4, 'title' => '测试用例4', 'scene' => 0))))) && p() && e('1'); // 步骤3:不包含场景的用例计数 -r(count($testcaseTest->processCasesForBrowseTest(array((object)array('id' => 5, 'title' => '测试用例5', 'scene' => 999))))) && p() && e('2'); // 步骤4:包含无效场景ID计数 -r($testcaseTest->processCasesForBrowseTest(array((object)array('id' => 6, 'title' => '测试用例6', 'scene' => 0)))) && p('0:id') && e('case_6'); // 步骤5:验证ID转换 \ No newline at end of file diff --git a/module/testcase/test/zen/processcasesforexport.php b/module/testcase/test/zen/processcasesforexport.php deleted file mode 100755 index c045e89e02..0000000000 --- a/module/testcase/test/zen/processcasesforexport.php +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env php -id->range('1-3'); -$case->product->range('1{2},2{1}'); -$case->title->range('测试用例1,测试用例2,测试用例3'); -$case->gen(3); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseZenTest(); - -// 构造测试用例对象 -$case1 = new stdClass(); -$case1->id = 1; -$case1->product = 1; -$case1->branch = 0; -$case1->module = 1; -$case1->story = 1; -$case1->scene = 1; -$case1->title = '测试用例1'; -$case1->pri = 2; -$case1->type = 'feature'; -$case1->status = 'normal'; -$case1->openedBy = 'admin'; -$case1->openedDate = '2023-01-01 00:00:00'; -$case1->lastEditedBy = 'admin'; -$case1->lastEditedDate = '2023-01-15 00:00:00'; -$case1->lastRunner = 'admin'; -$case1->lastRunDate = '2023-02-01 00:00:00'; -$case1->lastRunResult = 'pass'; -$case1->linkCase = ''; - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->processCasesForExportTest(array(1 => $case1), 1, 0)) && p('error') && e('~~'); // 步骤1:正常情况 -r($testcaseTest->processCasesForExportTest(array(), 1, 0)) && p('error') && e('~~'); // 步骤2:空数组 -r($testcaseTest->processCasesForExportTest(array(1 => $case1), 1, 1)) && p('error') && e('~~'); // 步骤3:带测试任务 -r($testcaseTest->processCasesForExportTest(array(1 => $case1, 2 => $case1), 2, 0)) && p('error') && e('~~'); // 步骤4:多个用例 -r($testcaseTest->processCasesForExportTest(array(1 => $case1), 999, 0)) && p('error') && e('~~'); // 步骤5:无效产品ID \ No newline at end of file diff --git a/module/testcase/test/zen/processfileforexport.php b/module/testcase/test/zen/processfileforexport.php deleted file mode 100755 index fdc9adba72..0000000000 --- a/module/testcase/test/zen/processfileforexport.php +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env php -~ -- 步骤5:无关联文件的用例3处理属性files @ - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php'; - -// 2. zendata数据准备(不需要数据库数据) - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$testcaseTest = new testcaseZenTest(); - -// 构造测试用例对象 -$case1 = new stdClass(); -$case1->id = 1; -$case1->title = '测试用例1'; - -$case2 = new stdClass(); -$case2->id = 2; -$case2->title = '测试用例2'; - -$case3 = new stdClass(); -$case3->id = 3; -$case3->title = '测试用例3'; - -// 准备关联文件数据 - 基于实际输出调整 -$relatedFiles1 = array(); - -$relatedFiles2 = array(); -$file1 = new stdClass(); -$file1->id = 1; -$file1->title = '文档1.txt'; -$relatedFiles2[1] = array($file1); - -$relatedFiles3 = array(); -$file2 = new stdClass(); -$file2->id = 2; -$file2->title = '文档2.pdf'; -$file3 = new stdClass(); -$file3->id = 3; -$file3->title = '图片1.png'; -$relatedFiles3[2] = array($file2, $file3); - -// 5. 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->processFileForExportTest($case1, $relatedFiles1)) && p('files') && e(''); // 步骤1:无关联文件的用例处理 -r($testcaseTest->processFileForExportTest($case1, $relatedFiles2)) && p('files') && e('~文档1.txt~'); // 步骤2:有一个关联文件的用例处理 -r($testcaseTest->processFileForExportTest($case2, $relatedFiles3)) && p('files') && e('~文档2.pdf~'); // 步骤3:有多个关联文件的用例处理 -r($testcaseTest->processFileForExportTest($case2, $relatedFiles3)) && p('files') && e('~
~'); // 步骤4:检查分隔符 -r($testcaseTest->processFileForExportTest($case3, $relatedFiles1)) && p('files') && e(''); // 步骤5:无关联文件的用例3处理 \ No newline at end of file diff --git a/module/testcase/test/zen/processlinkcaseforexport.php b/module/testcase/test/zen/processlinkcaseforexport.php deleted file mode 100755 index 0c3dd3b224..0000000000 --- a/module/testcase/test/zen/processlinkcaseforexport.php +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env php -processLinkCaseForExportTest((object)array('id' => 1, 'linkCase' => '2'), array('2' => '用户登录功能测试'))) && p('linkCase') && e('用户登录功能测试(#2)'); - -// 测试步骤2:处理单个关联用例ID字段3 -r($testcaseTest->processLinkCaseForExportTest((object)array('id' => 2, 'linkCase' => '3'), array('3' => '密码修改测试'))) && p('linkCase') && e('密码修改测试(#3)'); - -// 测试步骤3:处理不存在的关联用例ID字段7 -r($testcaseTest->processLinkCaseForExportTest((object)array('id' => 3, 'linkCase' => '7'), array('6' => '文件上传测试'))) && p('linkCase') && e('7'); - -// 测试步骤4:处理空的linkCase字段 -r($testcaseTest->processLinkCaseForExportTest((object)array('id' => 4, 'linkCase' => ''), array())) && p('linkCase') && e(''); - -// 测试步骤5:处理包含空格的单个linkCase字段8 -r($testcaseTest->processLinkCaseForExportTest((object)array('id' => 5, 'linkCase' => ' 8 '), array('8' => '系统配置管理'))) && p('linkCase') && e('系统配置管理(#8)'); \ No newline at end of file diff --git a/module/testcase/test/zen/responseafterbatchcreate.php b/module/testcase/test/zen/responseafterbatchcreate.php deleted file mode 100755 index 6563f380f6..0000000000 --- a/module/testcase/test/zen/responseafterbatchcreate.php +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env php -responseAfterBatchCreateTest(1, 'all', array('app' => array('tab' => 'qa')))) && p('result,load') && e('success,/testcase-browse-productID=1&branch=all.html'); // 步骤1:正常QA tab环境 -r($testcaseTest->responseAfterBatchCreateTest(1, 'all', array('app' => array('tab' => 'project'), 'session' => array('project' => 5)))) && p('result') && e('success'); // 步骤2:项目tab环境 -r($testcaseTest->responseAfterBatchCreateTest(1, 'all', array('request' => array('HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'), 'app' => array('requestType' => 'GET', 'rawParams' => array('modal'))))) && p('result,closeModal') && e('success,1'); // 步骤3:模态框AJAX请求 -r($testcaseTest->responseAfterBatchCreateTest(1, 'all', array('viewType' => 'json'))) && p('result') && e('success'); // 步骤4:JSON视图类型 -r($testcaseTest->responseAfterBatchCreateTest(1, 'all', array('daoError' => array('测试错误信息')))) && p('result,message') && e('fail,测试错误信息'); // 步骤5:DAO错误情况 \ No newline at end of file diff --git a/module/testcase/test/zen/responseaftershowimport.php b/module/testcase/test/zen/responseaftershowimport.php deleted file mode 100755 index 69d94bfc2f..0000000000 --- a/module/testcase/test/zen/responseaftershowimport.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->product->range('1-3'); -$table->title->range('测试用例1,测试用例2,测试用例3'); -$table->status->range('normal'); -$table->openedBy->range('admin'); -$table->openedDate->range('`2023-01-01 00:00:00`'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->responseAfterShowImportTest(1, '0', 10, '/tmp/test.csv', '', true)) && p('result') && e('fail'); // 步骤1:DAO错误情况 -r($testcaseTest->responseAfterShowImportTest(1, '0', 10, '/tmp/test.csv', '', false, true)) && p('result') && e('success'); // 步骤2:最后一页项目标签 -r($testcaseTest->responseAfterShowImportTest(1, '0', 10, '/tmp/test.csv', '', false, false)) && p('result') && e('success'); // 步骤3:最后一页普通标签 -r($testcaseTest->responseAfterShowImportTest(1, '0', 10, '/tmp/test.csv', '', false, false, false)) && p('result') && e('success'); // 步骤4:非最后一页 -r($testcaseTest->responseAfterShowImportTest(1, '0', 10, '/tmp/test.csv', '自定义成功消息', false, false, true)) && p('result,message') && e('success,自定义成功消息'); // 步骤5:自定义消息 \ No newline at end of file diff --git a/module/testcase/test/zen/setbrowsecookie.php b/module/testcase/test/zen/setbrowsecookie.php deleted file mode 100755 index edacc4c027..0000000000 --- a/module/testcase/test/zen/setbrowsecookie.php +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env php -setBrowseCookieTest(1, 'main')) && p('preProductID,preBranch') && e('1,main'); // 步骤1:正常设置产品ID和分支 -r($testcaseTest->setBrowseCookieTest(3, 'main')) && p('caseModule') && e('0'); // 步骤2:设置不同的产品ID导致caseModule重置 -r($testcaseTest->setBrowseCookieTest(1, 'develop')) && p('caseModule') && e('0'); // 步骤3:设置不同的分支导致caseModule重置 -r($testcaseTest->setBrowseCookieTest(1, 'main', 'bymodule', '123')) && p('caseModule') && e('123'); // 步骤4:设置bymodule浏览类型 -r($testcaseTest->setBrowseCookieTest(1, 'main', 'bysuite', '456')) && p('caseSuite') && e('456'); // 步骤5:设置bysuite浏览类型 \ No newline at end of file diff --git a/module/testcase/test/zen/setbrowsemenu.php b/module/testcase/test/zen/setbrowsemenu.php deleted file mode 100755 index 5de7b0eed4..0000000000 --- a/module/testcase/test/zen/setbrowsemenu.php +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$product->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7,产品8,产品9,产品10'); -$product->type->range('normal{10}'); -$product->status->range('normal{10}'); -$product->deleted->range('0{10}'); -$product->gen(10); - -$project = zenData('project'); -$project->id->range('1-10'); -$project->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10'); -$project->type->range('project{10}'); -$project->status->range('wait{5},doing{3},suspended{1},closed{1}'); -$project->hasProduct->range('1{8},0{2}'); -$project->deleted->range('0{10}'); -$project->gen(10); - -$projectProduct = zenData('projectproduct'); -$projectProduct->project->range('1-8'); -$projectProduct->product->range('1-8'); -$projectProduct->branch->range('0{8}'); -$projectProduct->gen(8); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testcaseTest = new testcaseTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testcaseTest->setBrowseMenuTest(1, 'all', 1, 'project', 1)) && p('0,1') && e('1,all'); // 步骤1:在project标签下有效projectID的场景 -r($testcaseTest->setBrowseMenuTest(2, 'test', 0, 'project', 0)) && p('0,1') && e('2,test'); // 步骤2:在project标签下projectID为0的场景 -r($testcaseTest->setBrowseMenuTest(3, '0', 0, 'qa', 0)) && p('0,1') && e('3,0'); // 步骤3:在qa标签下设置菜单 -r($testcaseTest->setBrowseMenuTest(4, 'main', 2, 'project', 2)) && p('0,1') && e('4,all'); // 步骤4:测试branch参数为字符串时的处理 -r($testcaseTest->setBrowseMenuTest(5, 1, 3, 'project', 3)) && p('0,1') && e('5,all'); // 步骤5:测试branch参数为数字时的处理 \ No newline at end of file diff --git a/module/testcase/test/zen/setmenuforcaseedit.php b/module/testcase/test/zen/setmenuforcaseedit.php deleted file mode 100755 index d6c122816c..0000000000 --- a/module/testcase/test/zen/setmenuforcaseedit.php +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env php -id = 1; -$case->project = 1; -$case->product = 1; -$case->execution = 2; -$case->branch = 1; - -r($testcaseTest->setMenuForCaseEditTest($case, 0, 'project')) && p('tab,projectID') && e('project,1'); // 步骤1:project标签页正常情况 -r($testcaseTest->setMenuForCaseEditTest($case, 3, 'execution')) && p('tab,executionID') && e('execution,3'); // 步骤2:execution标签页正常情况 -r($testcaseTest->setMenuForCaseEditTest($case, 0, 'qa')) && p('tab') && e('qa'); // 步骤3:qa标签页正常情况 -r($testcaseTest->setMenuForCaseEditTest($case, 0, 'execution')) && p('tab,executionID') && e('execution,2'); // 步骤4:execution标签页但executionID为0时使用case的execution -r($testcaseTest->setMenuForCaseEditTest($case, 0, 'other')) && p('tab,projectID,executionID') && e('other,~~,~~'); // 步骤5:无效标签页情况 \ No newline at end of file diff --git a/module/testreport/test/zen/assignreportdata.php b/module/testreport/test/zen/assignreportdata.php deleted file mode 100755 index aff882cc7a..0000000000 --- a/module/testreport/test/zen/assignreportdata.php +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env php - '2024-01-01', - 'end' => '2024-01-31', - 'productIdList' => array(1 => 1, 2 => 2), - 'tasks' => array(1 => 'task1', 2 => 'task2'), - 'builds' => array(1 => 'build1'), - 'stories' => array(1 => 'story1'), - 'bugs' => array(), - 'execution' => new stdClass(), - 'owner' => 'admin' -); -$defaultReportData['execution']->id = 1; -$defaultReportData['execution']->name = '测试执行'; -r($testreportTest->assignReportDataTest($defaultReportData, 'create', null)) && p('begin,end,productIdList') && e('2024-01-01,2024-01-31,1,2'); - -// 测试步骤2:正常查看模式下分配报告数据 -$pager = new stdClass(); -$pager->pageID = 1; -$pager->recTotal = 10; -r($testreportTest->assignReportDataTest($defaultReportData, 'view', $pager)) && p('begin,end') && e('2024-01-01,2024-01-31'); - -// 测试步骤3:空的报告数据输入情况 -r($testreportTest->assignReportDataTest(array(), 'create', null)) && p('begin,end,productIdList') && e('2024-01-01,2024-01-31,1,2'); - -// 测试步骤4:不同的方法类型验证 -$reportDataForEdit = array( - 'begin' => '2024-02-01', - 'end' => '2024-02-28', - 'productIdList' => array(3 => 3), - 'tasks' => array(3 => 'task3'), - 'execution' => new stdClass() -); -$reportDataForEdit['execution']->id = 2; -r($testreportTest->assignReportDataTest($reportDataForEdit, 'edit', null)) && p('begin,end,productIdList') && e('2024-02-01,2024-02-28,3'); - -// 测试步骤5:包含特殊字段的数据处理 -$specialReportData = array( - 'begin' => '2024-03-01', - 'end' => '2024-03-31', - 'productIdList' => array(4 => 4, 5 => 5, 6 => 6), - 'tasks' => array(4 => 'task4', 5 => 'task5'), - 'normalField' => 'normalValue', - 'execution' => new stdClass() -); -$specialReportData['execution']->id = 3; -r($testreportTest->assignReportDataTest($specialReportData, 'create', null)) && p('tasks,normalField') && e('4,5,normalValue'); \ No newline at end of file diff --git a/module/testreport/test/zen/buildreportdataforview.php b/module/testreport/test/zen/buildreportdataforview.php deleted file mode 100755 index 59766f92dc..0000000000 --- a/module/testreport/test/zen/buildreportdataforview.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->product->range('1-3'); -$table->execution->range('1-3'); -$table->tasks->range('1,2,3'); -$table->builds->range('1,2'); -$table->stories->range('1,2,3'); -$table->bugs->range('1,2'); -$table->cases->range('1,2,3,4,5'); -$table->begin->range('`2024-01-01`'); -$table->end->range('`2024-01-31`'); -$table->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testreportTest = new testreportTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testreportTest->buildReportDataForViewTest()) && p('begin') && e('2024-01-01'); // 步骤1:验证begin字段 -r($testreportTest->buildReportDataForViewTest()) && p('end') && e('2024-01-31'); // 步骤2:验证end字段 -r($testreportTest->buildReportDataForViewTest()) && p('execution:id') && e('1'); // 步骤3:验证execution的ID -r($testreportTest->buildReportDataForViewTest()) && p('execution:name') && e('项目集1'); // 步骤4:验证execution对象 -r($testreportTest->buildReportDataForViewTest()) && p() && e('Array'); // 步骤5:验证返回数组结构 \ No newline at end of file diff --git a/module/testreport/test/zen/commonaction.php b/module/testreport/test/zen/commonaction.php deleted file mode 100755 index f58e395137..0000000000 --- a/module/testreport/test/zen/commonaction.php +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$productTable->name->range('产品1,产品2,产品3{7}'); -$productTable->status->range('normal{8},closed{2}'); -$productTable->deleted->range('0'); -$productTable->gen(10); - -$executionTable = zenData('execution'); -$executionTable->id->range('1-10'); -$executionTable->name->range('执行1,执行2,执行3{7}'); -$executionTable->status->range('wait{3},doing{5},done{2}'); -$executionTable->deleted->range('0'); -$executionTable->gen(10); - -$projectTable = zenData('project'); -$projectTable->id->range('1-10'); -$projectTable->name->range('项目1,项目2,项目3{7}'); -$projectTable->status->range('wait{3},doing{5},done{2}'); -$projectTable->deleted->range('0'); -$projectTable->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testreportTest = new testreportTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($testreportTest->commonActionTest(1, 'product')) && p() && e('1'); // 步骤1:测试product类型 -r($testreportTest->commonActionTest(1, 'execution')) && p() && e('1'); // 步骤2:测试execution类型 -r($testreportTest->commonActionTest(1, 'project')) && p() && e('1'); // 步骤3:测试project类型 -r($testreportTest->commonActionTest(999, 'product')) && p() && e('0'); // 步骤4:测试无效objectID -r($testreportTest->commonActionTest(1)) && p() && e('1'); // 步骤5:测试默认参数 \ No newline at end of file diff --git a/module/testreport/test/zen/getgeneratedandlegacybugdata.php b/module/testreport/test/zen/getgeneratedandlegacybugdata.php deleted file mode 100755 index e5ba0c4309..0000000000 --- a/module/testreport/test/zen/getgeneratedandlegacybugdata.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -getGeneratedAndLegacyBugDataTest(array(1, 2), array(1), '2024-01-01', '2024-01-31', array(1, 2))) && p('4') && e('2'); // 步骤1:正常情况验证按用例统计数量 -r($testreportTest->getGeneratedAndLegacyBugDataTest(array(), array(), '2024-01-01', '2024-01-31', array(1, 2))) && p('4') && e('0'); // 步骤2:空列表边界值测试 -r($testreportTest->getGeneratedAndLegacyBugDataTest(array(1), array(1), '', '', array(1))) && p('4') && e('1'); // 步骤3:无效时间范围测试 -r($testreportTest->getGeneratedAndLegacyBugDataTest(array(1, 2), array(1), '2024-01-01', '2024-01-31', array())) && p('4') && e('2'); // 步骤4:空构建ID列表测试 -r($testreportTest->getGeneratedAndLegacyBugDataTest(array(1, 2, 3), array(1, 2), '2024-01-01', '2024-01-31', array(1, 2, 3))) && p('4') && e('3'); // 步骤5:完整参数综合验证 \ No newline at end of file diff --git a/module/testreport/test/zen/getreportsforbrowse.php b/module/testreport/test/zen/getreportsforbrowse.php deleted file mode 100755 index d8b3fb028e..0000000000 --- a/module/testreport/test/zen/getreportsforbrowse.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$testreportTable->product->range('1-3'); -$testreportTable->execution->range('1-5'); -$testreportTable->title->range('测试报告1,测试报告2,测试报告3{7}'); -$testreportTable->owner->range('admin,user1,user2{8}'); -$testreportTable->objectType->range('testtask'); -$testreportTable->objectID->range('1-5'); -$testreportTable->deleted->range('0'); -$testreportTable->gen(10); - -$productTable = zenData('product'); -$productTable->id->range('1-5'); -$productTable->name->range('产品1,产品2,产品3{3}'); -$productTable->deleted->range('0'); -$productTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testreportTest = new testreportTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r(count($testreportTest->getReportsForBrowseTest(1, 'product'))) && p() && e('4'); // 步骤1:测试产品类型默认参数 -r(count($testreportTest->getReportsForBrowseTest(1, 'product', 0, 'id_asc'))) && p() && e('4'); // 步骤2:测试产品类型ID排序 -r(count($testreportTest->getReportsForBrowseTest(1, 'product', 0, 'id_desc', 0, 5))) && p() && e('4'); // 步骤3:测试产品类型不同分页大小 -r(count($testreportTest->getReportsForBrowseTest(1, 'product', 0, 'id_desc', 0, 20, 2))) && p() && e('4'); // 步骤4:测试第2页返回结果 -r(is_array($testreportTest->getReportsForBrowseTest(1, 'product')) ? 1 : 0) && p() && e('1'); // 步骤5:测试基本功能可访问性 \ No newline at end of file diff --git a/module/testreport/test/zen/getstageandhandlegroups.php b/module/testreport/test/zen/getstageandhandlegroups.php deleted file mode 100755 index 4e7493dfaa..0000000000 --- a/module/testreport/test/zen/getstageandhandlegroups.php +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env php -loadYaml('bug_getstageandhandlegroups', false, 2)->gen(20); -zenData('user')->loadYaml('user_getstageandhandlegroups', false, 2)->gen(10); - -su('admin'); - -$testreportTest = new testreportTest(); - -r($testreportTest->getStageAndHandleGroupsTest(array(1, 2), '2024-01-01', '2024-01-03', array(1, 2))) && p() && e('Array'); -r($testreportTest->getStageAndHandleGroupsTest(array(), '2024-01-01', '2024-01-02', array())) && p() && e('Array'); -r($testreportTest->getStageAndHandleGroupsTest(array(1), '2024-01-01', '2024-01-01', array(1))) && p() && e('Array'); -r($testreportTest->getStageAndHandleGroupsTest(array(1), '2023-12-31', '2024-01-01', array())) && p() && e('Array'); -r($testreportTest->getStageAndHandleGroupsTest(array(1, 2, 3), '2024-01-01', '2024-01-05', array(1, 2, 3))) && p() && e('Array'); \ No newline at end of file diff --git a/module/testtask/test/zen/assignforcases.php b/module/testtask/test/zen/assignforcases.php deleted file mode 100755 index 6a64069d1f..0000000000 --- a/module/testtask/test/zen/assignforcases.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -loadYaml('testtask_assignforcases', false, 2)->gen(5); - -su('admin'); - -$testtaskTest = new testtaskZenTest(); - -r($testtaskTest->assignForCasesTest()) && p() && e('0'); -r($testtaskTest->assignForCasesTest((object)array('id' => 2, 'name' => '产品2', 'type' => 'branch', 'shadow' => 0), (object)array('id' => 2, 'execution' => 2, 'branch' => '1', 'name' => '多分支测试单'), array(), array(), 0, 'all', 0, 'id_desc')) && p() && e('0'); -r($testtaskTest->assignForCasesTest((object)array('id' => 1, 'name' => '产品1', 'type' => 'normal', 'shadow' => 0), (object)array('id' => 1, 'execution' => 1, 'branch' => '0', 'name' => '带场景的测试单'), array((object)array('id' => 1, 'case' => 1)), array((object)array('id' => 101, 'case' => 101)), 5, 'bymodule', 5, 'case_desc')) && p() && e('0'); -r($testtaskTest->assignForCasesTest((object)array('id' => 3, 'name' => '产品3', 'type' => 'normal', 'shadow' => 0), (object)array('id' => 3, 'execution' => 3, 'branch' => '0', 'name' => '私有执行测试单'), array(), array(), 0, 'all', 0, 'id_asc')) && p() && e('0'); -r($testtaskTest->assignForCasesTest((object)array('id' => 1, 'name' => '产品1', 'type' => 'normal', 'shadow' => 0), (object)array('id' => 1, 'execution' => 1, 'branch' => '0', 'name' => '套件浏览测试单'), array(), array(), 0, 'bysuite', 10, 'priority_desc')) && p() && e('0'); \ No newline at end of file diff --git a/module/testtask/test/zen/responseafterruncase.php b/module/testtask/test/zen/responseafterruncase.php deleted file mode 100755 index fbbbed20d2..0000000000 --- a/module/testtask/test/zen/responseafterruncase.php +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$table->name->range('测试单1,测试单2,测试单3'); -$table->product->range('1-3'); -$table->status->range('wait,doing,done'); -$table->gen(3); - -$runTable = zenData('testrun'); -$runTable->id->range('1-10'); -$runTable->task->range('1-3'); -$runTable->case->range('1-10'); -$runTable->version->range('1-3'); -$runTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$testtaskTest = new testtaskZenTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 - -// 步骤1:测试用例结果为fail时的处理 -$preAndNext1 = new stdclass(); -$preAndNext1->next = null; -$preAndNext1->pre = null; -$run1 = new stdclass(); -$run1->id = 1; -$run1->task = 1; -$result1 = $testtaskTest->responseAfterRunCaseTest('fail', $preAndNext1, $run1, 1, 1); -r(strpos((string)$result1, 'error') !== false ? 'error' : $result1) && p() && e('error'); // 步骤1:fail结果处理有错误 - -// 步骤2:测试用例结果为pass且无下一个用例时的处理 -$preAndNext2 = new stdclass(); -$preAndNext2->next = null; -$preAndNext2->pre = null; -$run2 = new stdclass(); -$run2->id = 2; -$run2->task = 0; -$result2 = $testtaskTest->responseAfterRunCaseTest('pass', $preAndNext2, $run2, 2, 1); -r($result2) && p() && e(0); // 步骤2:pass结果无下一个用例返回null - -// 步骤3:测试用例结果为pass且有下一个用例且非my标签页时的处理 -global $app; -$app->tab = 'qa'; -$preAndNext3 = new stdclass(); -$preAndNext3->next = new stdclass(); -$preAndNext3->next->id = 3; -$preAndNext3->next->case = 3; -$preAndNext3->next->version = 1; -$preAndNext3->pre = null; -$run3 = new stdclass(); -$run3->id = 3; -$run3->task = 0; -$result3 = $testtaskTest->responseAfterRunCaseTest('pass', $preAndNext3, $run3, 3, 1); -r($result3) && p() && e(0); // 步骤3:pass结果有下一个用例返回null - -// 步骤4:测试用例结果为pass且有下一个用例但在my标签页时的处理 -$app->tab = 'my'; -$preAndNext4 = new stdclass(); -$preAndNext4->next = new stdclass(); -$preAndNext4->next->id = 4; -$preAndNext4->next->case = 4; -$preAndNext4->next->version = 1; -$preAndNext4->pre = null; -$run4 = new stdclass(); -$run4->id = 4; -$run4->task = 0; -$result4 = $testtaskTest->responseAfterRunCaseTest('pass', $preAndNext4, $run4, 4, 1); -r($result4) && p() && e(0); // 步骤4:my标签页处理返回null - -// 步骤5:测试空运行对象时的边界情况处理 -$preAndNext5 = new stdclass(); -$preAndNext5->next = null; -$preAndNext5->pre = null; -$run5 = new stdclass(); -$run5->id = 0; -$run5->task = 0; -$result5 = $testtaskTest->responseAfterRunCaseTest('pass', $preAndNext5, $run5, 5, 1); -r($result5) && p() && e(0); // 步骤5:空对象处理返回null \ No newline at end of file diff --git a/module/todo/test/model/daterange.php b/module/todo/test/model/daterange.php deleted file mode 100755 index 214d3572b5..0000000000 --- a/module/todo/test/model/daterange.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -loadModel('todo'); -$tester->app->loadClass('date', true); - -$todoTest = new todoTest(); - -r($todoTest->dateRangeTest('future')) && p('begin,end') && e('2030-01-01,2030-01-01'); -r($todoTest->dateRangeTest('20250101')) && p('begin,end') && e('2025-01-01 00:00:00,2025-01-01 23:59:59'); -r($todoTest->dateRangeTest('today')) && p('begin') && e('2025-09-10'); -r($todoTest->dateRangeTest('before')) && p('begin,end') && e(',2025-09-09'); -r($todoTest->dateRangeTest('yesterday')) && p('begin') && e('2025-09-09'); -r($todoTest->dateRangeTest('thisweek')) && p('begin') && e('2025-09-08 00:00:00'); -r($todoTest->dateRangeTest('invalid_type')) && p('begin,end') && e(','); \ No newline at end of file diff --git a/module/todo/test/zen/assembleexportdata.php b/module/todo/test/zen/assembleexportdata.php deleted file mode 100755 index cdbf2fcf2e..0000000000 --- a/module/todo/test/zen/assembleexportdata.php +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env php -loadYaml('todo_assembleexportdata', false, 2)->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 设置全局语言变量 -global $lang; -if(!isset($lang)) $lang = new stdClass(); -if(!isset($lang->todo)) $lang->todo = new stdClass(); -$lang->todo->future = '未来'; -$lang->todo->thisIsPrivate = '这是一个私人待办,暂时不能显示详细信息!'; - -// 5. 创建测试实例(变量名与模块名一致) -$todoTest = new todoTest(); - -// 6. 🔴 强制要求:必须包含至少5个测试步骤 - -// 测试数据准备 -$todos = array(); -for($i = 0; $i < 5; $i++) { - $todo = new stdClass(); - $todo->id = $i + 1; - $todo->account = 'admin'; - $todo->assignedTo = 'user1'; - $todo->name = '测试待办' . ($i + 1); - $todo->type = ($i == 0) ? 'custom' : (($i == 1) ? 'task' : (($i == 2) ? 'bug' : (($i == 3) ? 'story' : 'epic'))); - $todo->objectID = ($i == 0) ? 0 : (($i + 1) * 10); - $todo->pri = ($i % 3) + 1; - $todo->status = 'wait'; - $todo->begin = ($i == 4) ? '2400' : '0900'; - $todo->end = ($i == 4) ? '2400' : '1800'; - $todo->date = ($i == 3) ? '2030-01-01' : '2023-12-01'; - $todo->private = ($i == 4) ? 1 : 0; - $todo->desc = '描述' . ($i + 1); - $todos[$i] = $todo; -} - -// 准备关联数据对象 -$assemble = new stdClass(); -$assemble->users = array('admin' => '管理员', 'user1' => '用户1', 'user2' => '用户2'); -$assemble->bugs = array(30 => '缺陷30'); -$assemble->tasks = array(20 => '任务20'); -$assemble->stories = array(40 => '需求40'); -$assemble->epics = array(50 => '史诗50'); -$assemble->requirements = array(); -$assemble->testTasks = array(); -$assemble->issues = array(); -$assemble->risks = array(); -$assemble->opportunities = array(); - -// 准备语言对象 -$todoLang = new stdClass(); -$todoLang->typeList = array('custom' => '自定义', 'task' => '任务', 'bug' => '缺陷', 'story' => '需求', 'epic' => '史诗'); -$todoLang->priList = array(1 => '高', 2 => '中', 3 => '低'); -$todoLang->statusList = array('wait' => '未开始', 'doing' => '进行中', 'done' => '已完成'); -$todoLang->future = '未来'; -$todoLang->thisIsPrivate = '这是一个私人待办,暂时不能显示详细信息!'; - -// 准备时间数组 -$times = array( - '0900' => '09:00', - '1800' => '18:00', - '2400' => '' -); - -r($todoTest->assembleExportDataTest($todos, $assemble, $todoLang, $times)) && p('0:assignedTo') && e('用户1'); // 步骤1:正常用户待办,测试用户名格式化 -r($todoTest->assembleExportDataTest($todos, $assemble, $todoLang, $times)) && p('3:date') && e('未来'); // 步骤2:未来日期待办,测试日期转换 -r($todoTest->assembleExportDataTest($todos, $assemble, $todoLang, $times)) && p('4:begin') && e('~~'); // 步骤3:空时间待办,测试时间处理 -r($todoTest->assembleExportDataTest($todos, $assemble, $todoLang, $times)) && p('1:name') && e('任务20(#20)'); // 步骤4:任务类型待办,测试名称格式化 -r($todoTest->assembleExportDataTest($todos, $assemble, $todoLang, $times)) && p('4:desc') && e('这是一个私人待办,暂时不能显示详细信息!'); // 步骤5:私有待办,测试描述隐私保护 \ No newline at end of file diff --git a/module/todo/test/zen/beforebatchedit.php b/module/todo/test/zen/beforebatchedit.php deleted file mode 100755 index 05591b0324..0000000000 --- a/module/todo/test/zen/beforebatchedit.php +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env php -gen(5); -zenData('config')->gen(5); - -su('admin'); - -$todoTest = new todoTest(); - -// 步骤1:测试空数组输入 -r($todoTest->beforeBatchEditTest(array())) && p() && e('0'); - -// 步骤2:测试正常模块类型待办处理 -$todos = array( - 1 => (object)array( - 'type' => 'task', - 'task' => '10', - 'name' => 'test task', - 'begin' => '0900', - 'end' => '1800', - 'pri' => '2', - 'status' => 'wait' - ) -); -r($todoTest->beforeBatchEditTest($todos)) && p('1:objectID,name') && e('10,'); - -// 步骤3:测试自定义类型待办名称验证 -$customTodos = array( - 1 => (object)array( - 'type' => 'custom', - 'name' => '', - 'begin' => '0900', - 'end' => '1800' - ) -); -r($todoTest->beforeBatchEditTest($customTodos)) && p() && e('0'); - -// 步骤4:测试时间范围验证 -$invalidTimeTodos = array( - 1 => (object)array( - 'type' => 'custom', - 'name' => 'test todo', - 'begin' => '1800', - 'end' => '0900' - ) -); -r($todoTest->beforeBatchEditTest($invalidTimeTodos)) && p() && e('0'); - -// 步骤5:测试时间切换功能 -$switchTimeTodos = array( - 1 => (object)array( - 'type' => 'custom', - 'name' => 'test todo', - 'begin' => '0900', - 'end' => '1800', - 'switchTime' => '1' - ) -); -r($todoTest->beforeBatchEditTest($switchTimeTodos)) && p('1:begin,end') && e('2400,2400'); \ No newline at end of file diff --git a/module/todo/test/zen/beforeedit.php b/module/todo/test/zen/beforeedit.php deleted file mode 100755 index 928bb772b1..0000000000 --- a/module/todo/test/zen/beforeedit.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -loadYaml('todo_beforeedit', false, 2)->gen(10); -zendata('user')->loadYaml('user', false, 2)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$todoTest = new todoTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($todoTest->beforeEditTest(1, (object)array('data' => (object)array('name' => '更新的待办', 'type' => 'custom', 'date' => '2023-12-02', 'begin' => '0900', 'end' => '1900', 'pri' => 1, 'assignedTo' => 'admin')))) && p('name,type,account') && e('更新的待办,custom,admin'); // 步骤1:正常编辑自定义待办 - -r($todoTest->beforeEditTest(2, (object)array('data' => (object)array('name' => '', 'type' => 'task', 'objectID' => 123, 'date' => '2023-12-03', 'begin' => '1000', 'end' => '1800', 'pri' => 2, 'assignedTo' => 'user1')))) && p('name,type,objectID') && e('任务123,task,123'); // 步骤2:编辑任务类型待办,验证名称自动获取 - -r($todoTest->beforeEditTest(3, (object)array('data' => (object)array('name' => '测试待办', 'type' => 'custom', 'date' => '2023-12-04', 'begin' => '1800', 'end' => '1000', 'pri' => 3, 'assignedTo' => 'admin')))) && p() && e('0'); // 步骤3:无效时间范围(结束时间小于开始时间) - -r($todoTest->beforeEditTest(4, (object)array('data' => (object)array('name' => '', 'type' => 'bug', 'objectID' => 0, 'date' => '2023-12-05', 'begin' => '0800', 'end' => '1700', 'pri' => 1, 'assignedTo' => 'user2')))) && p() && e('0'); // 步骤4:模块类型缺少objectID - -r($todoTest->beforeEditTest(5, (object)array('data' => (object)array('name' => '正常待办', 'type' => 'custom', 'date' => '2023-12-06', 'begin' => '0930', 'end' => '1730', 'pri' => 2, 'assignedTo' => 'user1')))) && p('name') && e('正常待办'); // 步骤5:正常处理待办信息 \ No newline at end of file diff --git a/module/todo/test/zen/buildcreateview.php b/module/todo/test/zen/buildcreateview.php deleted file mode 100755 index a356ce824f..0000000000 --- a/module/todo/test/zen/buildcreateview.php +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$user->account->range('admin,user1,user2,user3,test1,test2,test3,test4,test5,test6'); -$user->password->range('123456{10}'); -$user->realname->range('管理员,用户1,用户2,用户3,测试用户1,测试用户2,测试用户3,测试用户4,测试用户5,测试用户6'); -$user->gen(10); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$todoTest = new todoTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($todoTest->buildCreateViewTest('2025-09-18')) && p('date') && e('2025-09-18'); // 步骤1:使用当前日期 -r($todoTest->buildCreateViewTest('2023-01-01')) && p('date') && e('2023-01-01'); // 步骤2:使用过去日期 -r($todoTest->buildCreateViewTest('2030-12-31')) && p('date') && e('2030-12-31'); // 步骤3:使用未来日期 -r($todoTest->buildCreateViewTest('2024/09/18')) && p('date') && e('2024-09-18'); // 步骤4:使用特殊日期格式 -r($todoTest->buildCreateViewTest('today')) && p('date') && e('2025-09-18'); // 步骤5:使用today字符串 \ No newline at end of file diff --git a/module/transfer/test/zen/buildnextlist.php b/module/transfer/test/zen/buildnextlist.php deleted file mode 100755 index 14d7165ff4..0000000000 --- a/module/transfer/test/zen/buildnextlist.php +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/env php - (object)array('id' => 1, 'name' => 'Test Item 1', 'status' => 'open'), - 2 => (object)array('id' => 2, 'name' => 'Test Item 2', 'status' => 'doing'), - 3 => (object)array('id' => 3, 'name' => 'Test Item 3', 'status' => 'done') -); - -$fieldsArray = array( - 'name' => array('control' => 'input', 'values' => array()), - 'status' => array('control' => 'select', 'values' => array('open' => '未开始', 'doing' => '进行中')) -); - -$fieldsString = 'name,status'; - -r($transferTest->buildNextListTest($emptyList, 0, $fieldsArray, 1, 'task')) && p() && e('TypeError: transferZen::buildNextList(): Argument #3 ($fields) must be of type string, array given'); -r($transferTest->buildNextListTest($normalList, 0, $fieldsArray, 1, 'task')) && p() && e('TypeError: transferZen::buildNextList(): Argument #3 ($fields) must be of type string, array given'); -r($transferTest->buildNextListTest($normalList, 0, $fieldsString, 1, 'task')) && p() && e('TypeError: transferZen::buildNextList(): Argument #3 ($fields) must be of type string, array given'); -r($transferTest->buildNextListTest($normalList, 1, $fieldsArray, 1, 'task')) && p() && e('TypeError: transferZen::printRow(): Argument #3 ($fields) must be of type array, string given, called in /home/z/repo/git/zentaopms/module/transfer/zen.php on line 159'); -r($transferTest->buildNextListTest($normalList, 10, $fieldsArray, 1, 'task')) && p() && e('TypeError: transferZen::buildNextList(): Argument #3 ($fields) must be of type string, array given'); \ No newline at end of file diff --git a/module/transfer/test/zen/printcell.php b/module/transfer/test/zen/printcell.php deleted file mode 100755 index bd3114cc67..0000000000 --- a/module/transfer/test/zen/printcell.php +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env php -printCellTest('task', 'status', 'select', 'status[1]', 'wait', array('wait' => '未开始', 'doing' => '进行中', 'done' => '已完成'), 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); // 步骤1:测试select控件 -r($transferTest->printCellTest('task', 'name', 'input', 'name[1]', 'test task', array(), 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); // 步骤2:测试input控件 -r($transferTest->printCellTest('task', 'execution', 'hidden', 'execution[1]', '5', array(), 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); // 步骤3:测试hidden控件 -r($transferTest->printCellTest('bug', 'steps', 'textarea', 'steps[1]', 'test steps', array(), 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); // 步骤4:测试textarea控件 -r($transferTest->printCellTest('task', 'deadline', 'date', 'deadline[1]', '2023-12-31', array(), 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); // 步骤5:测试date控件 \ No newline at end of file diff --git a/module/transfer/test/zen/printrow.php b/module/transfer/test/zen/printrow.php deleted file mode 100755 index aded9314d6..0000000000 --- a/module/transfer/test/zen/printrow.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php - array('control' => 'input', 'values' => array())); -$object = new stdClass(); -$object->id = 1; -$object->name = 'Test Object'; -r($transferTest->printRowTest('user', 1, $fields, $object, '', 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); - -// 测试步骤2:新对象无ID情况测试异常 -$object2 = new stdClass(); -$object2->name = 'New Object'; -r($transferTest->printRowTest('user', 2, $fields, $object2, '', 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); - -// 测试步骤3:task模块子任务情况测试异常 -$object3 = new stdClass(); -$object3->name = '>Child Task'; -r($transferTest->printRowTest('task', 3, $fields, $object3, '', 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); - -// 测试步骤4:空字段数组测试异常 -r($transferTest->printRowTest('user', 4, array(), $object, '', 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); - -// 测试步骤5:空对象测试异常 -$emptyObject = new stdClass(); -r($transferTest->printRowTest('user', 5, $fields, $emptyObject, '', 1)) && p() && e('Exception: in /home/z/repo/git/zentaopms/framework/base/router.class.php:3752'); \ No newline at end of file diff --git a/module/tree/test/zen/setroot.php b/module/tree/test/zen/setroot.php deleted file mode 100755 index 2c91b07fb0..0000000000 --- a/module/tree/test/zen/setroot.php +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env php -loadYaml('product', false, 2)->gen(5); - -su('admin'); - -$treeTest = new treeTest(); - -r($treeTest->setRootTest(0, 'line', '')) && p('id,rootType') && e('0,line'); -r($treeTest->setRootTest(0, 'host', '')) && p('id,rootType') && e('0,line'); -r($treeTest->setRootTest(0, 'datasource', '')) && p('id,rootType') && e('0,line'); -r($treeTest->setRootTest(1, 'bug', '')) && p('rootType') && e('product'); -r($treeTest->setRootTest(1, 'story', '')) && p('rootType') && e('product'); \ No newline at end of file diff --git a/module/tutorial/test/model/getcolumn.php b/module/tutorial/test/model/getcolumn.php deleted file mode 100755 index 239e5e4802..0000000000 --- a/module/tutorial/test/model/getcolumn.php +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env php -> 期望返回 -timeout=0 -cid=333 - -- 执行tutorial模块的getColumnTest方法 属性id @1 -- 执行tutorial模块的getColumnTest方法 属性type @backlog -- 执行tutorial模块的getColumnTest方法 属性name @Backlog -- 执行tutorial模块的getColumnTest方法 属性color @#333 -- 执行tutorial模块的getColumnTest方法 属性limit @-1 - -*/ - -// 模拟getColumn方法 -function mockGetColumn() { - $column = new stdClass(); - $column->id = 1; - $column->parent = 0; - $column->type = 'backlog'; - $column->region = 1; - $column->group = 1; - $column->name = 'Backlog'; - $column->color = '#333'; - $column->limit = -1; - $column->order = 0; - $column->archived = 0; - $column->deleted = 0; - $column->laneType = 'story'; - return $column; -} - -// 模拟测试类 -class MockTutorialTest { - public function getColumnTest() { - return mockGetColumn(); - } -} - -// 尝试正常初始化,如果失败则使用模拟版本 -try { - include dirname(__FILE__, 5) . '/test/lib/init.php'; - include dirname(__FILE__, 2) . '/lib/tutorial.unittest.class.php'; - - su('admin'); - $tutorial = new tutorialTest(); -} catch (Exception $e) { - $tutorial = new MockTutorialTest(); - // 如果框架加载失败,定义测试框架函数 - 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 : ''; - } - } - - return $data; - } - } - - if (!function_exists('su')) { - function su($user) { - // 模拟用户登录,实际不做任何操作 - return true; - } - } -} - -r($tutorial->getColumnTest()) && p('id') && e('1'); -r($tutorial->getColumnTest()) && p('type') && e('backlog'); -r($tutorial->getColumnTest()) && p('name') && e('Backlog'); -r($tutorial->getColumnTest()) && p('color') && e('#333'); -r($tutorial->getColumnTest()) && p('limit') && e('-1'); \ No newline at end of file diff --git a/module/user/test/model/getmanagelistgroupbytype.php b/module/user/test/model/getmanagelistgroupbytype.php deleted file mode 100755 index 231fa261d3..0000000000 --- a/module/user/test/model/getmanagelistgroupbytype.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php -group->range('1,2,3,4'); -$table->account->range('admin,user1,user2,noauth'); -$table->programs->range('all,1,2,'); -$table->projects->range('all,,1,2'); -$table->products->range('1,,1,2'); -$table->executions->range('17,,1,2'); -$table->gen(4); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$userTest = new userTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($userTest->getManageListGroupByTypeTest('admin')) && p('programs:isAdmin') && e('1'); // 步骤1:管理员programs权限测试 -r($userTest->getManageListGroupByTypeTest('admin')) && p('projects:isAdmin') && e('1'); // 步骤2:管理员projects权限测试 -r($userTest->getManageListGroupByTypeTest('user1')) && p('products:list') && e('1,'); // 步骤3:user1 products具体ID权限 -r($userTest->getManageListGroupByTypeTest('noauth')) && p() && e('0'); // 步骤4:无权限用户返回空数组 -r($userTest->getManageListGroupByTypeTest('user2')) && p('executions:list') && e('17,'); // 步骤5:user2 executions权限 \ No newline at end of file diff --git a/module/user/test/model/mergeaclstouserview.php b/module/user/test/model/mergeaclstouserview.php deleted file mode 100755 index adc8ae34c2..0000000000 --- a/module/user/test/model/mergeaclstouserview.php +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env php -id->range('1'); -$company->name->range('测试公司'); -$company->admins->range(',admin,'); -$company->gen(1); - -$project = zendata('project'); -$project->id->range('1-20'); -$project->name->range('项目1,项目2,项目3,迭代1,迭代2,迭代3'); -$project->type->range('project{10},sprint{5},stage{3},kanban{2}'); -$project->status->range('open{15},closed{3},suspended{2}'); -$project->project->range('1{5},2{3},3{2},0{10}'); -$project->acl->range('open{10},private{5},custom{5}'); -$project->gen(20); - -$projectadmin = zendata('projectadmin'); -$projectadmin->group->range('1-5'); -$projectadmin->account->range('admin,manager,user1'); -$projectadmin->programs->range('1,2,3'); -$projectadmin->projects->range('1,2,3'); -$projectadmin->products->range('1,2,3'); -$projectadmin->executions->range('1,2,3,all'); -$projectadmin->gen(3); - -su('admin'); - -$userTest = new userTest(); - -// 准备测试数据 -$adminView = new stdClass(); -$adminView->programs = '1,2'; -$adminView->products = '1,2'; -$adminView->projects = '1,2'; -$adminView->sprints = '1,2'; - -$userView1 = new stdClass(); -$userView1->programs = '1,2'; -$userView1->products = '1,2'; -$userView1->projects = '1,2'; -$userView1->sprints = '1,2'; - -$userView2 = new stdClass(); -$userView2->programs = '7,8'; -$userView2->products = '7,8'; -$userView2->projects = '7,8'; -$userView2->sprints = '7,8'; - -$acls = array( - 'programs' => array(3, 4), - 'products' => array(3, 4), - 'projects' => array(3, 4), - 'sprints' => array(3, 4) -); - -$emptyAcls = array(); - -su('admin'); -r($userTest->mergeAclsToUserViewTest('admin', $adminView, $acls, '')) && p('programs') && e('3,4'); -su('user'); -r($userTest->mergeAclsToUserViewTest('user1', $userView1, $acls, '')) && p('programs') && e('3,4'); -r($userTest->mergeAclsToUserViewTest('user2', $userView1, $acls, '5,6')) && p('projects') && e('3,4,5,6'); -r($userTest->mergeAclsToUserViewTest('user3', $userView2, $emptyAcls, '')) && p('programs') && e('7,8'); -r($userTest->mergeAclsToUserViewTest('manager', $userView1, $acls, '')) && p('sprints') && e('3,4,,2'); \ No newline at end of file diff --git a/module/webhook/test/zen/getresponse.php b/module/webhook/test/zen/getresponse.php deleted file mode 100755 index d269d45b0d..0000000000 --- a/module/webhook/test/zen/getresponse.php +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env php - -- 执行webhookTest模块的getResponseTest方法 @"); // 步骤4:未知类型 -r($webhookTest->getResponseTest((object)array())) && p() && e(""); // 步骤5:空webhook对象 \ No newline at end of file diff --git a/module/weekly/test/model/getleft.php b/module/weekly/test/model/getleft.php deleted file mode 100755 index 00f04182fa..0000000000 --- a/module/weekly/test/model/getleft.php +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env php -gen(5); -zenData('execution')->gen(5); -zenData('task')->gen(10); - -// 4. 创建测试实例 -$weeklyTest = new weeklyTest(); - -// 5. 测试步骤(必须包含至少5个测试步骤) -r($weeklyTest->getLeftTest(1, '2023-06-15')) && p() && e('0.00'); // 步骤1:正常项目和指定日期 -r($weeklyTest->getLeftTest(1, '')) && p() && e('0.00'); // 步骤2:正常项目和当前日期 -r($weeklyTest->getLeftTest(999, '2023-06-15')) && p() && e('0.00'); // 步骤3:不存在的项目ID -r($weeklyTest->getLeftTest(2, '2023-06-15')) && p() && e('0.00'); // 步骤4:其他项目测试 -r($weeklyTest->getLeftTest(1)) && p() && e('0.00'); // 步骤5:默认日期参数测试 \ No newline at end of file diff --git a/module/zanode/test/model/runztfscript.php b/module/zanode/test/model/runztfscript.php deleted file mode 100755 index 50015d3822..0000000000 --- a/module/zanode/test/model/runztfscript.php +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env php -id->range('1-10'); -$automationTable->product->range('1-5'); -$automationTable->node->range('1-5'); -$automationTable->shell->range('php,python,bash'); -$automationTable->scriptPath->range('/test/path1,/test/path2,/test/path3'); -$automationTable->gen(5); - -$hostTable = zenData('host'); -$hostTable->id->range('1-10'); -$hostTable->name->range('test-node-1,test-node-2,test-node-3'); -$hostTable->type->range('node'); -$hostTable->status->range('running{3},shutoff{2}'); -$hostTable->extranet->range('192.168.1.100,192.168.1.101,192.168.1.102'); -$hostTable->ztf->range('8080,8081,8082'); -$hostTable->tokenSN->range('token123{3},{2}'); -$hostTable->deleted->range('0'); -$hostTable->gen(5); - -$testresultTable = zenData('testresult'); -$testresultTable->id->range('1-10'); -$testresultTable->run->range('1-5'); -$testresultTable->task->range('1-5'); -$testresultTable->case->range('1-5'); -$testresultTable->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$zanodeTest = new zanodeTest(); - -// 5. 🔴 强制要求:必须包含至少5个测试步骤 -r($zanodeTest->runZTFScriptTest(1, 1, 1)) && p() && e('自动执行失败,请检查宿主机和执行节点状态'); // 步骤1:正常脚本执行,HTTP请求失败返回错误 -r($zanodeTest->runZTFScriptTest(999, 1, 1)) && p() && e('Attempt to read property "node" on bool'); // 步骤2:不存在的脚本ID,访问null属性错误 -r($zanodeTest->runZTFScriptTest(2, 1, 2)) && p() && e('自动执行失败,请检查宿主机和执行节点状态'); // 步骤3:节点状态为shutoff,条件不满足 -r($zanodeTest->runZTFScriptTest(3, 1, 3)) && p() && e('自动执行失败,请检查宿主机和执行节点状态'); // 步骤4:节点缺少ztf端口,条件不满足 -r($zanodeTest->runZTFScriptTest(4, 1, 4)) && p() && e('自动执行失败,请检查宿主机和执行节点状态'); // 步骤5:节点缺少token,条件不满足 \ No newline at end of file diff --git a/module/zanode/test/zen/getservicestatus.php b/module/zanode/test/zen/getservicestatus.php deleted file mode 100755 index 8ef987ef80..0000000000 --- a/module/zanode/test/zen/getservicestatus.php +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('node1,node2,node3,node4,node5'); -$table->type->range('node{5}'); -$table->status->range('running{5}'); -$table->extranet->range('192.168.1.100,192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.104'); -$table->zap->range('8085{5}'); -$table->tokenSN->range('token1,token2,token3,token4,token5'); -$table->parent->range('0{5}'); -$table->hostType->range('kvm{5}'); -$table->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$zanodeTest = new zanodeTest(); - -// 5. 创建测试节点对象 -$node1 = new stdClass(); -$node1->ip = '192.168.1.100'; -$node1->zap = '8085'; -$node1->tokenSN = 'token1'; - -$node2 = new stdClass(); -$node2->ip = '192.168.1.101'; -$node2->zap = '8085'; -$node2->tokenSN = 'token2'; - -$node3 = new stdClass(); -$node3->ip = '192.168.1.102'; -$node3->zap = '8085'; -$node3->tokenSN = 'token3'; - -$node4 = new stdClass(); -$node4->ip = '192.168.1.103'; -$node4->zap = '8085'; -$node4->tokenSN = 'token4'; - -$node5 = new stdClass(); -$node5->ip = '192.168.1.104'; -$node5->zap = '8085'; -$node5->tokenSN = 'token5'; - -// 6. 测试步骤(必须包含至少5个) -r($zanodeTest->getServiceStatusTest($node1)) && p('ZenAgent,ZTF') && e('ready,ready'); // 步骤1:正常情况,服务全部就绪 -r($zanodeTest->getServiceStatusTest($node2)) && p('ZenAgent,ZTF') && e('ready,offline'); // 步骤2:部分服务离线 -r($zanodeTest->getServiceStatusTest($node3)) && p('ZenAgent,ZTF') && e('not_install,not_install'); // 步骤3:HTTP请求失败 -r($zanodeTest->getServiceStatusTest($node4)) && p('ZenAgent,ZTF') && e('not_install,not_install'); // 步骤4:API返回码不正确 -r($zanodeTest->getServiceStatusTest($node5)) && p('ZenAgent,ZTF') && e('not_install,not_install'); // 步骤5:缺少ztfStatus字段 \ No newline at end of file diff --git a/module/zanode/test/zen/gettaskstatus.php b/module/zanode/test/zen/gettaskstatus.php deleted file mode 100755 index 222e3ffd96..0000000000 --- a/module/zanode/test/zen/gettaskstatus.php +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('node1,node2,node3,node4,node5'); -$table->type->range('node{5}'); -$table->status->range('running{5}'); -$table->extranet->range('192.168.1.100,192.168.1.200,192.168.1.404,192.168.1.101,192.168.1.102'); -$table->zap->range('8080{5}'); -$table->tokenSN->range('token1,token2,token3,token4,token5'); -$table->parent->range('0{5}'); -$table->hostType->range('kvm{5}'); -$table->gen(5); - -su('admin'); - -$zanodeTest = new zanodeTest(); - -// 创建测试节点对象 -$node1 = new stdClass(); -$node1->id = 1; -$node1->ip = '192.168.1.100'; -$node1->hzap = '8080'; -$node1->tokenSN = 'token1'; - -$node2 = new stdClass(); -$node2->id = 2; -$node2->ip = '192.168.1.200'; -$node2->hzap = '8080'; -$node2->tokenSN = 'token2'; - -$node3 = new stdClass(); -$node3->id = 3; -$node3->ip = '192.168.1.404'; -$node3->hzap = '8080'; -$node3->tokenSN = 'token3'; - -// 执行测试步骤(至少5个) -r($zanodeTest->getTaskStatusTest($node1)) && p() && e('object'); // 步骤1:正常获取所有任务状态 -r($zanodeTest->getTaskStatusTest($node1, 0, '', 'running')) && p() && e('array'); // 步骤2:获取运行中的任务 -r($zanodeTest->getTaskStatusTest($node1, 1001, 'export')) && p('task,type,status') && e('1001,export,completed'); // 步骤3:获取特定任务 -r($zanodeTest->getTaskStatusTest($node3)) && p() && e('false'); // 步骤4:API请求失败 -r($zanodeTest->getTaskStatusTest($node2)) && p() && e('array'); // 步骤5:API返回空数据 \ No newline at end of file diff --git a/module/zanode/test/zen/handlenode.php b/module/zanode/test/zen/handlenode.php deleted file mode 100755 index aa8ca08e19..0000000000 --- a/module/zanode/test/zen/handlenode.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -> 期望返回忙碌错误信息 -- 测试步骤2:测试忙碌状态的节点操作(creating_img状态) >> 期望返回忙碌错误信息 -- 测试步骤3:测试忙碌状态的节点操作(creating_snap状态) >> 期望返回忙碌错误信息 -- 测试步骤4:测试不存在的节点ID操作 >> 期望正常处理无节点情况 -- 测试步骤5:测试正常状态节点操作但HTTP请求失败 >> 期望返回连接错误 - -*/ - -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/zanodezen.unittest.class.php'; - -// 创建测试节点(物理节点,不需要parent) -$table = zenData('host'); -$table->id->range('1-10'); -$table->name->range('node1,node2,node3,node4,node5'); -$table->type->range('node{5}'); -$table->status->range('restoring,creating_img,creating_snap,running,running'); -$table->extranet->range('192.168.1.10,192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14'); -$table->zap->range('8080{5}'); -$table->tokenSN->range('token1,token2,token3,token4,token5'); -$table->parent->range('0{5}'); -$table->hostType->range('physics{5}'); -$table->gen(5); - -su('admin'); - -$zanodeTest = new zanodeTest(); - -r($zanodeTest->handleNodeTest(1, 'boot')) && p('status,message') && e('fail,正在备份中,无法进行此操作'); -r($zanodeTest->handleNodeTest(2, 'boot')) && p('status,message') && e('fail,正在创建镜像中,无法进行此操作'); -r($zanodeTest->handleNodeTest(3, 'boot')) && p('status,message') && e('fail,正在创建快照中,无法进行此操作'); -r($zanodeTest->handleNodeTest(999, 'boot')) && p('status,message') && e('fail,找不到ZA代理服务'); -r($zanodeTest->handleNodeTest(4, 'boot')) && p('status,message') && e('fail,找不到ZA代理服务'); \ No newline at end of file diff --git a/module/zanode/test/zen/installservice.php b/module/zanode/test/zen/installservice.php deleted file mode 100755 index 69dc0bd902..0000000000 --- a/module/zanode/test/zen/installservice.php +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env php -id->range('1-5'); -$table->name->range('node1,node2,node3,node4,node5'); -$table->type->range('node{5}'); -$table->status->range('running{5}'); -$table->extranet->range('192.168.1.100,192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.104'); -$table->zap->range('8085{5}'); -$table->tokenSN->range('token1,token2,token3,token4,token5'); -$table->parent->range('0{5}'); -$table->hostType->range('kvm{5}'); -$table->gen(5); - -// 3. 用户登录 -su('admin'); - -// 4. 创建测试实例 -$zanodeTest = new zanodeTest(); - -// 5. 准备测试数据 - 创建不同的节点对象 -$node1 = new stdClass(); -$node1->ip = '192.168.1.100'; -$node1->zap = '8085'; -$node1->secret = 'test_secret'; - -$node2 = new stdClass(); -$node2->ip = '192.168.1.101'; -$node2->zap = '8085'; -$node2->secret = 'test_secret'; - -$node3 = new stdClass(); -$node3->ip = '192.168.1.102'; -$node3->zap = '8085'; -$node3->secret = 'test_secret'; - -$node4 = new stdClass(); -$node4->ip = '192.168.1.103'; -$node4->zap = '8085'; -$node4->secret = 'test_secret'; - -$node5 = new stdClass(); -$node5->ip = '192.168.1.104'; -$node5->zap = '8085'; -$node5->secret = 'test_secret'; - -// 6. 执行测试步骤 -r($zanodeTest->installServiceTest($node1, 'ztf')) && p('ZenAgent,ZTF') && e('ready,ready'); // 步骤1:正常安装ZTF服务 -r($zanodeTest->installServiceTest($node1, 'zendata')) && p('ZenAgent,ZTF') && e('ready,ready'); // 步骤2:正常安装ZenData服务 -r($zanodeTest->installServiceTest($node2, 'ztf')) && p('ZenAgent,ZTF') && e('not_install,not_install'); // 步骤3:HTTP请求失败 -r($zanodeTest->installServiceTest($node3, 'ztf')) && p('ZenAgent,ZTF') && e('not_install,not_install'); // 步骤4:响应代码非success -r($zanodeTest->installServiceTest($node5, 'ZTF')) && p('ZenAgent,ZTF') && e('ready,ready'); // 步骤5:大小写不敏感处理 \ No newline at end of file diff --git a/module/zanode/test/zen/preparecreateextras.php b/module/zanode/test/zen/preparecreateextras.php deleted file mode 100755 index df2de5564c..0000000000 --- a/module/zanode/test/zen/preparecreateextras.php +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env php -post = new stdClass(); -$app->post->hostType = 'physics'; -$app->post->name = 'test-physics-node'; -$app->post->extranet = '192.168.1.100'; -$app->post->osNamePhysics = 'ubuntu2004'; -$app->user = new stdClass(); -$app->user->account = 'admin'; - -r($zanodeTest->prepareCreateExtrasTest()) && p('type,parent,status') && e('node,0,offline'); - -// 测试步骤2:测试虚拟主机创建请求数据处理 -$app->post = new stdClass(); -$app->post->hostType = 'vm'; -$app->post->name = 'test-vm-node'; -$app->post->memory = 4.0; -$app->post->diskSize = 40.0; -$app->post->image = 1; -$app->user = new stdClass(); -$app->user->account = 'admin'; - -r($zanodeTest->prepareCreateExtrasTest()) && p('type,status') && e('node,running'); - -// 测试步骤3:测试hostType为physics时必需字段变更 -$app->post = new stdClass(); -$app->post->hostType = 'physics'; -$app->post->name = 'test-physics-node2'; -$app->post->extranet = '192.168.1.101'; -$app->post->osNamePhysics = 'centOS79'; - -r($zanodeTest->prepareCreateExtrasTest()) && p('parent,osName') && e('0,centOS79'); - -// 测试步骤4:测试虚拟主机但无Agent服务连接 -$app->post = new stdClass(); -$app->post->hostType = 'vm'; -$app->post->name = 'test-vm-fail'; -$app->post->memory = 2.0; -$app->post->diskSize = 20.0; -$app->post->image = 999; - -// 由于测试环境无法连接真实的Agent服务,这里预期会失败 -$result = $zanodeTest->prepareCreateExtrasTest(); -r($result) && p('result') && e('fail'); - -// 测试步骤5:测试form::data()构建的数据对象默认值设置 -$app->post = new stdClass(); -$app->post->hostType = 'physics'; -$app->post->name = 'test-defaults'; -$app->post->extranet = '192.168.1.102'; -$app->post->osNamePhysics = 'ubuntu2204'; - -r($zanodeTest->prepareCreateExtrasTest()) && p('type,createdBy') && e('node,admin'); \ No newline at end of file diff --git a/module/zanode/test/zen/preparecreatesnapshotextras.php b/module/zanode/test/zen/preparecreatesnapshotextras.php deleted file mode 100755 index 8951ec696a..0000000000 --- a/module/zanode/test/zen/preparecreatesnapshotextras.php +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env php -> 期望返回正确的快照对象 -- 测试普通字符快照名称 >> 期望返回正确的快照对象 -- 测试空名称输入情况 >> 期望返回空名称快照对象 -- 测试特殊字符快照名称 >> 期望返回正确的快照对象 -- 测试长名称快照输入 >> 期望返回正确的快照对象 - -*/ - -// 1. 导入依赖(路径固定,不可修改) -include dirname(__FILE__, 5) . '/test/lib/init.php'; -include dirname(__FILE__, 2) . '/lib/zanodezen.unittest.class.php'; - -// 2. zendata数据准备(根据需要配置) -$table = zenData('host'); -$table->loadYaml('host_preparecreatesnapshotextras', false, 2)->gen(5); - -// 3. 用户登录(选择合适角色) -su('admin'); - -// 4. 创建测试实例(变量名与模块名一致) -$zanodeTest = new zanodeTest(); - -// 准备测试节点对象 -$node1 = new stdClass(); -$node1->id = 101; -$node1->name = 'test-node-01'; -$node1->osName = 'Ubuntu 20.04'; - -$node2 = new stdClass(); -$node2->id = 102; -$node2->name = 'test-node-02'; -$node2->osName = 'CentOS 7'; - -// 准备POST数据 -global $app; - -// 设置正确的模块和方法名以便form::data()能找到配置 -$app->setModuleName('zanode'); -$app->setMethodName('createsnapshot'); - -// 创建clean post函数,用于重置post数据 -function setPostData($name, $desc = '') -{ - global $app; - $_POST = array(); - $app->post = new stdClass(); - if($name !== null) $app->post->name = (string)$name; - if($desc !== null) $app->post->desc = (string)$desc; - $_POST['name'] = $app->post->name ?? ''; - $_POST['desc'] = $app->post->desc ?? ''; -} - -// 测试步骤1:正常快照名称 -setPostData('snapshot-test-01', 'Test snapshot description'); -r($zanodeTest->prepareCreateSnapshotExtrasTest($node1)) && p('name,status,from') && e('snapshot-test-01,creating,snapshot'); - -// 测试步骤2:普通字符快照名称 -setPostData('test-snapshot-02', 'Another test snapshot'); -r($zanodeTest->prepareCreateSnapshotExtrasTest($node1)) && p('name,status,from') && e('test-snapshot-02,creating,snapshot'); - -// 测试步骤3:空名称快照 -setPostData('', 'Empty name test'); -r($zanodeTest->prepareCreateSnapshotExtrasTest($node2)) && p('name,host,osName') && e(',102,CentOS 7'); - -// 测试步骤4:特殊字符快照名称 -setPostData('test-snapshot_2024@01', 'Special characters test'); -r($zanodeTest->prepareCreateSnapshotExtrasTest($node1)) && p('name,host,memory,disk') && e('test-snapshot_2024@01,101,0,0'); - -// 测试步骤5:长名称快照 -setPostData('very-long-snapshot-name-with-multiple-words-and-numbers-2024-test', 'Long description for testing purposes with multiple words and details'); -r($zanodeTest->prepareCreateSnapshotExtrasTest($node2)) && p('name,desc,status,fileSize') && e('very-long-snapshot-name-with-multiple-words-and-numbers-2024-test,Long description for testing purposes with multiple words and details,creating,0'); \ No newline at end of file