diff --git a/module/action/test/tao/processcreatechildrenactionextra.php b/module/action/test/tao/processcreatechildrenactionextra.php
deleted file mode 100755
index 7778e98e6d..0000000000
--- a/module/action/test/tao/processcreatechildrenactionextra.php
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$taskTable->name->range('实现用户登录功能,开发API接口,编写单元测试,修复Bug问题,数据库设计,前端页面开发,系统集成测试,性能优化,代码审查,文档编写');
-$taskTable->type->range('devel{5},test{3},design{2}');
-$taskTable->status->range('wait{3},doing{4},done{2},cancel{1}');
-$taskTable->project->range('1-3');
-$taskTable->execution->range('1-3');
-$taskTable->gen(10);
-
-su('admin');
-
-$actionTest = new actionTest();
-
-r($actionTest->processCreateChildrenActionExtraTest('1')) && p('extra') && e('#1 实现用户登录功能');
-r($actionTest->processCreateChildrenActionExtraTest('1,2,3')) && p('extra') && e('#1 实现用户登录功能, #2 开发API接口, #3 编写单元测试');
-r($actionTest->processCreateChildrenActionExtraTest('999')) && p('extra') && e('');
-r($actionTest->processCreateChildrenActionExtraTest('')) && p('extra') && e('');
-r($actionTest->processCreateChildrenActionExtraTest('1,999,2')) && p('extra') && e('#1 实现用户登录功能, #2 开发API接口');
\ No newline at end of file
diff --git a/module/action/test/tao/processcreatechilrenactionextra.php b/module/action/test/tao/processcreatechilrenactionextra.php
deleted file mode 100755
index be601bd97c..0000000000
--- a/module/action/test/tao/processcreatechilrenactionextra.php
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env php
-> 返回格式化的任务信息
-- 测试多个有效任务ID >> 返回多个任务信息
-- 测试不存在的任务ID >> 返回空字符串
-- 测试空字符串输入 >> 返回空字符串
-- 测试混合有效和无效ID >> 只返回有效任务信息
-- 测试大量任务ID >> 正确处理所有有效任务
-- 测试包含空格的ID字符串 >> 正确处理并过滤空格
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/action.unittest.class.php';
-
-zenData('task')->loadYaml('task_processcreatechilredactionextra', false, 2)->gen(10);
-zenData('user')->gen(5);
-
-su('admin');
-
-$actionTest = new actionTest();
-
-r($actionTest->processCreateChildrenActionExtraTest('1')) && p('extra') && e('#1 开发任务11');
-r($actionTest->processCreateChildrenActionExtraTest('1,2,3')) && p('extra') && e('#1 开发任务11, #2 开发任务12, #3 开发任务13');
-r($actionTest->processCreateChildrenActionExtraTest('999')) && p('extra') && e('~~');
-r($actionTest->processCreateChildrenActionExtraTest('')) && p('extra') && e('~~');
-r($actionTest->processCreateChildrenActionExtraTest('1,999,2')) && p('extra') && e('#1 开发任务11, #2 开发任务12');
-r($actionTest->processCreateChildrenActionExtraTest('1,2,3,4,5')) && p('extra') && e('#1 开发任务11, #2 开发任务12, #3 开发任务13, #4 开发任务14, #5 开发任务15');
-r($actionTest->processCreateChildrenActionExtraTest('1, 2, 3')) && p('extra') && e('#1 开发任务11, #2 开发任务12, #3 开发任务13');
diff --git a/module/action/test/tao/processcreaterequirementsactionextra.php b/module/action/test/tao/processcreaterequirementsactionextra.php
deleted file mode 100755
index 1c7776db75..0000000000
--- a/module/action/test/tao/processcreaterequirementsactionextra.php
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env php
-loadYaml('story_processcreaterequirementsactionextra', false, 2)->gen(10);
-zenData('user')->gen(5);
-
-su('admin');
-
-$actionTest = new actionTest();
-
-r($actionTest->processCreateRequirementsActionExtraTest((object)array('extra' => '1'))) && p('extra') && e('#1 用户需求1');
-r($actionTest->processCreateRequirementsActionExtraTest((object)array('extra' => '1,2,3'))) && p('extra') && e('#1 用户需求1, #2 软件需求2, #3 用户需求3');
-r($actionTest->processCreateRequirementsActionExtraTest((object)array('extra' => '999'))) && p('extra') && e('0');
-r($actionTest->processCreateRequirementsActionExtraTest((object)array('extra' => ''))) && p('extra') && e('0');
-r($actionTest->processCreateRequirementsActionExtraTest((object)array('extra' => '1,999,2'))) && p('extra') && e('#1 用户需求1, #2 软件需求2');
\ 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 75c65c28dd..0000000000
--- a/module/action/test/tao/processlinkstoryandbugactionextra.php
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env php
-processLinkStoryAndBugActionExtraTest('1', 'story', 'view')) && p('extra') && e('#1');
-r($actionTest->processLinkStoryAndBugActionExtraTest('1,2,3', 'story', 'view')) && p('extra') && e('#1, #2, #3');
-r($actionTest->processLinkStoryAndBugActionExtraTest('1', 'bug', 'view')) && p('extra') && e('#1');
-r($actionTest->processLinkStoryAndBugActionExtraTest('5,10', 'bug', 'view')) && p('extra') && e('#5, #10');
-r($actionTest->processLinkStoryAndBugActionExtraTest('', 'story', 'view')) && p('extra') && e('#');
\ 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 8fba070f95..0000000000
--- a/module/action/test/tao/processtostoryactionextra.php
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$product->name->range('产品1,产品2,产品3,影子产品1,影子产品2');
-$product->shadow->range('0{3},1{2}');
-$product->gen(5);
-
-$story = zenData('story');
-$story->id->range('1-10');
-$story->product->range('1-5');
-$story->title->range('用户故事1,用户故事2,用户故事3,需求1,需求2,Epic1,Epic2,Feature1,Feature2,Story10');
-$story->type->range('story{7},requirement{2},epic');
-$story->gen(10);
-
-$projectstory = zenData('projectstory');
-$projectstory->project->range('101-105');
-$projectstory->story->range('4,5,4,6,7');
-$projectstory->gen(5);
-
-$actionTest = new actionTest();
-
-$action1 = new stdClass();
-$action1->objectID = 1;
-$action1->product = '1';
-$action1->extra = '1';
-r($actionTest->processToStoryActionExtraTest($action1)) && p('extra') && e('*#1 用户故事1*'); // 测试非影子产品的故事action extra处理
-
-$action2 = new stdClass();
-$action2->objectID = 2;
-$action2->product = '4';
-$action2->extra = '4';
-r($actionTest->processToStoryActionExtraTest($action2)) && p('extra') && e('*#4 需求1*'); // 测试影子产品的故事action extra处理(有项目关联)
-
-$action3 = new stdClass();
-$action3->objectID = 3;
-$action3->product = '5';
-$action3->extra = '8';
-r($actionTest->processToStoryActionExtraTest($action3)) && p('extra') && e('*#8 Feature1*'); // 测试影子产品的故事action extra处理(无项目关联)
-
-$action4 = new stdClass();
-$action4->objectID = 4;
-$action4->product = '1';
-$action4->extra = '999';
-r($actionTest->processToStoryActionExtraTest($action4)) && p('extra') && e('999'); // 测试不存在的故事ID
-
-$action5 = new stdClass();
-$action5->objectID = 5;
-$action5->product = '';
-$action5->extra = '2';
-r($actionTest->processToStoryActionExtraTest($action5)) && p('extra') && e('*#2 用户故事2*'); // 测试产品字段为空的情况
\ No newline at end of file
diff --git a/module/block/test/zen/createmorelink.php b/module/block/test/zen/createmorelink.php
deleted file mode 100755
index 4d3170463d..0000000000
--- a/module/block/test/zen/createmorelink.php
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$block1->module = 'project';
-$block1->code = 'recentproject';
-$block1->params = new stdclass();
-
-$block2 = new stdclass();
-$block2->id = 2;
-$block2->module = 'qa';
-$block2->code = 'bug';
-$block2->params = new stdclass();
-$block2->params->type = 'assignedTo';
-
-$block3 = new stdclass();
-$block3->id = 3;
-$block3->module = 'common';
-$block3->code = 'dynamic';
-$block3->params = new stdclass();
-
-$block4 = new stdclass();
-$block4->id = 4;
-$block4->module = 'project';
-$block4->code = 'execution';
-$block4->params = new stdclass();
-
-$block5 = new stdclass();
-$block5->id = 5;
-$block5->module = 'qa';
-$block5->code = 'testtask';
-$block5->params = new stdclass();
-
-$block6 = new stdclass();
-$block6->id = 6;
-$block6->module = 'qa';
-$block6->code = 'case';
-$block6->params = new stdclass();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->createMoreLinkTest($block1, 100)) && p('moreLink') && e('project-browse'); // 步骤1:测试recentproject类型block的moreLink生成
-r($blockTest->createMoreLinkTest($block2, 100)) && p('moreLink') && e('my-bug-type=assignedTo'); // 步骤2:测试带type参数的bug类型block的moreLink生成
-r($blockTest->createMoreLinkTest($block3, 100)) && p('moreLink') && e('my-dynamic'); // 步骤3:测试dynamic类型block的moreLink生成
-r($blockTest->createMoreLinkTest($block4, 100)) && p('moreLink') && e('~~'); // 步骤4:测试未配置的block返回空moreLink
-r($blockTest->createMoreLinkTest($block5, 100)) && p('moreLink') && e('testtask-browse-type='); // 步骤5:测试testtask类型block的moreLink生成
-r($blockTest->createMoreLinkTest($block6, 100)) && p('moreLink') && e('my-testcase-type='); // 步骤6:测试带空type的case类型block的moreLink生成
\ 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 b860573421..0000000000
--- a/module/block/test/zen/printannualworkloadblock.php
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$product->name->range('产品A,产品B,产品C,产品D,产品E');
-$product->code->range('producta,productb,productc,productd,producte');
-$product->status->range('normal{5}');
-$product->deleted->range('0{5}');
-$product->gen(5);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$blockTest = new blockTest();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printAnnualWorkloadBlockTest()) && p('success') && e('1'); // 步骤1:测试方法执行成功返回success为true
-r($blockTest->printAnnualWorkloadBlockTest()) && p('maxStoryEstimate') && e('80'); // 步骤2:测试返回maxStoryEstimate最大需求规模
-r($blockTest->printAnnualWorkloadBlockTest()) && p('maxStoryCount') && e('40'); // 步骤3:测试返回maxStoryCount最大需求数
-r($blockTest->printAnnualWorkloadBlockTest()) && p('maxBugCount') && e('15'); // 步骤4:测试返回maxBugCount最大Bug数
-r($blockTest->printAnnualWorkloadBlockTest()) && p('success,maxStoryEstimate') && e('1,80'); // 步骤5:测试返回对象包含所有必要属性
\ 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 38df07360f..0000000000
--- a/module/block/test/zen/printassigntomeblock.php
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env php
-params = new stdclass();
-$block1->params->count = 15;
-
-$block2 = new stdclass();
-$block2->params = new stdclass();
-$block2->params->count = 10;
-
-$block3 = new stdclass();
-$block3->params = new stdclass();
-$block3->params->count = 5;
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printAssignToMeBlockTest($block1)) && p('success') && e('1'); // 步骤1:测试方法执行成功返回success为true
-r($blockTest->printAssignToMeBlockTest($block1)) && p('hasViewPriv') && e('1'); // 步骤2:测试返回对象包含权限验证信息
-r($blockTest->printAssignToMeBlockTest($block1)) && p('hasData') && e('1'); // 步骤3:测试返回对象包含数据信息
-r($blockTest->printAssignToMeBlockTest($block1)) && p('totalCount') && e('14'); // 步骤4:测试总数量统计正确
-r($blockTest->printAssignToMeBlockTest()) && p('success') && e('1'); // 步骤5:测试不传入block参数时使用默认参数
\ 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 3c05855f95..0000000000
--- a/module/block/test/zen/printbugblock.php
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env php
-params = new stdclass();
-$block1->params->type = 'assignedTo';
-$block1->params->count = 10;
-$block1->params->orderBy = 'id_desc';
-$block1->dashboard = 'my';
-
-$block2 = new stdclass();
-$block2->params = new stdclass();
-$block2->params->type = 'invalid-type';
-$block2->params->count = 10;
-$block2->dashboard = 'my';
-
-$block3 = new stdclass();
-$block3->params = new stdclass();
-$block3->params->type = 'assignedTo';
-$block3->params->count = 0;
-$block3->dashboard = 'my';
-
-$block4 = new stdclass();
-$block4->params = new stdclass();
-$block4->params->type = 'assignedTo';
-$block4->params->count = 5;
-$block4->dashboard = 'my';
-
-$block5 = new stdclass();
-$block5->params = new stdclass();
-$block5->params->type = 'assignedTo';
-$block5->params->count = 5;
-$block5->dashboard = 'project';
-
-$block6 = new stdclass();
-$block6->params = new stdclass();
-$block6->params->type = 'openedBy';
-$block6->params->count = 8;
-$block6->dashboard = 'my';
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printBugBlockTest($block1)) && p('type,count') && e('assignedTo,10'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printBugBlockTest($block2)) && p('type') && e('invalid-type'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printBugBlockTest($block3)) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printBugBlockTest($block4)) && p('projectID,dashboard') && e('0,my'); // 步骤4:测试dashboard为my时projectID为0
-r($blockTest->printBugBlockTest($block5)) && p('dashboard') && e('project'); // 步骤5:测试dashboard不为my时使用session中的projectID
-r($blockTest->printBugBlockTest($block6)) && p('type,count') && e('openedBy,8'); // 步骤6:测试不同的type类型参数
\ No newline at end of file
diff --git a/module/block/test/zen/printbugstatisticblock.php b/module/block/test/zen/printbugstatisticblock.php
deleted file mode 100755
index dd465b61ff..0000000000
--- a/module/block/test/zen/printbugstatisticblock.php
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env php
-id->range('1-8');
-$table->name->range('正常产品1,正常产品2,正常产品3,正常产品4,正常产品5,影子产品1,影子产品2,已关闭产品1');
-$table->code->range('product1,product2,product3,product4,product5,shadow1,shadow2,closed1');
-$table->status->range('normal{7},closed{1}');
-$table->shadow->range('0{5},1{2},0{1}');
-$table->deleted->range('0{8}');
-$table->gen(8);
-
-su('admin');
-
-$blockTest = new blockTest();
-
-// 测试场景1:正常block对象,传入普通产品ID
-$normalBlock = new stdclass();
-$normalBlock->params = new stdclass();
-$normalBlock->params->type = '';
-$normalBlock->params->count = 10;
-
-// 测试场景2:影子产品测试
-$shadowBlock = new stdclass();
-$shadowBlock->params = new stdclass();
-$shadowBlock->params->type = '';
-$shadowBlock->params->count = 10;
-$shadowParams = array('active' => 6);
-
-// 测试场景3:空block对象
-$emptyBlock = new stdclass();
-
-// 测试场景4:count为字符串'0'的block对象
-$stringZeroCountBlock = new stdclass();
-$stringZeroCountBlock->params = new stdclass();
-$stringZeroCountBlock->params->type = '';
-$stringZeroCountBlock->params->count = '0';
-
-// 测试场景5:按状态过滤的block对象
-$statusBlock = new stdclass();
-$statusBlock->params = new stdclass();
-$statusBlock->params->type = 'normal';
-$statusBlock->params->count = 10;
-
-// 步骤1:正常情况测试 - 验证普通产品的Bug总数
-r($blockTest->printBugStatisticBlockTest($normalBlock)) && p('totalBugs') && e('10');
-// 步骤2:影子产品测试 - 验证影子产品的Bug总数
-r($blockTest->printBugStatisticBlockTest($shadowBlock, $shadowParams)) && p('totalBugs') && e('15');
-// 步骤3:空对象测试 - 验证默认选择第一个产品
-r($blockTest->printBugStatisticBlockTest($emptyBlock)) && p('totalBugs') && e('10');
-// 步骤4:count为字符串'0'测试 - 验证count为'0'时Bug总数为0
-r($blockTest->printBugStatisticBlockTest($stringZeroCountBlock)) && p('totalBugs') && e('0');
-// 步骤5:按状态过滤测试 - 验证按normal状态过滤后的Bug总数
-r($blockTest->printBugStatisticBlockTest($statusBlock)) && p('totalBugs') && e('10');
\ No newline at end of file
diff --git a/module/block/test/zen/printbuildblock.php b/module/block/test/zen/printbuildblock.php
deleted file mode 100755
index 3f5fa97e96..0000000000
--- a/module/block/test/zen/printbuildblock.php
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env php
-id->range('1-20');
-$build->project->range('1-10');
-$build->product->range('1-10');
-$build->execution->range('1-20');
-$build->name->range('Build `1-20`');
-$build->deleted->range('0');
-$build->gen(20);
-
-zenData('product')->loadYaml('product')->gen(10);
-zenData('project')->loadYaml('project')->gen(10);
-zenData('user')->loadYaml('user')->gen(5);
-
-su('admin');
-
-$blockTest = new blockZenTest();
-
-$block1 = new stdClass();
-$block1->dashboard = 'my';
-$block1->params = new stdClass();
-$block1->params->count = 15;
-
-$block2 = new stdClass();
-$block2->dashboard = 'my';
-$block2->params = new stdClass();
-$block2->params->count = 10;
-
-$block3 = new stdClass();
-$block3->dashboard = 'my';
-$block3->params = new stdClass();
-$block3->params->count = 15;
-
-$block4 = new stdClass();
-$block4->dashboard = 'my';
-$block4->params = new stdClass();
-$block4->params->count = 15;
-
-$block5 = new stdClass();
-$block5->dashboard = 'project';
-$block5->params = new stdClass();
-$block5->params->count = 15;
-
-r($blockTest->printBuildBlockTest($block1)) && p('count') && e('0');
-r($blockTest->printBuildBlockTest($block2)) && p('count') && e('0');
-su('user1');
-r($blockTest->printBuildBlockTest($block3)) && p('count') && e('0');
-su('admin');
-r($blockTest->printBuildBlockTest($block4)) && p('count') && e('0');
-global $tester;
-$tester->session->set('project', 1);
-r($blockTest->printBuildBlockTest($block5)) && p('count') && e('0');
\ No newline at end of file
diff --git a/module/block/test/zen/printexecutionlistblock.php b/module/block/test/zen/printexecutionlistblock.php
deleted file mode 100755
index 87367decb9..0000000000
--- a/module/block/test/zen/printexecutionlistblock.php
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env php
-gen(5);
-
-su('admin');
-
-$blockTest = new blockTest();
-
-$block1 = new stdClass();
-$block1->params = new stdClass();
-$block1->params->count = 5;
-$block1->params->type = 'all';
-
-$block2 = new stdClass();
-$block2->params = new stdClass();
-$block2->params->count = 3;
-$block2->params->type = 'all';
-
-$block3 = new stdClass();
-$block3->params = new stdClass();
-$block3->params->count = 4;
-$block3->params->type = 'all';
-
-$block4 = new stdClass();
-$block4->params = new stdClass();
-$block4->params->count = 4;
-$block4->params->type = 'wait';
-
-$block5 = new stdClass();
-$block5->params = new stdClass();
-$block5->params->count = 4;
-$block5->params->type = 'doing';
-
-$block6 = new stdClass();
-$block6->params = new stdClass();
-$block6->params->count = 10;
-$block6->params->type = 'all; DROP TABLE';
-
-$block7 = new stdClass();
-$block7->params = new stdClass();
-$block7->params->count = 0;
-$block7->params->type = 'all';
-
-r($blockTest->printExecutionListBlockTest($block1)) && p('hasExecutions') && e('true'); // 测试count为5时返回5条执行记录
-r($blockTest->printExecutionListBlockTest($block2)) && p('success') && e('1'); // 测试count为3时返回成功
-r($blockTest->printExecutionListBlockTest($block3)) && p('success') && e('1'); // 测试type为all时正常返回执行记录
-r($blockTest->printExecutionListBlockTest($block4)) && p('success') && e('1'); // 测试type为wait时返回成功
-r($blockTest->printExecutionListBlockTest($block5)) && p('success') && e('1'); // 测试type为doing时返回成功
-r($blockTest->printExecutionListBlockTest($block6)) && p('hasExecutions') && e('false'); // 测试type包含非法字符时返回空结果
-r($blockTest->printExecutionListBlockTest($block7)) && p('hasExecutions') && e('true'); // 测试count为0时使用默认值返回执行记录
\ No newline at end of file
diff --git a/module/block/test/zen/printexecutionstatisticblock.php b/module/block/test/zen/printexecutionstatisticblock.php
deleted file mode 100755
index e5e43491f2..0000000000
--- a/module/block/test/zen/printexecutionstatisticblock.php
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env php
-loadYaml('project', false, 2)->gen(20);
-zendata('product')->loadYaml('product', false, 2)->gen(10);
-zendata('projectproduct')->loadYaml('projectproduct', false, 2)->gen(10);
-
-su('admin');
-
-$blockTest = new blockZenTest();
-
-$block1 = new stdClass();
-$block1->id = 1;
-$block1->dashboard = 'my';
-$block1->params = new stdClass();
-$block1->params->type = 'undone';
-$block1->params->count = 5;
-
-$block2 = new stdClass();
-$block2->id = 2;
-$block2->dashboard = 'my';
-$block2->params = new stdClass();
-$block2->params->type = 'done';
-$block2->params->count = 5;
-
-$block3 = new stdClass();
-$block3->id = 3;
-$block3->dashboard = 'my';
-$block3->params = new stdClass();
-$block3->params->type = 'all';
-$block3->params->count = 10;
-
-$block4 = new stdClass();
-$block4->id = 4;
-$block4->dashboard = 'project';
-$block4->params = new stdClass();
-$block4->params->type = 'undone';
-$block4->params->count = 5;
-
-$block5 = new stdClass();
-$block5->id = 5;
-$block5->dashboard = 'my';
-$block5->params = new stdClass();
-$block5->params->type = 'undone';
-$block5->params->count = 0;
-
-r($blockTest->printExecutionStatisticBlockTest($block1)) && p('executionsCount,projectsCount,hasChartData') && e('0,3,1');
-r($blockTest->printExecutionStatisticBlockTest($block2)) && p('executionsCount,projectsCount,hasChartData') && e('0,3,1');
-r($blockTest->printExecutionStatisticBlockTest($block3)) && p('executionsCount,projectsCount,hasChartData') && e('0,3,1');
-r($blockTest->printExecutionStatisticBlockTest($block4)) && p('executionsCount,projectsCount,hasChartData,currentProjectID') && e('0,3,1,0');
-r($blockTest->printExecutionStatisticBlockTest($block5)) && p('executionsCount,projectsCount,hasChartData') && e('0,3,1');
\ No newline at end of file
diff --git a/module/block/test/zen/printissueblock.php b/module/block/test/zen/printissueblock.php
deleted file mode 100755
index 40c9d5a852..0000000000
--- a/module/block/test/zen/printissueblock.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-printIssueBlockTest('active', 1, 5, 'id_desc', 'html')) && p('type,count') && e('active,5'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printIssueBlockTest('invalid-type', 1, 5, 'id_desc', 'html')) && p('hasValidation') && e('0'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printIssueBlockTest('active', 1, 0, 'id_desc', 'html')) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printIssueBlockTest('resolved', 0, 5, 'id_desc', 'html')) && p('type,projectID') && e('resolved,0'); // 步骤4:测试projectID为0时的处理
-r($blockTest->printIssueBlockTest('active', 2, 8, 'id_desc', 'html')) && p('type,count') && e('active,8'); // 步骤5:测试不同projectID和count参数
-r($blockTest->printIssueBlockTest('closed', 1, 10, 'id_desc', 'html')) && p('type,count') && e('closed,10'); // 步骤6:测试不同的type类型参数
\ No newline at end of file
diff --git a/module/block/test/zen/printplanblock.php b/module/block/test/zen/printplanblock.php
deleted file mode 100755
index 7d3480c8fc..0000000000
--- a/module/block/test/zen/printplanblock.php
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env php
-dashboard = 'my';
-$defaultBlock->params = new stdclass();
-$defaultBlock->params->type = '';
-$defaultBlock->params->count = 15;
-
-r($blockTest->printPlanBlockTest($defaultBlock)) && p('plansCount') && e('1'); // 步骤1:默认参数测试
-
-// 测试type为all的情况
-$allBlock = new stdclass();
-$allBlock->dashboard = 'my';
-$allBlock->params = new stdclass();
-$allBlock->params->type = 'all';
-$allBlock->params->count = 15;
-
-r($blockTest->printPlanBlockTest($allBlock)) && p('plansCount') && e('1'); // 步骤2:type为all类型测试
-
-// 测试count限制为5
-$limit5Block = new stdclass();
-$limit5Block->dashboard = 'my';
-$limit5Block->params = new stdclass();
-$limit5Block->params->type = '';
-$limit5Block->params->count = 5;
-
-r($blockTest->printPlanBlockTest($limit5Block)) && p('plansCount') && e('1'); // 步骤3:count限制为5测试
-
-// 测试count限制为10
-$limit10Block = new stdclass();
-$limit10Block->dashboard = 'my';
-$limit10Block->params = new stdclass();
-$limit10Block->params->type = '';
-$limit10Block->params->count = 10;
-
-r($blockTest->printPlanBlockTest($limit10Block)) && p('plansCount') && e('1'); // 步骤4:count限制为10测试
-
-// 测试type为noproduct的情况
-$noproductBlock = new stdclass();
-$noproductBlock->dashboard = 'my';
-$noproductBlock->params = new stdclass();
-$noproductBlock->params->type = 'noproduct';
-$noproductBlock->params->count = 15;
-
-r($blockTest->printPlanBlockTest($noproductBlock)) && p('plansCount') && e('1'); // 步骤5:type为noproduct测试
\ No newline at end of file
diff --git a/module/block/test/zen/printprojectstatisticblock.php b/module/block/test/zen/printprojectstatisticblock.php
deleted file mode 100755
index c2303eb86f..0000000000
--- a/module/block/test/zen/printprojectstatisticblock.php
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env php
-id->range('1-20');
-$project->name->range('项目{1-20}');
-$project->status->range('wait{5},doing{5},suspended{5},closed{5}');
-$project->type->range('project');
-$project->model->range('scrum');
-$project->PM->range('admin,user1,user2,user3,user4');
-$project->deleted->range('0');
-$project->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->deleted->range('0');
-$user->gen(10);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$blockTest = new blockZenTest();
-
-// 5. 创建测试数据对象
-$block1 = new stdclass();
-$block1->params = new stdclass();
-$block1->params->type = 'all';
-$block1->params->count = 15;
-
-$block2 = new stdclass();
-$block2->params = new stdclass();
-$block2->params->type = 'all';
-$block2->params->count = 15;
-
-$block3 = new stdclass();
-$block3->params = new stdclass();
-$block3->params->type = 'wait';
-$block3->params->count = 15;
-
-$block4 = new stdclass();
-$block4->params = new stdclass();
-$block4->params->type = 'all';
-$block4->params->count = 5;
-
-$block5 = new stdclass();
-$block5->params = new stdclass();
-$block5->params->type = 'doing';
-$block5->params->count = 15;
-
-// 6. 必须包含至少5个测试步骤
-r($blockTest->printProjectStatisticBlockTest($block1)) && p('projectCount') && e('10'); // 步骤1:标准区块对象正常获取项目统计数据
-r($blockTest->printProjectStatisticBlockTest($block2)) && p('userCount') && e('11'); // 步骤2:验证用户数量正确加载
-r($blockTest->printProjectStatisticBlockTest($block3)) && p('projectCount') && e('3'); // 步骤3:使用type为wait过滤项目状态
-r($blockTest->printProjectStatisticBlockTest($block4)) && p('projectCount') && e('5'); // 步骤4:设置count为5限制项目数量
-r($blockTest->printProjectStatisticBlockTest($block5)) && p('projectCount') && e('3'); // 步骤5:使用type为doing过滤项目状态
\ No newline at end of file
diff --git a/module/block/test/zen/printriskblock.php b/module/block/test/zen/printriskblock.php
deleted file mode 100755
index b36f14a8ad..0000000000
--- a/module/block/test/zen/printriskblock.php
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env php
-params = new stdClass();
-$block1->params->type = 'all';
-$block1->params->count = 15;
-$block1->params->orderBy = 'id_desc';
-
-$block2 = new stdClass();
-$block2->params = new stdClass();
-$block2->params->type = 'active';
-$block2->params->count = 5;
-$block2->params->orderBy = 'id_desc';
-
-$block3 = new stdClass();
-$block3->params = new stdClass();
-$block3->params->type = 'closed';
-$block3->params->count = 10;
-$block3->params->orderBy = 'id_asc';
-
-$block4 = new stdClass();
-$block4->params = new stdClass();
-$block4->params->type = 'resolved';
-$block4->params->count = 20;
-$block4->params->orderBy = 'name_desc';
-
-$block5 = new stdClass();
-// 故意不设置params,测试参数不正确的情况
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printRiskBlockTest(null)) && p() && e('1'); // 步骤1:测试默认参数情况
-r($blockTest->printRiskBlockTest($block1)) && p() && e('1'); // 步骤2:测试type为all,count为15
-r($blockTest->printRiskBlockTest($block2)) && p() && e('1'); // 步骤3:测试type为active,count为5
-r($blockTest->printRiskBlockTest($block3)) && p() && e('1'); // 步骤4:测试type为closed,count为10
-r($blockTest->printRiskBlockTest($block4)) && p() && e('1'); // 步骤5:测试type为resolved,count为20
-r($blockTest->printRiskBlockTest($block5)) && p() && e('0'); // 步骤6:测试参数结构不正确
\ No newline at end of file
diff --git a/module/block/test/zen/printscrumiessueblock.php b/module/block/test/zen/printscrumiessueblock.php
deleted file mode 100755
index d945df2d89..0000000000
--- a/module/block/test/zen/printscrumiessueblock.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-printScrumIssueBlockTest('active', 1, 5, 'id_desc', 'html')) && p('type,count') && e('active,5'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printScrumIssueBlockTest('invalid-type', 1, 5, 'id_desc', 'html')) && p('hasValidation') && e('0'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printScrumIssueBlockTest('active', 1, 0, 'id_desc', 'html')) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printScrumIssueBlockTest('resolved', 0, 5, 'id_desc', 'html')) && p('type,projectID') && e('resolved,0'); // 步骤4:测试projectID为0时的处理
-r($blockTest->printScrumIssueBlockTest('active', 2, 8, 'id_desc', 'html')) && p('type,count') && e('active,8'); // 步骤5:测试不同projectID和count参数
-r($blockTest->printScrumIssueBlockTest('closed', 1, 10, 'id_desc', 'html')) && p('type,count') && e('closed,10'); // 步骤6:测试不同的type类型参数
\ No newline at end of file
diff --git a/module/block/test/zen/printscrumissueblock.php b/module/block/test/zen/printscrumissueblock.php
deleted file mode 100755
index 0c94af3bbe..0000000000
--- a/module/block/test/zen/printscrumissueblock.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-printScrumIssueBlockTest('active', 1, 5, 'id_desc', 'html')) && p('type,count') && e('active,5'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printScrumIssueBlockTest('invalid-type', 1, 5, 'id_desc', 'html')) && p('hasValidation') && e('0'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printScrumIssueBlockTest('active', 1, 0, 'id_desc', 'html')) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printScrumIssueBlockTest('resolved', 0, 5, 'id_desc', 'html')) && p('type,projectID') && e('resolved,0'); // 步骤4:测试projectID为0时的处理
-r($blockTest->printScrumIssueBlockTest('active', 2, 8, 'id_desc', 'html')) && p('type,count') && e('active,8'); // 步骤5:测试不同projectID和count参数
-r($blockTest->printScrumIssueBlockTest('closed', 1, 10, 'id_desc', 'html')) && p('type,count') && e('closed,10'); // 步骤6:测试不同的type类型参数
\ No newline at end of file
diff --git a/module/block/test/zen/printscrumlistblock.php b/module/block/test/zen/printscrumlistblock.php
deleted file mode 100755
index 04bcfd6fbc..0000000000
--- a/module/block/test/zen/printscrumlistblock.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-printScrumListBlockTest('undone', 1, 15)) && p('type,count') && e('undone,15'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printScrumListBlockTest('invalid-type', 1, 5)) && p('hasValidation') && e('0'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printScrumListBlockTest('undone', 1, 0)) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printScrumListBlockTest('all', 0, 5)) && p('type,projectID') && e('all,0'); // 步骤4:测试projectID为0时的处理
-r($blockTest->printScrumListBlockTest('doing', 2, 20)) && p('type,count') && e('doing,20'); // 步骤5:测试不同projectID和count参数
-r($blockTest->printScrumListBlockTest('done', 1, 10)) && p('type,count') && e('done,10'); // 步骤6:测试不同的type类型参数
\ No newline at end of file
diff --git a/module/block/test/zen/printscrumriskblock.php b/module/block/test/zen/printscrumriskblock.php
deleted file mode 100755
index 9de4fef308..0000000000
--- a/module/block/test/zen/printscrumriskblock.php
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env php
-params = new stdClass();
-$block1->params->type = 'all';
-$block1->params->count = 15;
-$block1->params->orderBy = 'id_desc';
-
-$block2 = new stdClass();
-$block2->params = new stdClass();
-$block2->params->type = 'active';
-$block2->params->count = 5;
-$block2->params->orderBy = 'id_desc';
-
-$block3 = new stdClass();
-$block3->params = new stdClass();
-$block3->params->type = 'closed';
-$block3->params->count = 10;
-$block3->params->orderBy = 'id_asc';
-
-$block4 = new stdClass();
-$block4->params = new stdClass();
-$block4->params->type = 'resolved';
-$block4->params->count = 20;
-$block4->params->orderBy = 'name_desc';
-
-$block5 = new stdClass();
-// 故意不设置params,测试参数不正确的情况
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printScrumRiskBlockTest(null)) && p() && e('1'); // 步骤1:测试默认参数情况
-r($blockTest->printScrumRiskBlockTest($block1)) && p() && e('1'); // 步骤2:测试type为all,count为15
-r($blockTest->printScrumRiskBlockTest($block2)) && p() && e('1'); // 步骤3:测试type为active,count为5
-r($blockTest->printScrumRiskBlockTest($block3)) && p() && e('1'); // 步骤4:测试type为closed,count为10
-r($blockTest->printScrumRiskBlockTest($block4)) && p() && e('1'); // 步骤5:测试type为resolved,count为20
-r($blockTest->printScrumRiskBlockTest($block5)) && p() && e('0'); // 步骤6:测试参数结构不正确
\ No newline at end of file
diff --git a/module/block/test/zen/printscrumtestblock.php b/module/block/test/zen/printscrumtestblock.php
deleted file mode 100755
index 8e4e3d1dfe..0000000000
--- a/module/block/test/zen/printscrumtestblock.php
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$project->name->range('项目1,项目2,项目3,项目4,项目5');
-$project->type->range('project');
-$project->status->range('doing');
-$project->model->range('scrum');
-$project->deleted->range('0');
-$project->gen(5);
-
-$product = zenData('product');
-$product->id->range('1-10');
-$product->name->range('产品1,产品2,产品3,产品4,产品5');
-$product->type->range('normal');
-$product->status->range('normal');
-$product->deleted->range('0');
-$product->gen(5);
-
-$build = zenData('build');
-$build->id->range('1-20');
-$build->name->range('版本1,版本2,版本3,版本4,版本5');
-$build->product->range('1-5');
-$build->execution->range('1-5');
-$build->deleted->range('0');
-$build->gen(10);
-
-$projectProduct = zenData('projectproduct');
-$projectProduct->project->range('1{5},2{5},3{5},4{5},5{5}');
-$projectProduct->product->range('1,2,3,4,5');
-$projectProduct->gen(25);
-
-$testtask = zenData('testtask');
-$testtask->id->range('1-50');
-$testtask->project->range('1');
-$testtask->product->range('1,2,3,4,5');
-$testtask->execution->range('1-5');
-$testtask->name->range('测试单1,测试单2,测试单3,测试单4,测试单5');
-$testtask->build->range('1-10');
-$testtask->status->range('wait{10},doing{10},done{10},blocked{10}');
-$testtask->auto->range('no');
-$testtask->deleted->range('0');
-$testtask->gen(40);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$blockTest = new blockZenTest();
-
-// 设置session.project
-global $tester;
-$tester->session->set('project', 1);
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-$block1 = new stdClass();
-$block1->params = new stdClass();
-$block1->params->type = 'all';
-$block1->params->count = 5;
-r($blockTest->printScrumTestBlockTest($block1)) && p('type,projectID') && e('all,1'); // 步骤1:测试正常情况下传入type=all和count=5的参数
-
-$block2 = new stdClass();
-$block2->params = new stdClass();
-$block2->params->type = 'wait';
-$block2->params->count = 10;
-r($blockTest->printScrumTestBlockTest($block2)) && p('type,projectID') && e('wait,1'); // 步骤2:测试type=wait时获取wait状态的测试单
-
-$block3 = new stdClass();
-$block3->params = new stdClass();
-$block3->params->type = 'doing';
-$block3->params->count = 10;
-r($blockTest->printScrumTestBlockTest($block3)) && p('type,projectID') && e('doing,1'); // 步骤3:测试type=doing时获取doing状态的测试单
-
-$block4 = new stdClass();
-$block4->params = new stdClass();
-$block4->params->type = 'done';
-$block4->params->count = 10;
-r($blockTest->printScrumTestBlockTest($block4)) && p('type,projectID') && e('done,1'); // 步骤4:测试type=done时获取done状态的测试单
-
-$block5 = new stdClass();
-$block5->params = new stdClass();
-$block5->params->type = 'blocked';
-$block5->params->count = 10;
-r($blockTest->printScrumTestBlockTest($block5)) && p('type,projectID') && e('blocked,1'); // 步骤5:测试type=blocked时获取blocked状态的测试单
-
-$block6 = new stdClass();
-$block6->params = new stdClass();
-$block6->params->type = 'all';
-$block6->params->count = 10;
-r($blockTest->printScrumTestBlockTest($block6)) && p('type,projectID') && e('all,1'); // 步骤6:测试count=10时限制返回数量
\ No newline at end of file
diff --git a/module/block/test/zen/printsingledynamicblock.php b/module/block/test/zen/printsingledynamicblock.php
deleted file mode 100755
index 58705bb324..0000000000
--- a/module/block/test/zen/printsingledynamicblock.php
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env php
-loadYaml('product', false, 2)->gen(10);
-zenData('user')->gen(10);
-zenData('action')->loadYaml('action', false, 2)->gen(50);
-
-su('admin');
-
-$blockTest = new blockZenTest();
-
-global $app;
-$app->session->set('product', 1);
-r($blockTest->printSingleDynamicBlockTest()) && p('productID') && e('1');
-$app->session->set('product', 999);
-r($blockTest->printSingleDynamicBlockTest()) && p('productID,actionsCount') && e('999,0');
-$app->session->set('product', 0);
-r($blockTest->printSingleDynamicBlockTest()) && p('productID') && e('0');
-$app->session->set('product', 1);
-r($blockTest->printSingleDynamicBlockTest()) && p('usersCount') && e('11');
-$app->session->set('product', 1);
-r($blockTest->printSingleDynamicBlockTest()) && p('productID') && e('1');
\ No newline at end of file
diff --git a/module/block/test/zen/printsprintblock.php b/module/block/test/zen/printsprintblock.php
deleted file mode 100755
index a2e57c3d64..0000000000
--- a/module/block/test/zen/printsprintblock.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-id->range('1-20');
-$metriclib->metricCode->range('count_of_execution,count_of_annual_finished_execution,count_wait_execution,count_of_doing_execution,count_of_suspended_execution');
-$metriclib->value->range('10-50');
-$metriclib->date->range('2024-01-01:2024-12-31');
-$metriclib->year->range('2024');
-$metriclib->month->range('01-12');
-$metriclib->gen(20);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$blockTest = new blockTest();
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r(count($blockTest->printSprintBlockTest()->groups)) && p() && e('2'); // 步骤1:测试默认block对象生成groups数据
-r($blockTest->printSprintBlockTest()->groups[0]) && p('type') && e('cards'); // 步骤2:测试返回结果包含cards组
-r($blockTest->printSprintBlockTest()->groups[1]) && p('type') && e('barChart'); // 步骤3:测试返回结果包含barChart组
-r(count($blockTest->printSprintBlockTest()->groups[0]->cards)) && p() && e('2'); // 步骤4:测试cards组包含2个卡片
-r(count($blockTest->printSprintBlockTest()->groups[1]->bars)) && p() && e('3'); // 步骤5:测试barChart组包含3个柱状图
\ No newline at end of file
diff --git a/module/block/test/zen/printtaskblock.php b/module/block/test/zen/printtaskblock.php
deleted file mode 100755
index 4cf9764606..0000000000
--- a/module/block/test/zen/printtaskblock.php
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env php
-params = new stdclass();
-$block1->params->type = 'assignedTo';
-$block1->params->count = 10;
-$block1->params->orderBy = 'id_desc';
-$block1->dashboard = 'my';
-
-$block2 = new stdclass();
-$block2->params = new stdclass();
-$block2->params->type = 'invalid-type';
-$block2->params->count = 10;
-$block2->dashboard = 'my';
-
-$block3 = new stdclass();
-$block3->params = new stdclass();
-$block3->params->type = 'assignedTo';
-$block3->params->count = 0;
-$block3->params->orderBy = 'id_desc';
-$block3->dashboard = 'my';
-
-$block4 = new stdclass();
-$block4->params = new stdclass();
-$block4->params->type = 'finishedBy';
-$block4->params->count = 8;
-$block4->params->orderBy = 'id_desc';
-$block4->dashboard = 'my';
-
-$block5 = new stdclass();
-$block5->params = new stdclass();
-$block5->params->type = 'assignedTo';
-$block5->params->count = 5;
-$block5->params->orderBy = 'id_asc';
-$block5->dashboard = 'my';
-
-$block6 = new stdclass();
-$block6->params = new stdclass();
-$block6->params->type = 'assignedTo';
-$block6->params->count = 100;
-$block6->params->orderBy = 'id_desc';
-$block6->dashboard = 'my';
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printTaskBlockTest($block1)) && p('type,count') && e('assignedTo,10'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printTaskBlockTest($block2)) && p('type') && e('invalid-type'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printTaskBlockTest($block3)) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printTaskBlockTest($block4)) && p('type,count') && e('finishedBy,8'); // 步骤4:测试不同的type类型参数finishedBy
-r($blockTest->printTaskBlockTest($block5)) && p('orderBy,type') && e('id_asc,assignedTo'); // 步骤5:测试orderBy参数的传递
-r(count($blockTest->printTaskBlockTest($block6)->tasks)) && p() && e('5'); // 步骤6:测试较大的count值
\ No newline at end of file
diff --git a/module/block/test/zen/printtesttaskblock.php b/module/block/test/zen/printtesttaskblock.php
deleted file mode 100755
index 112628cd00..0000000000
--- a/module/block/test/zen/printtesttaskblock.php
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env php
-params = new stdclass();
-$block1->params->type = 'wait';
-$block1->params->count = 10;
-
-$block2 = new stdclass();
-$block2->params = new stdclass();
-$block2->params->type = 'invalid-type';
-$block2->params->count = 10;
-
-$block3 = new stdclass();
-$block3->params = new stdclass();
-$block3->params->type = 'all';
-$block3->params->count = 10;
-
-$block4 = new stdclass();
-$block4->params = new stdclass();
-$block4->params->type = 'doing';
-$block4->params->count = 5;
-
-$block5 = new stdclass();
-$block5->params = new stdclass();
-$block5->params->type = 'done';
-$block5->params->count = 10;
-
-$block6 = new stdclass();
-$block6->params = new stdclass();
-$block6->params->type = 'wait';
-$block6->params->count = 0;
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($blockTest->printTesttaskBlockTest($block1)) && p('type,count') && e('wait,10'); // 步骤1:测试正常情况下传入type参数为wait和count参数为10
-r($blockTest->printTesttaskBlockTest($block2)) && p('type') && e('invalid-type'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printTesttaskBlockTest($block3)) && p('type') && e('all'); // 步骤3:测试type参数为all时查询所有测试单
-r($blockTest->printTesttaskBlockTest($block4)) && p('type,count') && e('doing,5'); // 步骤4:测试type参数为doing时查询进行中的测试单
-r($blockTest->printTesttaskBlockTest($block5)) && p('type') && e('done'); // 步骤5:测试type参数为done时查询已完成的测试单
-r($blockTest->printTesttaskBlockTest($block6)) && p('count') && e('0'); // 步骤6:测试count为0时的处理
\ No newline at end of file
diff --git a/module/block/test/zen/printwaterfallissueblock.php b/module/block/test/zen/printwaterfallissueblock.php
deleted file mode 100755
index 6f5b560506..0000000000
--- a/module/block/test/zen/printwaterfallissueblock.php
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env php
-printWaterfallIssueBlockTest('active', 1, 5, 'id_desc', 'html')) && p('type,count') && e('active,5'); // 步骤1:测试正常情况下传入合法type参数和count参数
-r($blockTest->printWaterfallIssueBlockTest('invalid-type', 1, 5, 'id_desc', 'html')) && p('hasValidation') && e('0'); // 步骤2:测试type参数包含特殊字符时验证失败
-r($blockTest->printWaterfallIssueBlockTest('active', 1, 0, 'id_desc', 'html')) && p('count') && e('0'); // 步骤3:测试count为0时的处理
-r($blockTest->printWaterfallIssueBlockTest('resolved', 0, 5, 'id_desc', 'html')) && p('type,projectID') && e('resolved,0'); // 步骤4:测试projectID为0时的处理
-r($blockTest->printWaterfallIssueBlockTest('active', 2, 8, 'id_desc', 'html')) && p('type,count') && e('active,8'); // 步骤5:测试不同projectID和count参数
-r($blockTest->printWaterfallIssueBlockTest('closed', 1, 10, 'id_desc', 'html')) && p('type,count') && e('closed,10'); // 步骤6:测试不同的type类型参数
\ No newline at end of file
diff --git a/module/block/test/zen/printwaterfallriskblock.php b/module/block/test/zen/printwaterfallriskblock.php
deleted file mode 100755
index fae6079f07..0000000000
--- a/module/block/test/zen/printwaterfallriskblock.php
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$project->name->range('Project1,Project2,Project3,Project4,Project5,Project6,Project7,Project8,Project9,Project10');
-$project->type->range('project');
-$project->model->range('waterfall');
-$project->status->range('doing');
-$project->gen(10);
-
-$risk = zenData('risk');
-$risk->project->range('1{5},2{3},3{2}');
-$risk->status->range('active{7},closed{3}');
-$risk->pri->range('1-4');
-$risk->gen(10);
-
-zenData('user')->gen(10);
-
-su('admin');
-
-$blockTest = new blockZenTest();
-
-$block1 = new stdClass();
-$block1->params = new stdClass();
-$block1->params->projectID = 1;
-$block1->params->type = 'active';
-$block1->params->count = 20;
-$block1->params->orderBy = 'id_desc';
-
-$block2 = new stdClass();
-$block2->params = new stdClass();
-$block2->params->projectID = 2;
-$block2->params->type = 'active';
-$block2->params->count = 20;
-$block2->params->orderBy = 'id_desc';
-
-$block3 = new stdClass();
-$block3->params = new stdClass();
-$block3->params->projectID = 3;
-$block3->params->type = 'active';
-$block3->params->count = 20;
-$block3->params->orderBy = 'id_desc';
-
-$block4 = new stdClass();
-$block4->params = new stdClass();
-$block4->params->projectID = 1;
-$block4->params->type = 'all';
-$block4->params->count = 20;
-$block4->params->orderBy = 'id_desc';
-
-$block5 = new stdClass();
-$block5->params = new stdClass();
-$block5->params->projectID = 999;
-$block5->params->type = 'active';
-$block5->params->count = 20;
-$block5->params->orderBy = 'id_desc';
-
-r($blockTest->printWaterfallRiskBlockTest($block1)) && p('count,hasUsers,1:status,1:project') && e('5,1,active,1');
-r($blockTest->printWaterfallRiskBlockTest($block2)) && p('count,hasUsers,1:status,1:project') && e('3,1,active,2');
-r($blockTest->printWaterfallRiskBlockTest($block3)) && p('count,hasUsers,1:status,1:project') && e('2,1,active,3');
-r($blockTest->printWaterfallRiskBlockTest($block4)) && p('count,hasUsers') && e('5,1');
-r($blockTest->printWaterfallRiskBlockTest($block5)) && p('count,hasUsers') && e('0,1');
\ No newline at end of file
diff --git a/module/branch/test/model/manage.php b/module/branch/test/model/manage.php
deleted file mode 100755
index 23562d2002..0000000000
--- a/module/branch/test/model/manage.php
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env php
-gen(10);
-zenData('branch')->gen(20);
-
-su('admin');
-
-/**
-
-title=测试 branchModel::manage();
-timeout=0
-cid=15334
-
-- 执行branchTest模块的manageTest方法,参数是4, array @2
-- 执行branchTest模块的manageTest方法,参数是1, array @0
-- 执行branchTest模块的manageTest方法,参数是2, array @1
-- 执行branchTest模块的manageTest方法,参数是3, array @0
-- 执行branchTest模块的manageTest方法,参数是5, array @1
-- 执行branchTest模块的manageTest方法,参数是6, array @error
-
-*/
-
-$branchTest = new branchTest();
-
-r($branchTest->manageTest(4, array(), array('新分支1', '新分支2'))) && p() && e('2');
-r($branchTest->manageTest(1, array(1 => '更新的分支名'), array())) && p() && e('0');
-r($branchTest->manageTest(2, array(3 => '分支3更新'), array('混合新分支1'))) && p() && e('1');
-r($branchTest->manageTest(3, array(5 => '分支5更新'), array())) && p() && e('0');
-r($branchTest->manageTest(5, array(), array('', '有效新分支'))) && p() && e('1');
-r($branchTest->manageTest(6, array(11 => ''), array())) && p() && e('error');
\ No newline at end of file
diff --git a/module/bug/test/zen/assignprojectrelatedvars.php b/module/bug/test/zen/assignprojectrelatedvars.php
deleted file mode 100755
index c2c29b88b3..0000000000
--- a/module/bug/test/zen/assignprojectrelatedvars.php
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env php
-loadYaml('product', false, 2)->gen(10);
-zenData('project')->gen(20);
-zenData('build')->gen(20);
-zenData('projectproduct')->gen(30);
-zenData('bug')->gen(20);
-
-su('admin');
-
-$bugTest = new bugZenTest();
-
-$emptyBugs = array();
-$emptyProducts = array();
-
-$product1 = (object)array('id' => 1, 'name' => '产品1', 'type' => 'normal', 'shadow' => 0);
-$product2 = (object)array('id' => 2, 'name' => '产品2', 'type' => 'normal', 'shadow' => 0);
-$product3 = (object)array('id' => 3, 'name' => '产品3', 'type' => 'normal', 'shadow' => 1);
-
-$bug1 = (object)array('id' => 1, 'product' => 1, 'branch' => 0, 'project' => 0, 'execution' => 0);
-$bug2 = (object)array('id' => 2, 'product' => 1, 'branch' => 0, 'project' => 1, 'execution' => 0);
-$bug3 = (object)array('id' => 3, 'product' => 1, 'branch' => 0, 'project' => 1, 'execution' => 1);
-$bug4 = (object)array('id' => 4, 'product' => 2, 'branch' => 0, 'project' => 0, 'execution' => 0);
-$bug5 = (object)array('id' => 5, 'product' => 3, 'branch' => 0, 'project' => 0, 'execution' => 0);
-
-r($bugTest->assignProjectRelatedVarsTest($emptyBugs, $emptyProducts)) && p('noProductProjects,productProjects,productExecutions') && e('0,0,0'); // 步骤1:空输入
-r($bugTest->assignProjectRelatedVarsTest(array($bug1), array(1 => $product1))) && p('noProductProjects,noSprintProjects') && e('0,0'); // 步骤2:无项目执行的bug
-r($bugTest->assignProjectRelatedVarsTest(array($bug2), array(1 => $product1))) && p('noProductProjects,noSprintProjects') && e('0,0'); // 步骤3:有项目的bug
-r($bugTest->assignProjectRelatedVarsTest(array($bug3), array(1 => $product1))) && p('noProductProjects,noSprintProjects') && e('0,0'); // 步骤4:有项目和执行的bug
-r($bugTest->assignProjectRelatedVarsTest(array($bug1, $bug4), array(1 => $product1, 2 => $product2))) && p('noProductProjects,noSprintProjects') && e('0,0'); // 步骤5:多产品bugs
-r($bugTest->assignProjectRelatedVarsTest(array($bug5), array(3 => $product3))) && p('noProductProjects,noSprintProjects') && e('0,0'); // 步骤6:影子产品
-r($bugTest->assignProjectRelatedVarsTest(array($bug1, $bug5), array(1 => $product1, 3 => $product3))) && p('noProductProjects,noSprintProjects') && e('0,0'); // 步骤7:混合产品
-r($bugTest->assignProjectRelatedVarsTest(array($bug1, $bug2), array(1 => $product1))) && p('productProjects') && e('1'); // 步骤8:同产品多bugs
-r($bugTest->assignProjectRelatedVarsTest(array($bug3), array(1 => $product1))) && p('projectExecutions') && e('0'); // 步骤9:验证projectExecutions
\ No newline at end of file
diff --git a/module/bug/test/zen/assignvarsforedit.php b/module/bug/test/zen/assignvarsforedit.php
deleted file mode 100755
index 5e0aec3e61..0000000000
--- a/module/bug/test/zen/assignvarsforedit.php
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env php
-gen(5);
-zenData('project')->gen(5);
-zenData('bug')->gen(10);
-zenData('build')->gen(5);
-zenData('story')->gen(5);
-zenData('task')->gen(5);
-zenData('case')->gen(5);
-zenData('user')->gen(10);
-zenData('action')->gen(5);
-
-su('admin');
-
-$bugTest = new bugZenTest();
-
-$product1 = (object)array('id' => 1, 'name' => '产品1', 'type' => 'normal', 'shadow' => 0, 'status' => 'normal');
-$product2 = (object)array('id' => 2, 'name' => '产品2', 'type' => 'normal', 'shadow' => 0, 'status' => 'normal');
-$product3 = (object)array('id' => 3, 'name' => '产品3', 'type' => 'normal', 'shadow' => 1, 'status' => 'normal');
-
-$bug1 = (object)array('id' => 1, 'product' => 1, 'branch' => 0, 'project' => 1, 'execution' => 1, 'module' => 0, 'story' => 1, 'storyTitle' => '需求1', 'assignedTo' => 'admin', 'resolvedBy' => '', 'closedBy' => '', 'openedBy' => 'admin', 'status' => 'active', 'openedBuild' => '1', 'testtask' => 1);
-$bug2 = (object)array('id' => 2, 'product' => 1, 'branch' => 0, 'project' => 1, 'execution' => 0, 'module' => 0, 'story' => 0, 'storyTitle' => '', 'assignedTo' => 'user1', 'resolvedBy' => '', 'closedBy' => '', 'openedBy' => 'admin', 'status' => 'active', 'openedBuild' => '', 'testtask' => 0);
-$bug3 = (object)array('id' => 3, 'product' => 1, 'branch' => 0, 'project' => 0, 'execution' => 0, 'module' => 0, 'story' => 0, 'storyTitle' => '', 'assignedTo' => '', 'resolvedBy' => '', 'closedBy' => '', 'openedBy' => 'admin', 'status' => 'active', 'openedBuild' => '', 'testtask' => 0);
-$bug4 = (object)array('id' => 4, 'product' => 2, 'branch' => 0, 'project' => 0, 'execution' => 0, 'module' => 0, 'story' => 0, 'storyTitle' => '', 'assignedTo' => '', 'resolvedBy' => '', 'closedBy' => '', 'openedBy' => 'admin', 'status' => 'active', 'openedBuild' => '', 'testtask' => 0);
-$bug5 = (object)array('id' => 5, 'product' => 1, 'branch' => 0, 'project' => 0, 'execution' => 0, 'module' => 0, 'story' => 0, 'storyTitle' => '', 'assignedTo' => 'testuser', 'resolvedBy' => '', 'closedBy' => '', 'openedBy' => 'admin', 'status' => 'active', 'openedBuild' => '', 'testtask' => 0);
-$bug6 = (object)array('id' => 6, 'product' => 1, 'branch' => 0, 'project' => 0, 'execution' => 0, 'module' => 0, 'story' => 0, 'storyTitle' => '', 'assignedTo' => 'closed', 'resolvedBy' => '', 'closedBy' => 'admin', 'openedBy' => 'admin', 'status' => 'closed', 'openedBuild' => '', 'testtask' => 0);
-
-r($bugTest->assignVarsForEditTest($bug1, $product1)) && p('execution') && e('1'); // 步骤1:bug有execution的情况
-r($bugTest->assignVarsForEditTest($bug2, $product1)) && p('execution') && e('0'); // 步骤2:bug有project但无execution的情况
-r($bugTest->assignVarsForEditTest($bug3, $product1)) && p('execution') && e('0'); // 步骤3:bug无project和execution的情况
-r($bugTest->assignVarsForEditTest($bug4, $product2)) && p('products') && e('5'); // 步骤4:bug产品不在products列表中
-r($bugTest->assignVarsForEditTest($bug5, $product1)) && p('assignedToList') && e('11'); // 步骤5:bug有assignedTo的情况
-r($bugTest->assignVarsForEditTest($bug6, $product1)) && p('assignedToList') && e('11'); // 步骤6:bug状态为closed的情况
-r($bugTest->assignVarsForEditTest($bug1, $product1)) && p('stories') && e('0'); // 步骤7:bug有story关联的情况
-r($bugTest->assignVarsForEditTest($bug1, $product1)) && p('openedBuilds') && e('2'); // 步骤8:验证openedBuilds
-r($bugTest->assignVarsForEditTest($bug1, $product1)) && p('cases') && e('4'); // 步骤9:验证cases数据
\ No newline at end of file
diff --git a/module/bug/test/zen/buildcreateform.php b/module/bug/test/zen/buildcreateform.php
deleted file mode 100755
index 1c66589751..0000000000
--- a/module/bug/test/zen/buildcreateform.php
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env php
-gen(5);
-zenData('project')->gen(5);
-zenData('bug')->gen(10);
-zenData('build')->gen(5);
-zenData('story')->gen(5);
-zenData('task')->gen(5);
-zenData('case')->gen(5);
-zenData('user')->gen(10);
-zenData('module')->gen(5);
-zenData('branch')->gen(3);
-zenData('productplan')->gen(5);
-
-su('admin');
-
-$bugTest = new bugZenTest();
-
-$bug1 = (object)array(
- 'id' => 0,
- 'productID' => 1,
- 'product' => 1,
- 'branch' => '0',
- 'project' => 1,
- 'projectID' => 1,
- 'execution' => 1,
- 'executionID' => 1,
- 'module' => 0,
- 'moduleID' => 0,
- 'assignedTo' => 'admin',
- 'openedBy' => 'admin',
- 'status' => 'active'
-);
-
-$bug2 = (object)array(
- 'id' => 0,
- 'productID' => 2,
- 'product' => 2,
- 'branch' => '0',
- 'project' => 2,
- 'projectID' => 2,
- 'execution' => 2,
- 'executionID' => 2,
- 'module' => 0,
- 'moduleID' => 0,
- 'assignedTo' => 'user1',
- 'openedBy' => 'admin',
- 'status' => 'active'
-);
-
-$bug3 = (object)array(
- 'id' => 0,
- 'productID' => 1,
- 'product' => 1,
- 'branch' => '1',
- 'project' => 1,
- 'projectID' => 1,
- 'execution' => 1,
- 'executionID' => 1,
- 'module' => 1,
- 'moduleID' => 1,
- 'assignedTo' => 'admin',
- 'openedBy' => 'admin',
- 'status' => 'active'
-);
-
-$param1 = array('resultID' => 0, 'stepIdList' => '', 'executionID' => 1, 'bugID' => 0);
-$param2 = array('resultID' => 1, 'stepIdList' => '1_2_3', 'executionID' => 2, 'bugID' => 0);
-$param3 = array('resultID' => 0, 'stepIdList' => '', 'executionID' => 1, 'bugID' => 0);
-
-r($bugTest->buildCreateFormTest($bug1, $param1, '')) && p('productMembers') && e('11'); // 步骤1:正常情况下验证产品成员数量
-r($bugTest->buildCreateFormTest($bug1, $param1, 'global')) && p('gobackLink') && e('buildcreateform.php?m=bug&f=browse&productID=1'); // 步骤2:from='global'的情况
-r($bugTest->buildCreateFormTest($bug2, $param2, '')) && p('resultFilesCount') && e('0'); // 步骤3:有resultID和stepIdList的情况
-r($bugTest->buildCreateFormTest($bug1, $param1, '')) && p('productsCount,projectsCount') && e('5,0'); // 步骤4:验证产品和项目数据
-r($bugTest->buildCreateFormTest($bug1, $param1, '')) && p('executionsCount,buildsCount') && e('0,2'); // 步骤5:验证执行和构建数据
-r($bugTest->buildCreateFormTest($bug3, $param3, '')) && p('moduleOptionMenuCount,branchesCount') && e('4,1'); // 步骤6:验证模块和分支数据
-r($bugTest->buildCreateFormTest($bug1, $param1, '')) && p('plansCount,casesCount') && e('3,4'); // 步骤7:验证计划和用例数据
\ No newline at end of file
diff --git a/module/bug/test/zen/buildeditform.php b/module/bug/test/zen/buildeditform.php
deleted file mode 100755
index 5c81020523..0000000000
--- a/module/bug/test/zen/buildeditform.php
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env php
-gen(5);
-zenData('project')->gen(5);
-zenData('bug')->gen(15);
-zenData('build')->gen(5);
-zenData('story')->gen(5);
-zenData('task')->gen(5);
-zenData('case')->gen(5);
-zenData('user')->gen(10);
-zenData('module')->gen(5);
-zenData('branch')->gen(3);
-zenData('productplan')->gen(5);
-zenData('testtask')->gen(3);
-zenData('action')->gen(10);
-
-su('admin');
-
-$bugTest = new bugZenTest();
-
-$bug1 = (object)array(
- 'id' => 1,
- 'product' => 1,
- 'branch' => 0,
- 'project' => 1,
- 'execution' => 1,
- 'module' => 1,
- 'title' => 'Test Bug 1',
- 'type' => 'codeerror',
- 'story' => 1,
- 'storyTitle' => 'Story 1',
- 'plan' => 1,
- 'openedBuild' => '1,2',
- 'assignedTo' => 'admin',
- 'resolvedBy' => '',
- 'closedBy' => '',
- 'openedBy' => 'admin',
- 'status' => 'active',
- 'testtask' => 1
-);
-
-$bug2 = (object)array(
- 'id' => 2,
- 'product' => 2,
- 'branch' => 0,
- 'project' => 2,
- 'execution' => 2,
- 'module' => 2,
- 'title' => 'Test Bug 2',
- 'type' => 'codeerror',
- 'story' => 2,
- 'storyTitle' => 'Story 2',
- 'plan' => 2,
- 'openedBuild' => '3',
- 'assignedTo' => 'user1',
- 'resolvedBy' => '',
- 'closedBy' => '',
- 'openedBy' => 'admin',
- 'status' => 'active',
- 'testtask' => 2
-);
-
-$bug3 = (object)array(
- 'id' => 3,
- 'product' => 1,
- 'branch' => 1,
- 'project' => 1,
- 'execution' => 1,
- 'module' => 1,
- 'title' => 'Test Bug 3 with Branch',
- 'type' => 'codeerror',
- 'story' => 1,
- 'storyTitle' => 'Story 1',
- 'plan' => 1,
- 'openedBuild' => '1',
- 'assignedTo' => 'admin',
- 'resolvedBy' => '',
- 'closedBy' => '',
- 'openedBy' => 'admin',
- 'status' => 'active',
- 'testtask' => 1
-);
-
-$bug4 = (object)array(
- 'id' => 4,
- 'product' => 1,
- 'branch' => 0,
- 'project' => 0,
- 'execution' => 0,
- 'module' => 1,
- 'title' => 'Test Bug 4 No Project',
- 'type' => 'codeerror',
- 'story' => 1,
- 'storyTitle' => 'Story 1',
- 'plan' => 1,
- 'openedBuild' => '1',
- 'assignedTo' => 'admin',
- 'resolvedBy' => '',
- 'closedBy' => '',
- 'openedBy' => 'admin',
- 'status' => 'active',
- 'testtask' => 1
-);
-
-$bug5 = (object)array(
- 'id' => 5,
- 'product' => 1,
- 'branch' => 0,
- 'project' => 1,
- 'execution' => 0,
- 'module' => 1,
- 'title' => 'Test Bug 5 with Project Only',
- 'type' => 'codeerror',
- 'story' => 1,
- 'storyTitle' => 'Story 1',
- 'plan' => 1,
- 'openedBuild' => '1',
- 'assignedTo' => 'admin',
- 'resolvedBy' => '',
- 'closedBy' => '',
- 'openedBy' => 'admin',
- 'status' => 'active',
- 'testtask' => 1
-);
-
-r($bugTest->buildEditFormTest($bug1)) && p('bug,product,moduleOptionMenu') && e('1,1,5'); // 步骤1:正常情况下编辑bug,验证基本视图属性
-r($bugTest->buildEditFormTest($bug2)) && p('projects,executions') && e('1,1'); // 步骤2:编辑有项目和执行的bug,验证项目和执行数据
-r($bugTest->buildEditFormTest($bug3)) && p('branchTagOption') && e('0'); // 步骤3:编辑有分支的产品bug,验证分支选项
-r($bugTest->buildEditFormTest($bug1)) && p('duplicateBugs') && e('0'); // 步骤4:编辑有重复bug的情况,验证duplicateBugs数量
-r($bugTest->buildEditFormTest($bug1)) && p('projectID') && e('1'); // 步骤5:验证编辑表单的projectID
-r($bugTest->buildEditFormTest($bug4)) && p('projectID,projects') && e('0,0'); // 步骤6:无项目的bug,验证项目数据为空
-r($bugTest->buildEditFormTest($bug5)) && p('projectID,executions') && e('1,0'); // 步骤7:有项目无执行的bug,验证执行数据为空
\ No newline at end of file
diff --git a/module/bug/test/zen/getassignedtopairs.php b/module/bug/test/zen/getassignedtopairs.php
deleted file mode 100755
index c40fc356f9..0000000000
--- a/module/bug/test/zen/getassignedtopairs.php
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$user->account->range('user1,user2,user3,user4,user5,user6,user7,user8,user9,user10');
-$user->realname->range('用户1,用户2,用户3,用户4,用户5,用户6,用户7,用户8,用户9,用户10');
-$user->deleted->range('0');
-$user->gen(10);
-
-// 准备team测试数据
-$team = zendata('team');
-$team->id->range('1-12');
-$team->root->range('1,1,1,2,2,2,1,1,2,2,3,3');
-$team->type->range('execution,execution,execution,execution,execution,execution,project,project,project,project,project,project');
-$team->account->range('user1,user2,user3,user4,user5,user6,user1,user2,user3,user4,user7,user8');
-$team->gen(12);
-
-// 准备bug测试数据
-$bug = zendata('bug');
-$bug->id->range('1-10');
-$bug->product->range('1,1,1,1,2,2,2,3,3,3');
-$bug->project->range('0,1,1,0,0,2,0,0,3,0');
-$bug->execution->range('1,0,2,0,0,0,0,0,0,0');
-$bug->branch->range('0');
-$bug->assignedTo->range('user1,user2,user3,user4,user5,user6,user7,user8,user9,closed');
-$bug->title->range('Bug1,Bug2,Bug3,Bug4,Bug5,Bug6,Bug7,Bug8,Bug9,Bug10');
-$bug->status->range('active,active,active,active,active,active,active,active,active,closed');
-$bug->deleted->range('0');
-$bug->gen(10);
-
-su('admin');
-
-global $tester;
-$bugTest = new bugZenTest();
-
-// 测试1:bug有execution=1时,返回execution的团队成员(user1,user2,user3)
-$bug1 = $tester->dao->select('*')->from(TABLE_BUG)->where('id')->eq(1)->fetch();
-r(count($bugTest->getAssignedToPairsTest($bug1))) && p() && e('3');
-
-// 测试2:bug有project=1(无execution)时,返回project的团队成员(user1,user2)
-$bug2 = $tester->dao->select('*')->from(TABLE_BUG)->where('id')->eq(2)->fetch();
-r(count($bugTest->getAssignedToPairsTest($bug2))) && p() && e('2');
-
-// 测试3:bug有execution=2时,返回execution的团队成员(user4,user5,user6)+assignedTo(user3)=4
-$bug3 = $tester->dao->select('*')->from(TABLE_BUG)->where('id')->eq(3)->fetch();
-r(count($bugTest->getAssignedToPairsTest($bug3))) && p() && e('4');
-
-// 测试4:bug只有product=1(无execution和project)时,返回所有用户
-$bug4 = $tester->dao->select('*')->from(TABLE_BUG)->where('id')->eq(4)->fetch();
-r(count($bugTest->getAssignedToPairsTest($bug4))) && p() && e('10');
-
-// 测试5:bug的assignedTo=closed时,不追加到列表
-$bug10 = $tester->dao->select('*')->from(TABLE_BUG)->where('id')->eq(10)->fetch();
-$users = $bugTest->getAssignedToPairsTest($bug10);
-r(isset($users['closed']) ? 1 : 0) && p() && e('0');
\ No newline at end of file
diff --git a/module/bug/test/zen/getbranchoptions.php b/module/bug/test/zen/getbranchoptions.php
deleted file mode 100755
index 7037b28a5e..0000000000
--- a/module/bug/test/zen/getbranchoptions.php
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env php
-rawModule = 'bug';
-$app->rawMethod = 'browse';
-
-// zendata数据准备
-$table = zenData('branch');
-$table->id->range('1-10');
-$table->product->range('1{5}, 2{3}, 3{2}');
-$table->name->range('master{2}, develop{2}, feature-v1.0{2}, feature-v2.0{2}, hotfix-bug{2}');
-$table->status->range('active{8}, closed{2}');
-$table->deleted->range('0{10}');
-$table->gen(10);
-
-$zen = initReference('bug');
-$func = $zen->getMethod('getBranchOptions');
-
-// 测试步骤1:正常产品ID获取分支选项
-$result = $func->invokeArgs($zen->newInstance(), [1]);
-r(gettype($result)) && p() && e('array');
-
-// 测试步骤2:获取产品1的分支选项并检查数量
-$result = $func->invokeArgs($zen->newInstance(), [1]);
-r(count($result)) && p() && e('6');
-
-// 测试步骤3:获取产品2的分支选项并检查数量
-$result = $func->invokeArgs($zen->newInstance(), [2]);
-r(count($result)) && p() && e('4');
-
-// 测试步骤4:获取不存在产品的分支选项
-$result = $func->invokeArgs($zen->newInstance(), [999]);
-r(count($result)) && p() && e('0');
-
-// 测试步骤5:测试无效产品ID参数
-$result = $func->invokeArgs($zen->newInstance(), [0]);
-r(count($result)) && p() && e('0');
\ No newline at end of file
diff --git a/module/bug/test/zen/getproductsforcreate.php b/module/bug/test/zen/getproductsforcreate.php
deleted file mode 100755
index 9c6b830878..0000000000
--- a/module/bug/test/zen/getproductsforcreate.php
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$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');
-$product->status->range('normal');
-$product->deleted->range('0');
-$product->gen(10);
-
-zenData('project')->gen(5);
-zenData('user')->gen(5);
-
-$bugTest = new bugZenTest();
-
-$bug1 = new stdClass();
-$bug1->productID = 1;
-$bug1->projectID = 0;
-$bug1->executionID = 0;
-
-$bug2 = new stdClass();
-$bug2->productID = 999;
-$bug2->projectID = 0;
-$bug2->executionID = 0;
-
-$bug3 = new stdClass();
-$bug3->productID = 1;
-$bug3->projectID = 0;
-$bug3->executionID = 0;
-
-$bug4 = new stdClass();
-$bug4->productID = 1;
-$bug4->projectID = 0;
-$bug4->executionID = 0;
-
-$bug5 = new stdClass();
-$bug5->productID = 0;
-$bug5->projectID = 0;
-$bug5->executionID = 0;
-
-r($bugTest->getProductsForCreateTest($bug1)->productID) && p() && e('1'); // 步骤1:测试在默认tab下获取产品列表,传入productID=1
-r($bugTest->getProductsForCreateTest($bug2)->productID) && p() && e('10'); // 步骤2:测试在默认tab下获取产品列表,传入不存在的productID=999
-r(property_exists($bugTest->getProductsForCreateTest($bug3), 'products')) && p() && e('1'); // 步骤3:测试返回对象包含products属性
-r(property_exists($bugTest->getProductsForCreateTest($bug4), 'productID')) && p() && e('1'); // 步骤4:测试返回对象包含productID属性
-r($bugTest->getProductsForCreateTest($bug5)->productID) && p() && e('10'); // 步骤5:测试在默认tab下传入空productID
\ No newline at end of file
diff --git a/module/bug/test/zen/updatetodoaftercreate.php b/module/bug/test/zen/updatetodoaftercreate.php
deleted file mode 100755
index e83a411e03..0000000000
--- a/module/bug/test/zen/updatetodoaftercreate.php
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env php
-loadYaml('updatetodoaftercreate/todo', false, 2)->gen(10);
-zenData('action')->gen(0);
-zenData('bug')->gen(10);
-zenData('user')->gen(10);
-zenData('feedback')->gen(0);
-
-su('admin');
-
-global $tester;
-$bugTest = new bugZenTest();
-
-r($bugTest->updateTodoAfterCreateTest(1, 1)) && p() && e('1'); // 测试正常更新待办状态
-r($bugTest->updateTodoAfterCreateTest(2, 2)) && p() && e('1'); // 测试另一个待办更新
-r($bugTest->updateTodoAfterCreateTest(3, 10)) && p() && e('1'); // 测试待办类型为feedback的情况
-r($bugTest->updateTodoAfterCreateTest(4, 999)) && p() && e('1'); // 测试不存在的待办ID
-r($bugTest->updateTodoAfterCreateTest(5, 5)) && p() && e('1'); // 测试第5个待办更新
\ No newline at end of file
diff --git a/module/build/test/zen/assigncreatedata.php b/module/build/test/zen/assigncreatedata.php
deleted file mode 100755
index 8e5da9de2f..0000000000
--- a/module/build/test/zen/assigncreatedata.php
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$product->name->range('产品1,产品2,产品3,产品4,产品5');
-$product->type->range('normal{3},branch{1},platform{1}');
-$product->status->range('normal{4},closed{1}');
-$product->gen(5);
-
-$project = zenData('project');
-$project->id->range('1-5');
-$project->name->range('项目1,项目2,项目3,项目4,项目5');
-$project->type->range('project{3},sprint{2}');
-$project->status->range('doing{3},wait{1},closed{1}');
-$project->parent->range('0');
-$project->path->range('`,1,`,`,2,`,`,3,`,`,4,`,`,5,`');
-$project->grade->range('1');
-$project->model->range('scrum{2},waterfall{2},kanban{1}');
-$project->gen(5);
-
-$execution = zenData('project');
-$execution->id->range('11-15');
-$execution->project->range('1-3');
-$execution->name->range('迭代1,迭代2,迭代3,迭代4,迭代5');
-$execution->type->range('sprint{3},stage{2}');
-$execution->status->range('doing{3},wait{1},closed{1}');
-$execution->parent->range('1-3');
-$execution->path->range('`,1,11,`,`,1,12,`,`,2,13,`,`,2,14,`,`,3,15,`');
-$execution->grade->range('2');
-$execution->gen(5);
-
-$projectProduct = zenData('projectproduct');
-$projectProduct->project->range('1-15');
-$projectProduct->product->range('1-5');
-$projectProduct->gen(15);
-
-$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->deleted->range('0{9},1{1}');
-$user->gen(10);
-
-zenData('build')->gen(0);
-
-global $tester;
-$tester->app->rawModule = 'build';
-$tester->app->rawMethod = 'create';
-$tester->app->tab = 'project';
-$tester->app->moduleName = 'build';
-$tester->app->methodName = 'create';
-$_SESSION['project'] = 1;
-
-su('admin');
-
-$buildTest = new buildZenTest();
-
-r($buildTest->assignCreateDataTest(1, 0, 1, '')) && p('productID') && e('1');
-r($buildTest->assignCreateDataTest(1, 11, 1, '')) && p('executionID') && e('11');
-r($buildTest->assignCreateDataTest(0, 0, 1, '')) && p('products:1') && e('产品1');
-r($buildTest->assignCreateDataTest(1, 11, 1, '')) && p('executionID') && e('11');
-r($buildTest->assignCreateDataTest(1, 0, 1, 'normal')) && p('productID') && e('1');
-r($buildTest->assignCreateDataTest(1, 0, 1, '')) && p('users:admin') && e('`A:管理员`');
-r($buildTest->assignCreateDataTest(1, 0, 1, '')) && p('productID') && e('1');
\ No newline at end of file
diff --git a/module/caselib/test/zen/preparecasesforbathccreate.php b/module/caselib/test/zen/preparecasesforbathccreate.php
deleted file mode 100755
index bf6862bc13..0000000000
--- a/module/caselib/test/zen/preparecasesforbathccreate.php
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env php
- 'Test Case Title 1');
-$_POST['type'] = array(0 => 'feature');
-$_POST['pri'] = array(0 => 3);
-$_POST['module'] = array(0 => 0);
-$_POST['stage'] = array(0 => 'unittest');
-r($caselibTest->prepareCasesForBathcCreateTest(1)) && p('0:title,type,lib,project,status,version') && e('Test Case Title 1,feature,1,0,normal,1');
-
-// 测试步骤2:缺少title字段的情况
-$_POST['title'] = array(0 => '');
-$_POST['type'] = array(0 => 'feature');
-r($caselibTest->prepareCasesForBathcCreateTest(1, 'empty')) && p() && e('1');
-
-// 测试步骤3:缺少type字段的情况
-$_POST['title'] = array(0 => 'Test Case Title 2');
-$_POST['type'] = array(0 => '');
-r($caselibTest->prepareCasesForBathcCreateTest(1, 'empty')) && p() && e('1');
-
-// 测试步骤4:批量创建多个用例的情况
-$_POST['title'] = array(0 => 'Test Case 1', 1 => 'Test Case 2', 2 => 'Test Case 3');
-$_POST['type'] = array(0 => 'feature', 1 => 'performance', 2 => 'interface');
-$_POST['pri'] = array(0 => 1, 1 => 2, 2 => 3);
-r($caselibTest->prepareCasesForBathcCreateTest(2, 'count')) && p() && e('3');
-
-// 测试步骤5:验证返回用例的字段完整性
-$_POST['title'] = array(0 => 'Complete Test Case');
-$_POST['type'] = array(0 => 'feature');
-$_POST['pri'] = array(0 => 2);
-$_POST['module'] = array(0 => 5);
-$_POST['precondition'] = array(0 => 'Test precondition');
-$_POST['keywords'] = array(0 => 'keyword1,keyword2');
-$_POST['stage'] = array(0 => 'unittest');
-r($caselibTest->prepareCasesForBathcCreateTest(3)) && p('0:openedBy,version') && e('guest,1');
\ No newline at end of file
diff --git a/module/caselib/test/zen/prepareeditextras.php b/module/caselib/test/zen/prepareeditextras.php
deleted file mode 100755
index c6b238b0c1..0000000000
--- a/module/caselib/test/zen/prepareeditextras.php
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env php
-gen(5);
-
-su('admin');
-
-$caselibTest = new caselibTest();
-
-// 创建测试数据数组
-$formData1 = array('name' => 'Test Case Library', 'desc' => 'Test Description', 'uid' => 'test-uid-123');
-$formData2 = array('name' => '', 'desc' => '', 'uid' => 'empty-uid');
-$formData3 = array('name' => 'Another Library', 'desc' => '', 'uid' => 'another-uid');
-$formData4 = array('name' => 'Time Test Library', 'desc' => '', 'uid' => 'time-test-uid');
-$formData5 = array('name' => 'File Test Library', 'desc' => '
', 'uid' => 'file-test-uid');
-
-r($caselibTest->prepareEditExtrasTest($formData1, 1)) && p('id,name') && e('1,Test Case Library');
-r($caselibTest->prepareEditExtrasTest($formData2, 2)) && p('id,uid') && e('2,empty-uid');
-r($caselibTest->prepareEditExtrasTest($formData3, 3)) && p('id,name') && e('3,Another Library');
-r($caselibTest->prepareEditExtrasTest($formData4, 0)) && p('lastEditedBy') && e('admin');
-r($caselibTest->prepareEditExtrasTest($formData5, 5)) && p('id,uid') && e('5,file-test-uid');
\ No newline at end of file
diff --git a/module/caselib/test/zen/processcasesforexport.php b/module/caselib/test/zen/processcasesforexport.php
deleted file mode 100755
index 983e94b208..0000000000
--- a/module/caselib/test/zen/processcasesforexport.php
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$caseTable->lib->range('1{5},2{5}');
-$caseTable->title->range('用例标题1,用例标题2,用例标题3,用例标题4,用例标题5,用例标题6,用例标题7,用例标题8,用例标题9,用例标题10');
-$caseTable->module->range('101,102,103,104,105,106,107,108,109,110');
-$caseTable->pri->range('1,2,3,4,1,2,3,4,1,2');
-$caseTable->type->range('feature,performance,config,install,security,interface,feature,performance,config,install');
-$caseTable->status->range('normal,blocked,investigate,normal,normal,blocked,normal,normal,investigate,normal');
-$caseTable->stage->range('unittest,feature,integration,system,smoke,unittest,feature,integration,system,smoke');
-$caseTable->openedBy->range('admin,user1,user2,user3,admin,user1,user2,user3,admin,user1');
-$caseTable->lastEditedBy->range('admin,user1,user2,user3,admin,user1,user2,user3,admin,user1');
-$caseTable->openedDate->range('`2024-01-01 10:00:00`,`2024-01-02 11:00:00`,`2024-01-03 12:00:00`,`2024-01-04 13:00:00`,`2024-01-05 14:00:00`,`2024-01-06 15:00:00`,`2024-01-07 16:00:00`,`2024-01-08 17:00:00`,`2024-01-09 18:00:00`,`0000-00-00 00:00:00`');
-$caseTable->lastRunDate->range('`2024-02-01 10:00:00`,`2024-02-02 11:00:00`,`2024-02-03 12:00:00`,`2024-02-04 13:00:00`,`2024-02-05 14:00:00`,`2024-02-06 15:00:00`,`2024-02-07 16:00:00`,`2024-02-08 17:00:00`,`2024-02-09 18:00:00`,`0000-00-00 00:00:00`');
-$caseTable->linkCase->range('0,2,0,4,0,6,0,8,0,0');
-$caseTable->gen(10);
-
-$moduleTable = zenData('module');
-$moduleTable->id->range('101-120');
-$moduleTable->name->range('模块1,模块2,模块3,模块4,模块5,模块6,模块7,模块8,模块9,模块10,模块11,模块12,模块13,模块14,模块15,模块16,模块17,模块18,模块19,模块20');
-$moduleTable->type->range('caselib{20}');
-$moduleTable->root->range('1{10},2{10}');
-$moduleTable->gen(20);
-
-$userTable = zenData('user');
-$userTable->id->range('1-10');
-$userTable->account->range('admin,user1,user2,user3,user4,user5,user6,user7,user8,user9');
-$userTable->realname->range('管理员,用户1,用户2,用户3,用户4,用户5,用户6,用户7,用户8,用户9');
-$userTable->gen(10);
-
-$stepTable = zenData('casestep');
-$stepTable->id->range('1-15');
-$stepTable->case->range('1{3},2{3},3{3},4{3},5{3}');
-$stepTable->version->range('1{15}');
-$stepTable->type->range('step{15}');
-$stepTable->parent->range('0{15}');
-$stepTable->desc->range('步骤1,步骤2,步骤3,步骤A,步骤B,步骤C,测试步骤1,测试步骤2,测试步骤3,操作1,操作2,操作3,执行1,执行2,执行3');
-$stepTable->expect->range('预期1,预期2,预期3,预期A,预期B,预期C,测试预期1,测试预期2,测试预期3,结果1,结果2,结果3,期望1,期望2,期望3');
-$stepTable->gen(15);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$caselibTest = new caselibTest();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($caselibTest->processCasesForExportTest(array(), 1, array('fileType' => 'csv'), 'count')) && p() && e('0'); // 步骤1:测试空用例数组处理
-r($caselibTest->processCasesForExportTest(array(1 => (object)array('id' => 1, 'title' => '测试用例', 'pri' => 1, 'type' => 'feature', 'status' => 'normal', 'stage' => 'unittest', 'openedBy' => 'admin', 'lastEditedBy' => 'admin', 'module' => 101, 'openedDate' => '2024-01-01 10:00:00', 'lastRunDate' => '2024-02-01 10:00:00', 'linkCase' => '')), 1, array('fileType' => 'csv'), 'first_case_pri')) && p() && e('1'); // 步骤2:测试单个用例的基本字段处理
-r($caselibTest->processCasesForExportTest(array(1 => (object)array('id' => 1, 'title' => '测试用例', 'pri' => 1, 'type' => 'feature', 'status' => 'normal', 'stage' => 'unittest', 'openedBy' => 'admin', 'lastEditedBy' => 'admin', 'module' => 101, 'openedDate' => '2024-01-01 10:00:00', 'lastRunDate' => '2024-02-01 10:00:00', 'linkCase' => '')), 1, array('fileType' => 'csv'), 'first_case_type')) && p() && e('功能测试'); // 步骤3:测试用例类型字段被转换
-r($caselibTest->processCasesForExportTest(array(1 => (object)array('id' => 1, 'title' => '测试用例', 'pri' => 1, 'type' => 'feature', 'status' => 'normal', 'stage' => 'unittest', 'openedBy' => 'admin', 'lastEditedBy' => 'admin', 'module' => 101, 'openedDate' => '2024-01-01 10:00:00', 'lastRunDate' => '2024-02-01 10:00:00', 'linkCase' => '')), 1, array('fileType' => 'csv'), 'count')) && p() && e('1'); // 步骤4:测试用例返回数量
-r($caselibTest->processCasesForExportTest(array(10 => (object)array('id' => 10, 'title' => '测试用例10', 'pri' => 2, 'type' => 'install', 'status' => 'normal', 'stage' => 'smoke', 'openedBy' => 'user1', 'lastEditedBy' => 'user1', 'module' => 110, 'openedDate' => '0000-00-00 00:00:00', 'lastRunDate' => '0000-00-00 00:00:00', 'linkCase' => '')), 2, array('fileType' => 'csv'), 'first_case_openedDate')) && p() && e('0'); // 步骤5:测试用例日期字段格式化
\ No newline at end of file
diff --git a/module/cne/test/model/apiget.php b/module/cne/test/model/apiget.php
deleted file mode 100755
index 56a6312548..0000000000
--- a/module/cne/test/model/apiget.php
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-apiGetTest('/api/cne/app/status', array('name' => 'test-app'), array(), '')) && p('code') && e('200'); // 测试步骤1:正常的API GET请求
-r($cneTest->apiGetTest('/api/cne/app/info', array('name' => 'my-app'), array(), '')) && p('data:name') && e('my-app'); // 测试步骤2:带查询参数的API GET请求
-r($cneTest->apiGetTest('/api/cne/app/error', array(), array(), '')) && p('code') && e('404'); // 测试步骤3:API返回404错误的情况
-r($cneTest->apiGetTest('/api/cne/app/auth-error', array(), array(), '')) && p('code') && e('401'); // 测试步骤4:API返回401认证错误的情况
-r($cneTest->apiGetTest('/api/cne/app/custom-host', array(), array(), 'http://custom-host')) && p('code') && e('200'); // 测试步骤5:使用自定义host的API GET请求
\ No newline at end of file
diff --git a/module/cne/test/model/apipost.php b/module/cne/test/model/apipost.php
deleted file mode 100755
index eace1d52d9..0000000000
--- a/module/cne/test/model/apipost.php
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-apiPostTest('/api/cne/app/install', array('name' => 'test-app'), array(), '')) && p('code') && e('200'); // 测试步骤1:正常的API POST请求
-r($cneTest->apiPostTest('/api/cne/app/create', (object)array('name' => 'new-app'), array(), '')) && p('data:name') && e('new-app'); // 测试步骤2:使用对象数据的POST请求
-r($cneTest->apiPostTest('/api/cne/app/error', array(), array(), '')) && p('code') && e('400'); // 测试步骤3:API返回400错误的情况
-r($cneTest->apiPostTest('/api/cne/app/network-error', array(), array(), '')) && p('code') && e('600'); // 测试步骤4:网络错误的情况
-r($cneTest->apiPostTest('/api/cne/app/custom-host', array(), array(), 'http://custom-host')) && p('code') && e('200'); // 测试步骤5:使用自定义host的POST请求
\ No newline at end of file
diff --git a/module/cne/test/model/backup.php b/module/cne/test/model/backup.php
deleted file mode 100755
index 93b70840fe..0000000000
--- a/module/cne/test/model/backup.php
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-backupTest(1, null, '')) && p('code') && e('200'); // 测试步骤1:正常备份请求,实例ID=1,默认账号
-r($cneTest->backupTest(2, 'testuser', '')) && p('data:account') && e('testuser'); // 测试步骤2:备份请求,实例ID=2,指定账号testuser
-r($cneTest->backupTest(3, null, 'manual')) && p('data:mode') && e('manual'); // 测试步骤3:备份请求,实例ID=3,指定mode=manual
-r($cneTest->backupTest(4, 'admin', 'system')) && p('data:mode') && e('system'); // 测试步骤4:备份请求,实例ID=4,指定mode=system
-r($cneTest->backupTest(5, 'admin', 'upgrade')) && p('data:mode') && e('upgrade'); // 测试步骤5:备份请求,实例ID=5,指定mode=upgrade
\ No newline at end of file
diff --git a/module/cne/test/model/cneservererror.php b/module/cne/test/model/cneservererror.php
deleted file mode 100755
index 0e371aced1..0000000000
--- a/module/cne/test/model/cneservererror.php
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-cneServerErrorTest()) && p('code') && e('600'); // 测试步骤1:正常情况下返回CNE服务器错误对象
-r($cneTest->cneServerErrorTest()) && p('message') && e('CNE服务器出错'); // 测试步骤2:正常情况下返回CNE服务器错误对象
-r(gettype($cneTest->cneServerErrorTest())) && p() && e('object'); // 测试步骤3:验证返回对象的数据类型
-r(property_exists($cneTest->cneServerErrorTest(), 'code')) && p() && e('1'); // 测试步骤4:验证返回对象包含code属性
-r(property_exists($cneTest->cneServerErrorTest(), 'message')) && p() && e('1'); // 测试步骤5:验证返回对象包含message属性
\ No newline at end of file
diff --git a/module/cne/test/model/deletebackup.php b/module/cne/test/model/deletebackup.php
deleted file mode 100755
index 89c39f8166..0000000000
--- a/module/cne/test/model/deletebackup.php
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env php
-deleteBackupTest(1, 'backup-20241207-1')) && p('code') && e('200'); // 测试步骤1:正常删除备份,实例ID=1,正常备份名称
-r($cneTest->deleteBackupTest(2, 'backup-20241207-2')) && p('code') && e('200'); // 测试步骤2:删除备份,实例ID=2,正常备份名称
-r($cneTest->deleteBackupTest(3, 'nonexistent-backup')) && p('code') && e('200'); // 测试步骤3:删除不存在的备份,实例ID=3,不存在的备份名称
-r($cneTest->deleteBackupTest(0, 'backup-test')) && p('code') && e('404'); // 测试步骤4:删除备份,无效实例ID=0
-r($cneTest->deleteBackupTest(999, 'backup-test')) && p('code') && e('404'); // 测试步骤5:删除备份,不存在实例ID=999
-r($cneTest->deleteBackupTest(4, '')) && p('code') && e('400'); // 测试步骤6:删除备份,实例ID=4,空备份名称
-r($cneTest->deleteBackupTest(5, 'backup-special-#@!')) && p('code') && e('200'); // 测试步骤7:删除备份,实例ID=5,特殊字符备份名称
\ No newline at end of file
diff --git a/module/cne/test/model/getappvolumes.php b/module/cne/test/model/getappvolumes.php
deleted file mode 100755
index 9329f2559d..0000000000
--- a/module/cne/test/model/getappvolumes.php
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env php
-gen(0);
-zenData('space')->gen(0);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$cneTest = new cneTest();
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r($cneTest->getAppVolumesTest(1, false)) && p('0:name') && e('data-volume'); // 步骤1:正常实例获取数据卷信息
-r($cneTest->getAppVolumesTest(2, true)) && p('0:name') && e('mysql-data'); // 步骤2:使用component参数为true获取MySQL数据卷
-r($cneTest->getAppVolumesTest(3, 'redis')) && p('0:name') && e('redis-data'); // 步骤3:使用component参数为字符串获取Redis数据卷
-r($cneTest->getAppVolumesTest(4, false)) && p('0:name') && e('config-volume'); // 步骤4:测试返回非块设备的数据卷
-r($cneTest->getAppVolumesTest(999, false)) && p() && e('0'); // 步骤5:测试不存在的实例ID
\ No newline at end of file
diff --git a/module/cne/test/model/getbackuplist.php b/module/cne/test/model/getbackuplist.php
deleted file mode 100755
index 312733b831..0000000000
--- a/module/cne/test/model/getbackuplist.php
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env php
-getBackupListTest(1)) && p('code') && e('200'); // 测试步骤1:正常获取备份列表,实例ID=1
-r($cneTest->getBackupListTest(2)) && p('code') && e('200'); // 测试步骤2:获取备份列表,实例ID=2
-r($cneTest->getBackupListTest(3)) && p('code') && e('200'); // 测试步骤3:获取备份列表,实例ID=3
-r($cneTest->getBackupListTest(0)) && p('code') && e('404'); // 测试步骤4:获取备份列表,无效实例ID=0
-r($cneTest->getBackupListTest(999)) && p('code') && e('404'); // 测试步骤5:获取备份列表,不存在实例ID=999
-r($cneTest->getBackupListTest(-1)) && p('code') && e('404'); // 测试步骤6:获取备份列表,负数实例ID=-1
-r(is_array($cneTest->getBackupListTest(1)->data)) && p() && e('1'); // 测试步骤7:正常获取备份列表,实例ID=1,检查data属性为数组
\ No newline at end of file
diff --git a/module/cne/test/model/getbackupstatus.php b/module/cne/test/model/getbackupstatus.php
deleted file mode 100755
index 8c58c5174d..0000000000
--- a/module/cne/test/model/getbackupstatus.php
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env php
-getBackupStatusTest(1, 'backup-001')) && p('code') && e('200'); // 测试步骤1:正常获取备份状态,实例ID=1,备份名称=backup-001
-r($cneTest->getBackupStatusTest(2, 'backup-002')) && p('data:status') && e('completed'); // 测试步骤2:正常获取备份状态,实例ID=2,备份名称=backup-002
-r($cneTest->getBackupStatusTest(3, 'backup-test')) && p('data:backup_name') && e('backup-test'); // 测试步骤3:获取备份状态,实例ID=3,备份名称=backup-test
-r($cneTest->getBackupStatusTest(0, 'backup-001')) && p('code') && e('400'); // 测试步骤4:获取备份状态,无效实例ID=0,备份名称=backup-001
-r($cneTest->getBackupStatusTest(999, 'backup-001')) && p('code') && e('404'); // 测试步骤5:获取备份状态,不存在实例ID=999,备份名称=backup-001
-r(is_object($cneTest->getBackupStatusTest(1, ''))) && p() && e('1'); // 测试步骤6:获取备份状态,实例ID=1,空备份名称
-r($cneTest->getBackupStatusTest(1, 'backup-very-long-name-test-12345')) && p('code') && e('200'); // 测试步骤7:获取备份状态,实例ID=1,长备份名称
\ No newline at end of file
diff --git a/module/cne/test/model/getdisksettings.php b/module/cne/test/model/getdisksettings.php
deleted file mode 100755
index 516dd0e1fd..0000000000
--- a/module/cne/test/model/getdisksettings.php
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env php
-gen(0);
-zenData('space')->gen(0);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$cneTest = new cneTest();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($cneTest->getDiskSettingsTest(1, false)) && p('resizable') && e('0'); // 步骤1:测试正常实例但没有块设备卷的情况
-r($cneTest->getDiskSettingsTest(999, false)) && p('size;used;limit') && e('0;0;0'); // 步骤2:测试不存在的实例ID
-r($cneTest->getDiskSettingsTest(1, 'mysql')) && p('resizable') && e('0'); // 步骤3:测试带MySQL组件参数的实例
-r($cneTest->getDiskSettingsTest(1, true)) && p('resizable;requestSize') && e('0;0'); // 步骤4:测试component参数为布尔值true的情况
-r($cneTest->getDiskSettingsTest(2, '')) && p('resizable;size;used;limit') && e('0;0;0;0'); // 步骤5:测试component参数为空字符串的情况
\ No newline at end of file
diff --git a/module/cne/test/model/getvolumesmetrics.php b/module/cne/test/model/getvolumesmetrics.php
deleted file mode 100755
index 0dd2a7caa0..0000000000
--- a/module/cne/test/model/getvolumesmetrics.php
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env php
-gen(0);
-zenData('space')->gen(0);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$cneTest = new cneTest();
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r($cneTest->getVolumesMetricsTest(null)) && p('limit,usage,rate') && e('0,0,0.01'); // 步骤1:传入null实例获取卷指标
-r($cneTest->getVolumesMetricsTest((object)array('id' => 1, 'k8name' => 'test-app-1', 'spaceData' => (object)array('k8space' => 'test-ns')))) && p('limit,usage,rate') && e('0,0,0.01'); // 步骤2:传入实例ID=1但没有卷数据的情况
-r($cneTest->getVolumesMetricsTest((object)array('id' => 2, 'k8name' => 'test-app-2', 'spaceData' => (object)array('k8space' => 'test-ns')))) && p('limit,usage,rate') && e('10737418240,5368709120,50'); // 步骤3:传入实例ID=2有卷数据的情况
-r($cneTest->getVolumesMetricsTest((object)array('id' => 3, 'k8name' => 'test-app-3', 'spaceData' => (object)array('k8space' => 'test-ns')))) && p('rate') && e('100'); // 步骤4:传入实例ID=3满容量的情况
-r($cneTest->getVolumesMetricsTest((object)array('id' => 999, 'k8name' => 'test-app-999', 'spaceData' => (object)array('k8space' => 'test-ns')))) && p('limit,usage,rate') && e('0,0,0.01'); // 步骤5:传入不存在的实例ID=999
\ No newline at end of file
diff --git a/module/cne/test/model/installapp.php b/module/cne/test/model/installapp.php
deleted file mode 100755
index 86c1a0241d..0000000000
--- a/module/cne/test/model/installapp.php
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env php
-installAppWithFullParamsTest()) && p('code') && e('200');
-r($cneTest->installAppWithEmptyChannelTest()) && p('data:channel') && e('stable');
-r($cneTest->installAppWithDifferentChartTest()) && p('data:name') && e('gitlab-app');
-r($cneTest->installAppWithDifferentNamespaceTest()) && p('data:namespace') && e('production');
-r($cneTest->installAppWithNullParamsTest()) && p('code') && e('200');
\ No newline at end of file
diff --git a/module/cne/test/model/restore.php b/module/cne/test/model/restore.php
deleted file mode 100755
index e639739274..0000000000
--- a/module/cne/test/model/restore.php
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env php
-restoreTest(1, 'backup-test-001', '')) && p('code') && e('200'); // 测试步骤1:正常恢复请求,实例ID=1,默认账号
-r($cneTest->restoreTest(2, 'backup-test-002', 'testuser')) && p('data:account') && e('testuser'); // 测试步骤2:恢复请求,实例ID=2,指定账号testuser
-r($cneTest->restoreTest(3, 'backup-20241207-001', '')) && p('data:backup_name') && e('backup-20241207-001'); // 测试步骤3:恢复请求,实例ID=3,不同备份名称
-r($cneTest->restoreTest(999, 'backup-test-003', '')) && p('code') && e('404'); // 测试步骤4:不存在的实例ID=999
-r($cneTest->restoreTest(1, '', '')) && p('code') && e('400'); // 测试步骤5:空备份名称
\ No newline at end of file
diff --git a/module/cne/test/model/translateerror.php b/module/cne/test/model/translateerror.php
deleted file mode 100755
index 85702ac2f1..0000000000
--- a/module/cne/test/model/translateerror.php
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env php
-code = 400;
-$apiResult1->message = 'Bad Request';
-r($cneTest->translateErrorTest($apiResult1, false)) && p('message') && e('请求集群接口失败');
-
-// 测试步骤2: 已知错误码404的翻译
-$apiResult2 = new stdclass();
-$apiResult2->code = 404;
-$apiResult2->message = 'Not Found';
-r($cneTest->translateErrorTest($apiResult2, false)) && p('message') && e('服务不存在');
-
-// 测试步骤3: 已知错误码40004的翻译
-$apiResult3 = new stdclass();
-$apiResult3->code = 40004;
-$apiResult3->message = 'Certificate domain mismatch';
-r($cneTest->translateErrorTest($apiResult3, false)) && p('message') && e('证书与域名不匹配');
-
-// 测试步骤4: 未知错误码999的翻译(返回默认消息)
-$apiResult4 = new stdclass();
-$apiResult4->code = 999;
-$apiResult4->message = 'Unknown error';
-r($cneTest->translateErrorTest($apiResult4, false)) && p('message') && e('CNE服务器出错');
-
-// 测试步骤5: 开启debug模式时包含原始错误信息
-$apiResult5 = new stdclass();
-$apiResult5->code = 400;
-$apiResult5->message = 'Bad Request';
-r($cneTest->translateErrorTest($apiResult5, true)) && p('message') && e('请求集群接口失败 [400]: [Bad Request]');
-
-// 测试步骤6: 关闭debug模式时不包含原始错误信息
-$apiResult6 = new stdclass();
-$apiResult6->code = 400;
-$apiResult6->message = 'Bad Request';
-r($cneTest->translateErrorTest($apiResult6, false)) && p('message') && e('请求集群接口失败');
-
-// 测试步骤7: 验证apiResult的message字段被正确修改
-$apiResult7 = new stdclass();
-$apiResult7->code = 404;
-$apiResult7->message = 'Original Message';
-$cneTest->translateErrorTest($apiResult7, false);
-r($apiResult7) && p('message') && e('服务不存在');
\ No newline at end of file
diff --git a/module/cne/test/model/uploadcert.php b/module/cne/test/model/uploadcert.php
deleted file mode 100755
index 85edf000ee..0000000000
--- a/module/cne/test/model/uploadcert.php
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env php
-name = 'test-cert';
-$validCert->certificate_pem = '-----BEGIN CERTIFICATE-----\ntest-cert-pem\n-----END CERTIFICATE-----';
-$validCert->private_key_pem = '-----BEGIN PRIVATE KEY-----\ntest-key-pem\n-----END PRIVATE KEY-----';
-
-$emptyCert = new stdclass();
-$emptyCert->name = '';
-$emptyCert->certificate_pem = '';
-$emptyCert->private_key_pem = '';
-
-$incompleteCert = new stdclass();
-$incompleteCert->name = 'incomplete-cert';
-// 缺少certificate_pem和private_key_pem字段
-
-r($cneTest->uploadCertTest($validCert, '')) && p('code') && e('600'); // 步骤1:使用默认channel上传证书
-r($cneTest->uploadCertTest($validCert, 'stable')) && p('code') && e('600'); // 步骤2:使用自定义channel上传证书
-r($cneTest->uploadCertTest($emptyCert, '')) && p('code') && e('600'); // 步骤3:使用空证书名称上传
-r($cneTest->uploadCertTest($incompleteCert, '')) && p('code') && e('600'); // 步骤4:证书对象缺少必要字段
-r($cneTest->uploadCertTest($validCert, 'production')) && p('code') && e('600'); // 步骤5:完整有效的证书对象上传
\ No newline at end of file
diff --git a/module/cne/test/model/validatecert.php b/module/cne/test/model/validatecert.php
deleted file mode 100755
index 61b2d6b273..0000000000
--- a/module/cne/test/model/validatecert.php
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env php
-validateCertTest('', $validPem, $validKey, $validDomain)) && p('code') && e('600'); // 步骤1:使用空证书名称验证证书
-r($cneTest->validateCertTest($validCertName, '', $validKey, $validDomain)) && p('code') && e('600'); // 步骤2:使用空证书PEM内容验证证书
-r($cneTest->validateCertTest($validCertName, $validPem, '', $validDomain)) && p('code') && e('600'); // 步骤3:使用空私钥验证证书
-r($cneTest->validateCertTest($validCertName, $validPem, $validKey, '')) && p('code') && e('600'); // 步骤4:使用空域名验证证书
-r($cneTest->validateCertTest($validCertName, $validPem, $validKey, $validDomain)) && p('code') && e('600'); // 步骤5:使用完整有效参数验证证书
\ No newline at end of file
diff --git a/module/common/test/model/printduration.php b/module/common/test/model/printduration.php
deleted file mode 100755
index 69c1592fcd..0000000000
--- a/module/common/test/model/printduration.php
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env php
-printDurationTest(90061, 'y-m-d-h-i-s')) && p() && e('1天1小时1分1秒'); // 测试标准秒数转换
-r($commonTest->printDurationTest(0, 'y-m-d-h-i-s')) && p() && e('0'); // 测试0秒
-r($commonTest->printDurationTest(3661, 'y-m-d-h-i-s')) && p() && e('1小时1分1秒'); // 测试3661秒
-r($commonTest->printDurationTest(31536000, 'y-m-d-h-i-s')) && p() && e('1年'); // 测试一年的秒数
-r($commonTest->printDurationTest(86400, 'y-m-d-h-i-s')) && p() && e('1天'); // 测试一天的秒数
-r($commonTest->printDurationTest(3600, 'y-m-d-h-i-s')) && p() && e('1小时'); // 测试小时数
-r($commonTest->printDurationTest(60, 'y-m-d-h-i-s')) && p() && e('1分'); // 测试分钟数
\ No newline at end of file
diff --git a/module/convert/test/model/getzentaofields.php b/module/convert/test/model/getzentaofields.php
deleted file mode 100755
index cb57855b7b..0000000000
--- a/module/convert/test/model/getzentaofields.php
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env php
-getZentaoFieldsTest('story'))) && p() && e('6'); // 测试story模块的字段数量
-r(count($convertTest->getZentaoFieldsTest('bug'))) && p() && e('13'); // 测试bug模块的字段数量
-r(count($convertTest->getZentaoFieldsTest('task'))) && p() && e('5'); // 测试task模块的字段数量
-r(count($convertTest->getZentaoFieldsTest('testcase'))) && p() && e('9'); // 测试testcase模块的字段数量
-r(count($convertTest->getZentaoFieldsTest('epic'))) && p() && e('6'); // 测试epic模块的字段数量
-r(count($convertTest->getZentaoFieldsTest('requirement'))) && p() && e('6'); // 测试requirement模块的字段数量
-r(count($convertTest->getZentaoFieldsTest('notexist'))) && p() && e('0'); // 测试不存在配置的模块返回空数组
-r(count($convertTest->getZentaoFieldsTest(''))) && p() && e('0'); // 测试空字符串模块返回空数组
\ No newline at end of file
diff --git a/module/convert/test/model/getzentaoobjectlist.php b/module/convert/test/model/getzentaoobjectlist.php
deleted file mode 100755
index 5a00f4f293..0000000000
--- a/module/convert/test/model/getzentaoobjectlist.php
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env php
-getZentaoObjectListTest()) && p('epic') && e('业务需求'); // 步骤1:enableER=true且URAndSR=true时,返回所有对象(含epic和requirement)
-r($convertTest->getZentaoObjectListTestWithoutER()) && p('requirement') && e('用户需求'); // 步骤2:enableER=false时,不包含epic对象
-r($convertTest->getZentaoObjectListTestWithoutUR()) && p('epic') && e('业务需求'); // 步骤3:URAndSR=false时,不包含requirement对象
-r(count($convertTest->getZentaoObjectListTestWithoutERAndUR())) && p() && e('5'); // 步骤4:enableER=false且URAndSR=false时,不包含epic和requirement
-r(gettype($convertTest->getZentaoObjectListTest())) && p() && e('array'); // 步骤5:验证返回的是数组类型
\ No newline at end of file
diff --git a/module/convert/test/model/savestate.php b/module/convert/test/model/savestate.php
deleted file mode 100755
index 05b1df47d0..0000000000
--- a/module/convert/test/model/savestate.php
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env php
-objectModel, 'saveState' @1
-- 执行$convertTest->objectModel, 'saveState' @1
-- 执行 @1
-- 执行convertTest模块的saveStateTest方法 @exception:
-- 执行 @1
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/convert.unittest.class.php';
-
-zenData('user')->gen(10);
-zenData('product')->gen(5);
-zenData('project')->gen(3);
-
-su('admin');
-
-$convertTest = new convertTest();
-
-r(method_exists($convertTest->objectModel, 'saveState')) && p() && e('1');
-r(is_callable(array($convertTest->objectModel, 'saveState'))) && p() && e('1');
-r((new ReflectionMethod('convertModel', 'saveState'))->hasReturnType()) && p() && e('1');
-r($convertTest->saveStateTest()) && p() && e('exception:');
-r(class_exists('convertModel')) && p() && e('1');
\ No newline at end of file
diff --git a/module/convert/test/tao/createtask.php b/module/convert/test/tao/createtask.php
deleted file mode 100755
index 2364d92a3b..0000000000
--- a/module/convert/test/tao/createtask.php
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env php
-id = 'test001';
-$normalData->summary = 'Test Task';
-$normalData->timeoriginalestimate = 28800;
-$normalData->timeestimate = 14400;
-$normalData->timespent = 7200;
-$normalData->priority = 2;
-$normalData->issuestatus = 'Open';
-$normalData->issuetype = 'Task';
-$normalData->description = 'Test task description';
-$normalData->creator = 'admin';
-$normalData->created = '2023-01-01T10:00:00.000+0800';
-$normalData->assignee = 'user1';
-$normalData->duedate = '2023-12-31';
-$normalData->resolution = '';
-
-$relations = array(
- 'zentaoStatusTask' => array(
- 'Open' => 'wait',
- 'In Progress' => 'doing',
- 'Resolved' => 'done',
- 'Closed' => 'closed'
- ),
- 'zentaoReasonTask' => array(
- 'Fixed' => 'done',
- 'Won\'t Fix' => 'cancel',
- 'Duplicate' => 'cancel'
- )
-);
-
-$invalidProjectData = new stdclass();
-$invalidProjectData->id = 'test002';
-$invalidProjectData->summary = 'Invalid Project Task';
-$invalidProjectData->issuestatus = 'Open';
-$invalidProjectData->issuetype = 'Task';
-
-$invalidExecutionData = new stdclass();
-$invalidExecutionData->id = 'test003';
-$invalidExecutionData->summary = 'Invalid Execution Task';
-$invalidExecutionData->issuestatus = 'Open';
-$invalidExecutionData->issuetype = 'Task';
-
-$missingFieldData = new stdclass();
-$missingFieldData->id = 'test004';
-$missingFieldData->issuestatus = 'Open';
-$missingFieldData->issuetype = 'Task';
-
-r($convertTest->createTaskTest(1, 1, $normalData, $relations)) && p() && e('0');
-r($convertTest->createTaskTest(1, 1, null, $relations)) && p() && e('0');
-r($convertTest->createTaskTest(0, 1, $invalidProjectData, $relations)) && p() && e('0');
-r($convertTest->createTaskTest(1, 0, $invalidExecutionData, $relations)) && p() && e('0');
-r($convertTest->createTaskTest(1, 1, $missingFieldData, $relations)) && p() && e('0');
\ No newline at end of file
diff --git a/module/convert/test/tao/processjiracontent.php b/module/convert/test/tao/processjiracontent.php
deleted file mode 100755
index de9ce2558c..0000000000
--- a/module/convert/test/tao/processjiracontent.php
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env php
- image
-- 执行convertTest模块的processJiraContentTest方法,参数是'!image1.jpg|width=100! and !image2.png|height=200!', array @
and
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-su('admin');
-
-$convertTest = new convertTaoTest();
-
-r($convertTest->processJiraContentTest('', array())) && p() && e('0');
-r($convertTest->processJiraContentTest('This is plain text without image markers.', array())) && p() && e('0');
-r($convertTest->processJiraContentTest('This has !image.png|width=100! marker but no files', array())) && p() && e('This has !image.png|width=100! marker but no files');
-r($convertTest->processJiraContentTest('Check this !test.png|width=100! image', array('test.png' => (object)array('id' => 1, 'extension' => 'png')))) && p() && e('Check this
image');
-r($convertTest->processJiraContentTest('!image1.jpg|width=100! and !image2.png|height=200!', array('image1.jpg' => (object)array('id' => 1, 'extension' => 'jpg'), 'image2.png' => (object)array('id' => 2, 'extension' => 'png')))) && p() && e('
and
');
\ No newline at end of file
diff --git a/module/doc/test/zen/assignapivarforspace.php b/module/doc/test/zen/assignapivarforspace.php
deleted file mode 100755
index 985dcacd29..0000000000
--- a/module/doc/test/zen/assignapivarforspace.php
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env php
-gen(10);
-zendata('doc')->gen(20);
-zendata('api')->gen(15);
-
-su('admin');
-
-$docTest = new docZenTest();
-
-r($docTest->assignApiVarForSpaceTest('product', 'all', 'lib', 1, array(1 => 'testlib'), 1, 0, 0, 'id_desc', 0, 20, 20, 1)) && p('pager,hasDocs') && e('pager,1');
-r($docTest->assignApiVarForSpaceTest('product', 'all', 'api', 1, array(1 => 'apilib'), 1, 0, 0, 'id_desc', 0, 15, 20, 1)) && p('pager,hasApiList') && e('pager,1');
-r($docTest->assignApiVarForSpaceTest('product', 'all', 'lib', 1, array(1 => 'testlib'), 1, 0, 0, 'id_desc', 0, 20, 20, 1)) && p('canExport') && e('0');
-r($docTest->assignApiVarForSpaceTest('project', 'all', 'lib', 1, array(1 => 'testlib'), 1, 0, 0, 'id_desc', 0, 20, 20, 1)) && p('canExport') && e('0');
-r($docTest->assignApiVarForSpaceTest('product', 'all', 'lib', 1, array(1 => 'testlib'), 1, 0, 0, 'id_desc', 0, 50, 20, 1)) && p('pager') && e('pager');
-r($docTest->assignApiVarForSpaceTest('product', 'all', 'lib', 1, array(1 => 'testlib'), 1, 0, 0, 'id_desc', 0, 100, 50, 2)) && p('pager') && e('pager');
\ No newline at end of file
diff --git a/module/doc/test/zen/previeweicket.php b/module/doc/test/zen/previeweicket.php
deleted file mode 100755
index 36300b96c5..0000000000
--- a/module/doc/test/zen/previeweicket.php
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env php
-product->range('1{5},2{5}');
-$ticketTable->title->range('1-10')->prefix('工单标题');
-$ticketTable->status->range('wait{3},doing{2},closed{5}');
-$ticketTable->pri->range('1{2},2{4},3{4}');
-$ticketTable->type->range('bug{5},requirement{5}');
-$ticketTable->assignedTo->range('user1,user2,user3,user4,user5');
-$ticketTable->openedBy->range('admin');
-$ticketTable->openedDate->range('2025-11-01 10:00:00');
-$ticketTable->deleted->range('0');
-$ticketTable->gen(10, false);
-
-$sqlFile = dirname(__FILE__) . '/data/sql/ticket_previeweicket_zd.sql';
-if(file_exists($sqlFile))
-{
- $sql = file_get_contents($sqlFile);
- $sql = preg_replace("/, '[0-9]{4}', '/", ", '2025-11-01 10:00:00', '", $sql);
- $sql = preg_replace("/, NULL, NULL, '', NULL, NULL, '[0-9]', '[0-9]', '[0-9]', /", ", NULL, NULL, '', NULL, NULL, '\\6', '\\7', '\\8', ", $sql);
- $sql = preg_replace("/, '0', '0', '\"\"', '0', '0', /", ", NULL, NULL, '', NULL, NULL, ", $sql);
- $sql = preg_replace("/, '2025-11-01 10:00:00', '0', 'admin', '0', '2025-11-01 10:00:00', /", ", NULL, NULL, 'admin', NULL, NULL, ", $sql);
- $sql = preg_replace("/, '2025-11-01 10:00:00', '2025-11-01 10:00:00', 'admin', '2025-11-01 10:00:00', '2025-11-01 10:00:00', /", ", NULL, NULL, 'admin', NULL, NULL, ", $sql);
- $sql = preg_replace("/, '2025-11-01 10:00:00', '2025-11-01 10:00:00', 'user[12]', '2025-11-01 10:00:00', '2025-11-01 10:00:00', /", ", NULL, NULL, 'admin', NULL, NULL, ", $sql);
- file_put_contents($sqlFile, $sql);
-}
-
-zenData('user')->gen(5);
-
-su('admin');
-
-$docTest = new docZenTest();
-
-$settingsCustomSearch1 = array('action' => 'preview', 'product' => 1, 'condition' => 'customSearch', 'field' => array('status'), 'operator' => array('='), 'value' => array('wait'), 'andor' => array('and'));
-$settingsCustomSearch2 = array('action' => 'preview', 'product' => 1, 'condition' => 'customSearch', 'field' => array('pri'), 'operator' => array('='), 'value' => array('1'), 'andor' => array('and'));
-$settingsCustomSearch3 = array('action' => 'preview', 'product' => 1, 'condition' => 'customSearch', 'field' => array('status'), 'operator' => array('='), 'value' => array('doing'), 'andor' => array('and'));
-$settingsCustomSearch4 = array('action' => 'preview', 'product' => 1, 'condition' => 'customSearch', 'field' => array('type'), 'operator' => array('='), 'value' => array('bug'), 'andor' => array('and'));
-$settingsNoProduct = array('action' => 'preview', 'product' => 999, 'condition' => 'customSearch', 'field' => array('status'), 'operator' => array('='), 'value' => array('wait'), 'andor' => array('and'));
-
-r(count($docTest->previeweicketTest('setting', $settingsCustomSearch1, '')['data'])) && p() && e('3'); // 步骤1:customSearch条件预览工单列表,status=wait
-r(count($docTest->previeweicketTest('setting', $settingsCustomSearch2, '')['data'])) && p() && e('2'); // 步骤2:customSearch条件预览工单列表,pri=1
-r(count($docTest->previeweicketTest('setting', $settingsCustomSearch3, '')['data'])) && p() && e('2'); // 步骤3:customSearch条件预览工单列表,status=doing
-r(count($docTest->previeweicketTest('setting', $settingsCustomSearch4, '')['data'])) && p() && e('5'); // 步骤4:customSearch条件预览工单列表,type=bug
-r(count($docTest->previeweicketTest('setting', $settingsNoProduct, '')['data'])) && p() && e('0'); // 步骤5:不存在的product
\ No newline at end of file
diff --git a/module/editor/test/zen/buildcontentbyaction.php b/module/editor/test/zen/buildcontentbyaction.php
deleted file mode 100755
index b7f0949e7f..0000000000
--- a/module/editor/test/zen/buildcontentbyaction.php
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env php
-buildContentByActionTest('', 'edit', '')) && p() && e('0');
-r($editorTest->buildContentByActionTest('/tmp/test_php_file.php', 'edit', '')) && p() && e("buildContentByActionTest('/tmp/test_php_file.php', 'override', '')) && p() && e('~~');
-r($editorTest->buildContentByActionTest('/tmp/newfile.php', 'unknown', '')) && p() && e("buildContentByActionTest('/tmp/newfile.txt', 'unknown', '')) && p() && e('~~');
-r($editorTest->buildContentByActionTest('', 'extendModel', '')) && p() && e("buildContentByActionTest('/tmp/nonexistent.txt', 'edit', '')) && p() && e('~~');
\ No newline at end of file
diff --git a/module/execution/test/zen/buildexecutionforcreate.php b/module/execution/test/zen/buildexecutionforcreate.php
deleted file mode 100755
index 3dc874eaab..0000000000
--- a/module/execution/test/zen/buildexecutionforcreate.php
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env php
-loadYaml('project_buildexecutionforcreate', false, 2)->gen(10);
-zenData('user')->gen(5);
-
-su('admin');
-
-$executionzenTest = new executionZenTest();
-
-unset($_POST);
-r($executionzenTest->buildExecutionForCreateTest()) && p('project') && e('所属项目不能为空。');
-
-$_POST['project'] = 1;
-$_POST['name'] = '测试执行1';
-$_POST['code'] = 'TEST001';
-$_POST['begin'] = '2024-01-01';
-$_POST['end'] = '2024-06-30';
-$_POST['acl'] = 'private';
-$_POST['heightType'] = 'default';
-$_POST['displayCards'] = 5;
-r($executionzenTest->buildExecutionForCreateTest()) && p('openedBy') && e('admin');
-
-$_POST['project'] = 2;
-$_POST['name'] = '测试执行2';
-$_POST['code'] = 'TEST002';
-$_POST['parent'] = 2;
-$_POST['begin'] = '2024-02-01';
-$_POST['end'] = '2024-05-31';
-$_POST['acl'] = 'private';
-$_POST['heightType'] = 'default';
-$_POST['displayCards'] = 5;
-r($executionzenTest->buildExecutionForCreateTest()) && p('parent') && e('2');
-
-$_POST['project'] = 3;
-$_POST['name'] = '测试执行3';
-$_POST['code'] = 'TEST003';
-$_POST['begin'] = '2024-03-01';
-$_POST['end'] = '2024-08-31';
-$_POST['acl'] = 'open';
-$_POST['heightType'] = 'default';
-$_POST['displayCards'] = 5;
-unset($_POST['parent']);
-r($executionzenTest->buildExecutionForCreateTest()) && p('whitelist') && e('');
-
-$_POST['project'] = 4;
-$_POST['name'] = '测试执行4';
-$_POST['code'] = 'TEST004';
-$_POST['begin'] = '2024-04-01';
-$_POST['end'] = '2024-09-30';
-$_POST['acl'] = 'private';
-$_POST['heightType'] = 'auto';
-$_POST['displayCards'] = 10;
-r($executionzenTest->buildExecutionForCreateTest()) && p('displayCards') && e('0');
\ No newline at end of file
diff --git a/module/execution/test/zen/buildexecutionkanbandata.php b/module/execution/test/zen/buildexecutionkanbandata.php
deleted file mode 100755
index 7e7ad69b31..0000000000
--- a/module/execution/test/zen/buildexecutionkanbandata.php
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env php
-loadYaml('zt_project_buildexecutionkanbandata', false, 2)->gen(10);
-zendata('team')->loadYaml('zt_team_buildexecutionkanbandata', false, 2)->gen(15);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$executionTest = new executionZenTest();
-
-// 准备测试数据
-$projectIdList1 = array(1, 2, 3);
-$executions1 = array();
-for($i = 4; $i <= 10; $i++) {
- $execution = new stdClass();
- $execution->id = $i;
- $execution->project = ($i <= 6) ? 1 : (($i <= 8) ? 2 : 3);
- $execution->status = ($i <= 5) ? 'wait' : (($i <= 7) ? 'doing' : (($i == 8) ? 'suspended' : 'closed'));
- $execution->closedDate = ($execution->status == 'closed') ? '2023-01-0' . ($i - 8) : '';
- $executions1[] = $execution;
-}
-
-$projectIdList2 = array();
-$executions2 = $executions1;
-
-$projectIdList3 = array(1, 2);
-$executions3 = array();
-
-$projectIdList4 = array(1, 2);
-$executions4 = array();
-for($i = 4; $i <= 7; $i++) {
- $execution = new stdClass();
- $execution->id = $i;
- $execution->project = ($i <= 5) ? 1 : 2;
- $execution->status = ($i == 4) ? 'wait' : (($i == 5) ? 'doing' : (($i == 6) ? 'suspended' : 'closed'));
- $execution->closedDate = ($execution->status == 'closed') ? '2023-01-01' : '';
- $executions4[] = $execution;
-}
-
-$projectIdList5 = array(1);
-$executions5 = array();
-for($i = 4; $i <= 8; $i++) {
- $execution = new stdClass();
- $execution->id = $i;
- $execution->project = 1;
- $execution->status = 'closed';
- $execution->closedDate = '2023-01-0' . ($i - 3);
- $executions5[] = $execution;
-}
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($executionTest->buildExecutionKanbanDataTest($projectIdList1, $executions1)) && p('0') && e('0'); // 步骤1:正常情况测试返回数组结构
-r($executionTest->buildExecutionKanbanDataTest($projectIdList2, $executions2)) && p('0') && e('0'); // 步骤2:空项目列表返回项目计数
-r($executionTest->buildExecutionKanbanDataTest($projectIdList3, $executions3)) && p('0') && e('0'); // 步骤3:空执行列表返回项目计数
-r($executionTest->buildExecutionKanbanDataTest($projectIdList4, $executions4)) && p('0') && e('0'); // 步骤4:多状态数据返回项目计数
-r($executionTest->buildExecutionKanbanDataTest($projectIdList5, $executions5)) && p('0') && e('0'); // 步骤5:已关闭执行数据返回项目计数
\ No newline at end of file
diff --git a/module/execution/test/zen/correcterrorlang.php b/module/execution/test/zen/correcterrorlang.php
deleted file mode 100755
index 8b0391772b..0000000000
--- a/module/execution/test/zen/correcterrorlang.php
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env php
-correctErrorLangTest('')) && p('execution_team,error_unique') && e('团队成员,『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台-系统设置-回收站还原。'); // 步骤1:基础语言修正功能测试
-r($executionTest->correctErrorLangTest('project')) && p('project_name,project_code') && e('项目名称,项目代号'); // 步骤2:project tab下语言替换测试
-r($executionTest->correctErrorLangTest('execution')) && p('project_name,project_code') && e('项目名称,项目代号'); // 步骤3:非project tab下语言替换测试
-r($executionTest->correctErrorLangTest('project')) && p('execution_team,error_unique') && e('团队成员,『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台-系统设置-回收站还原。'); // 步骤4:requiredFields语言重新定义测试
-r($executionTest->correctErrorLangTest('')) && p('execution_team,error_unique') && e('团队成员,『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台-系统设置-回收站还原。'); // 步骤5:空配置时的安全处理测试
-r($executionTest->correctErrorLangTest('other')) && p('execution_team,error_unique') && e('团队成员,『%s』已经有『%s』这条记录了。如果您确定该记录已删除,请到后台-系统设置-回收站还原。'); // 步骤6:其他场景的语言修正测试
\ No newline at end of file
diff --git a/module/execution/test/zen/getimportbugs.php b/module/execution/test/zen/getimportbugs.php
deleted file mode 100755
index 1ba07fc25d..0000000000
--- a/module/execution/test/zen/getimportbugs.php
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env php
-loadYaml('zt_bug_getimportbugs', false, 2)->gen(10);
-
-$product = zenData('product');
-$product->id->range('1-3');
-$product->name->range('产品1,产品2,产品3');
-$product->status->range('normal');
-$product->gen(3);
-
-$project = zenData('project');
-$project->id->range('1-5');
-$project->type->range('project{1},sprint{4}');
-$project->name->range('项目1,执行1,执行2,执行3,执行4');
-$project->status->range('doing');
-$project->parent->range('0,1,1,1,1');
-$project->gen(5);
-
-$projectProduct = zenData('projectproduct');
-$projectProduct->project->range('2');
-$projectProduct->product->range('1,2,3');
-$projectProduct->branch->range('0');
-$projectProduct->gen(3);
-
-zenData('user')->gen(5);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$executionZenTest = new executionZenTest();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($executionZenTest->getImportBugsTest(2, array(1, 2), 'all', 0)) && p() && e('6'); // 步骤1:正常浏览模式获取产品1和2的bugs
-r($executionZenTest->getImportBugsTest(2, array(1), 'all', 0)) && p() && e('3'); // 步骤2:正常浏览模式获取产品1的bugs
-r($executionZenTest->getImportBugsTest(2, array(3), 'all', 0)) && p() && e('3'); // 步骤3:正常浏览模式获取产品3的bugs
-r($executionZenTest->getImportBugsTest(2, array(), 'all', 0)) && p() && e('0'); // 步骤4:正常浏览模式获取空产品列表的bugs
-r($executionZenTest->getImportBugsTest(2, array(1, 2), 'all', 0)) && p() && e('6'); // 步骤5:验证返回bug数量与预期相符
\ No newline at end of file
diff --git a/module/execution/test/zen/getprintkanbandata.php b/module/execution/test/zen/getprintkanbandata.php
deleted file mode 100755
index 90d62ed3ac..0000000000
--- a/module/execution/test/zen/getprintkanbandata.php
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env php
- Array
-- 步骤4:执行ID为0的边界情况返回数组 @(
-- 步骤5:不同执行ID情况返回数组 @)
-
-*/
-
-// 1. 导入依赖
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/executionzen.unittest.class.php';
-
-// 2. zendata数据准备 - 移除数据生成,用实际数据测试
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$executionZenTest = new executionZenTest();
-
-// 5. 测试步骤
-$emptyStories = array();
-$stories = array('story1', 'story2');
-
-r($executionZenTest->getPrintKanbanDataTest(1, $stories)) && p() && e('Array'); // 步骤1:正常执行ID和故事数据返回数组
-r($executionZenTest->getPrintKanbanDataTest(1, $emptyStories)) && p() && e('('); // 步骤2:空故事数组情况返回数组
-r($executionZenTest->getPrintKanbanDataTest(999, $stories)) && p() && e('[0] => Array'); // 步骤3:无效执行ID情况返回数组
-r($executionZenTest->getPrintKanbanDataTest(0, $stories)) && p() && e('('); // 步骤4:执行ID为0的边界情况返回数组
-r($executionZenTest->getPrintKanbanDataTest(2, $stories)) && p() && e(')'); // 步骤5:不同执行ID情况返回数组
\ No newline at end of file
diff --git a/module/extension/test/zen/backupdb.php b/module/extension/test/zen/backupdb.php
deleted file mode 100755
index 129757296b..0000000000
--- a/module/extension/test/zen/backupdb.php
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env php
-rawModule = 'extension';
-$app->rawMethod = 'browse';
-
-/* 准备测试环境 */
-$extensionRoot = $app->getExtensionRoot();
-$pkgRoot = $extensionRoot . 'pkg' . DS;
-
-/* 创建测试插件目录 */
-if(!is_dir($pkgRoot)) mkdir($pkgRoot, 0777, true);
-
-/* 测试用例1: 正常插件的备份,使用真实存在的表user */
-$testExt1 = 'testplugin1';
-$testExt1Dir = $pkgRoot . $testExt1;
-if(!is_dir($testExt1Dir)) mkdir($testExt1Dir, 0777, true);
-if(!is_dir($testExt1Dir . DS . 'db')) mkdir($testExt1Dir . DS . 'db', 0777, true);
-file_put_contents($testExt1Dir . DS . 'db' . DS . 'uninstall.sql', "DROP TABLE IF EXISTS `zt_user`;");
-
-/* 测试用例2: uninstall.sql只包含注释 */
-$testExt2 = 'testplugin2';
-$testExt2Dir = $pkgRoot . $testExt2;
-if(!is_dir($testExt2Dir)) mkdir($testExt2Dir, 0777, true);
-if(!is_dir($testExt2Dir . DS . 'db')) mkdir($testExt2Dir . DS . 'db', 0777, true);
-file_put_contents($testExt2Dir . DS . 'db' . DS . 'uninstall.sql', "-- Only comments\n-- No drop or delete");
-
-/* 测试用例3: 空的uninstall.sql */
-$testExt3 = 'testplugin3';
-$testExt3Dir = $pkgRoot . $testExt3;
-if(!is_dir($testExt3Dir)) mkdir($testExt3Dir, 0777, true);
-if(!is_dir($testExt3Dir . DS . 'db')) mkdir($testExt3Dir . DS . 'db', 0777, true);
-file_put_contents($testExt3Dir . DS . 'db' . DS . 'uninstall.sql', "");
-
-/* 测试用例4: 包含多个真实表 */
-$testExt4 = 'testplugin4';
-$testExt4Dir = $pkgRoot . $testExt4;
-if(!is_dir($testExt4Dir)) mkdir($testExt4Dir, 0777, true);
-if(!is_dir($testExt4Dir . DS . 'db')) mkdir($testExt4Dir . DS . 'db', 0777, true);
-file_put_contents($testExt4Dir . DS . 'db' . DS . 'uninstall.sql', "DROP TABLE IF EXISTS `zt_user`;\nDROP TABLE IF EXISTS `zt_config`;");
-
-/* 测试用例5: 没有DROP TABLE语句 */
-$testExt5 = 'testplugin5';
-$testExt5Dir = $pkgRoot . $testExt5;
-if(!is_dir($testExt5Dir)) mkdir($testExt5Dir, 0777, true);
-if(!is_dir($testExt5Dir . DS . 'db')) mkdir($testExt5Dir . DS . 'db', 0777, true);
-file_put_contents($testExt5Dir . DS . 'db' . DS . 'uninstall.sql', "-- Comment only");
-
-$extensionTest = new extensionZenTest();
-
-r($extensionTest->backupDBTest($testExt1)) && p() && e('testplugin1.20251109.sql');
-r($extensionTest->backupDBTest($testExt2)) && p() && e('0');
-r($extensionTest->backupDBTest($testExt3)) && p() && e('0');
-r($extensionTest->backupDBTest($testExt4)) && p() && e('testplugin4.20251109.sql');
-r($extensionTest->backupDBTest($testExt5)) && p() && e('0');
\ No newline at end of file
diff --git a/module/extension/test/zen/copypackagefiles.php b/module/extension/test/zen/copypackagefiles.php
deleted file mode 100755
index 00b9be703b..0000000000
--- a/module/extension/test/zen/copypackagefiles.php
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env php
- 0 @1
-- 执行$md5Len @32
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/zen.class.php';
-
-su('admin');
-
-global $tester, $app, $config;
-$app->rawModule = 'extension';
-$app->rawMethod = 'browse';
-
-$extensionTest = new extensionZenTest();
-
-// 获取测试路径
-$extensionModel = $tester->loadModel('extension');
-$pkgRoot = $extensionModel->pkgRoot;
-
-// 步骤1: 测试空插件包目录
-$ext1 = 'test_empty_pkg';
-$dir1 = $pkgRoot . $ext1 . DS;
-if(!is_dir($dir1)) mkdir($dir1, 0777, true);
-$result1 = $extensionTest->copyPackageFilesTest($ext1);
-r(is_array($result1)) && p() && e('1');
-if(is_dir($dir1)) rmdir($dir1);
-
-// 步骤2: 测试只有db目录的插件包
-$ext2 = 'test_db_pkg';
-$dir2 = $pkgRoot . $ext2 . DS;
-$dbDir2 = $dir2 . 'db' . DS;
-if(!is_dir($dbDir2)) mkdir($dbDir2, 0777, true);
-file_put_contents($dbDir2 . 'test.sql', 'SQL');
-$result2 = $extensionTest->copyPackageFilesTest($ext2);
-r(count($result2)) && p() && e('0');
-if(file_exists($dbDir2 . 'test.sql')) unlink($dbDir2 . 'test.sql');
-if(is_dir($dbDir2)) rmdir($dbDir2);
-if(is_dir($dir2)) rmdir($dir2);
-
-// 步骤3: 测试只有doc目录的插件包
-$ext3 = 'test_doc_pkg';
-$dir3 = $pkgRoot . $ext3 . DS;
-$docDir3 = $dir3 . 'doc' . DS;
-if(!is_dir($docDir3)) mkdir($docDir3, 0777, true);
-file_put_contents($docDir3 . 'readme.md', 'README');
-$result3 = $extensionTest->copyPackageFilesTest($ext3);
-r(count($result3)) && p() && e('0');
-if(file_exists($docDir3 . 'readme.md')) unlink($docDir3 . 'readme.md');
-if(is_dir($docDir3)) rmdir($docDir3);
-if(is_dir($dir3)) rmdir($dir3);
-
-// 步骤4: 测试包含module文件的插件包
-$ext4 = 'test_module_pkg';
-$dir4 = $pkgRoot . $ext4 . DS;
-$modDir4 = $dir4 . 'module' . DS . 'testcopy' . DS;
-if(!is_dir($modDir4)) mkdir($modDir4, 0777, true);
-file_put_contents($modDir4 . 'test.php', 'copyPackageFilesTest($ext4);
-r(count($result4) > 0) && p() && e('1');
-$targetDir4 = $app->getAppRoot() . 'module' . DS . 'testcopy' . DS;
-if(file_exists($targetDir4 . 'test.php')) unlink($targetDir4 . 'test.php');
-if(is_dir($targetDir4)) rmdir($targetDir4);
-if(file_exists($modDir4 . 'test.php')) unlink($modDir4 . 'test.php');
-if(is_dir($modDir4)) rmdir($modDir4);
-if(is_dir($dir4 . 'module')) rmdir($dir4 . 'module');
-if(is_dir($dir4)) rmdir($dir4);
-
-// 步骤5: 测试返回值MD5格式
-$ext5 = 'test_md5_pkg';
-$dir5 = $pkgRoot . $ext5 . DS;
-$cfgDir5 = $dir5 . 'config' . DS;
-if(!is_dir($cfgDir5)) mkdir($cfgDir5, 0777, true);
-file_put_contents($cfgDir5 . 'test.php', 'copyPackageFilesTest($ext5);
-$md5Len = 0;
-foreach($result5 as $file => $md5) { $md5Len = strlen($md5); break; }
-r($md5Len) && p() && e('32');
-$targetCfg5 = $app->getAppRoot() . 'config' . DS;
-foreach($result5 as $file => $md5) if(file_exists($file)) unlink($file);
-if(file_exists($cfgDir5 . 'test.php')) unlink($cfgDir5 . 'test.php');
-if(is_dir($cfgDir5)) rmdir($cfgDir5);
-if(is_dir($dir5)) rmdir($dir5);
\ No newline at end of file
diff --git a/module/gitlab/test/zen/getgroupmemberdata.php b/module/gitlab/test/zen/getgroupmemberdata.php
deleted file mode 100755
index 5d8f68a73b..0000000000
--- a/module/gitlab/test/zen/getgroupmemberdata.php
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$member1->access_level = 30;
-$member1->expires_at = '2025-12-31';
-
-$member2 = new stdClass();
-$member2->id = 2;
-$member2->access_level = 40;
-$member2->expires_at = '2025-12-31';
-
-$member3 = new stdClass();
-$member3->id = 3;
-$member3->access_level = 50;
-$member3->expires_at = '2025-12-31';
-
-$member2Updated = new stdClass();
-$member2Updated->id = 2;
-$member2Updated->access_level = 50;
-$member2Updated->expires_at = '2025-12-31';
-
-r($gitlabTest->getGroupMemberDataTest(array($member1), array(1 => $member1, 2 => $member2))) && p('0:0:user_id') && e('2');
-r($gitlabTest->getGroupMemberDataTest(array($member1), array(1 => $member1, 2 => $member2))) && p('0:0:access_level') && e('40');
-r($gitlabTest->getGroupMemberDataTest(array($member1), array(1 => $member1, 2 => $member2))) && p('0:0:expires_at') && e('2025-12-31');
-r($gitlabTest->getGroupMemberDataTest(array($member1, $member2), array(1 => $member1, 2 => $member2Updated))) && p('2:0:user_id') && e('2');
-r($gitlabTest->getGroupMemberDataTest(array($member1, $member2), array(1 => $member1, 2 => $member2Updated))) && p('2:0:access_level') && e('50');
-r($gitlabTest->getGroupMemberDataTest(array($member1, $member2), array(2 => $member2Updated, 3 => $member3))) && p('0:0:user_id') && e('3');
-r($gitlabTest->getGroupMemberDataTest(array($member1, $member2), array(2 => $member2Updated, 3 => $member3))) && p('1:0') && e('1');
\ No newline at end of file
diff --git a/module/gitlab/test/zen/getprojectmemberdata.php b/module/gitlab/test/zen/getprojectmemberdata.php
deleted file mode 100755
index 617132b817..0000000000
--- a/module/gitlab/test/zen/getprojectmemberdata.php
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env php
-setMethodName('test');
-
-$gitlabTest = new gitlabZenTest();
-
-/* 准备测试数据 */
-$member1 = new stdClass();
-$member1->id = 1;
-$member1->access_level = 30;
-$member1->expires_at = '2025-12-31';
-
-$member2 = new stdClass();
-$member2->id = 2;
-$member2->access_level = 40;
-$member2->expires_at = '2025-12-31';
-
-$member3 = new stdClass();
-$member3->id = 3;
-$member3->access_level = 50;
-$member3->expires_at = '2025-12-31';
-
-$member2Updated = new stdClass();
-$member2Updated->id = 2;
-$member2Updated->access_level = 50;
-$member2Updated->expires_at = '2025-12-31';
-
-/* 准备绑定用户和账号数据 */
-$bindedUsers = array('user1' => 1, 'user2' => 2);
-$accounts = array('user1', 'user2');
-$originalUsers = array('user1', 'user2');
-
-r($gitlabTest->getProjectMemberDataTest(array($member1), array(1 => $member1, 2 => $member2), $bindedUsers, $accounts, $originalUsers)) && p('0:0:user_id') && e('2');
-r($gitlabTest->getProjectMemberDataTest(array($member1), array(1 => $member1, 2 => $member2), $bindedUsers, $accounts, $originalUsers)) && p('0:0:access_level') && e('40');
-r($gitlabTest->getProjectMemberDataTest(array($member1), array(1 => $member1, 2 => $member2), $bindedUsers, $accounts, $originalUsers)) && p('0:0:expires_at') && e('2025-12-31');
-r($gitlabTest->getProjectMemberDataTest(array($member1, $member2), array(1 => $member1, 2 => $member2Updated), $bindedUsers, $accounts, $originalUsers)) && p('2:0:user_id') && e('2');
-r($gitlabTest->getProjectMemberDataTest(array($member1, $member2), array(1 => $member1, 2 => $member2Updated), $bindedUsers, $accounts, $originalUsers)) && p('2:0:access_level') && e('50');
-r($gitlabTest->getProjectMemberDataTest(array($member1, $member2), array(1 => $member1), array('user1' => 1, 'user2' => 2), array('user1'), array('user1', 'user2'))) && p('1:0') && e('2');
-r($gitlabTest->getProjectMemberDataTest(array($member1, $member2), array(2 => $member2Updated, 3 => $member3), array('user1' => 1, 'user2' => 2), array('user2'), array('user1', 'user2'))) && p('0:0:user_id') && e('3');
-r($gitlabTest->getProjectMemberDataTest(array($member1, $member2), array(2 => $member2Updated, 3 => $member3), array('user1' => 1, 'user2' => 2), array('user2'), array('user1', 'user2'))) && p('1:0') && e('1');
\ No newline at end of file
diff --git a/module/group/test/zen/manageprivbymodule.php b/module/group/test/zen/manageprivbymodule.php
deleted file mode 100755
index dccc5cebe0..0000000000
--- a/module/group/test/zen/manageprivbymodule.php
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env php
-loadYaml('group_manageprivbygroup', false, 2)->gen(5);
-zenData('grouppriv')->loadYaml('grouppriv_manageprivbygroup', false, 2)->gen(20);
-
-su('admin');
-
-$groupZenTest = new groupZenTest();
-
-r($groupZenTest->managePrivByModuleTest()) && p('title,groups,subsets,packages,privs') && e('string,5,76,76,18'); // 步骤1:正常情况下调用方法,验证返回的视图数据结构完整性
-r($groupZenTest->managePrivByModuleTest()) && p('title') && e('string'); // 步骤2:验证返回的title字段包含正确的字符串类型
-r($groupZenTest->managePrivByModuleTest()) && p('groups') && e('5'); // 步骤3:验证返回的groups字段返回组数量
-r($groupZenTest->managePrivByModuleTest()) && p('subsets') && e('76'); // 步骤4:验证返回的subsets字段是数组且包含子集信息
-r($groupZenTest->managePrivByModuleTest()) && p('packages') && e('76'); // 步骤5:验证返回的packages字段是数组且包含包信息
-r($groupZenTest->managePrivByModuleTest()) && p('privs') && e('18'); // 步骤6:验证返回的privs字段是数组且包含权限信息
\ 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 a07d628b52..0000000000
--- a/module/instance/test/model/installationsettingsmap.php
+++ /dev/null
@@ -1,176 +0,0 @@
-#!/usr/bin/env php
-account->range('admin,user1,user2');
-$user->password->range('123456{3}');
-$user->role->range('admin,qa,dev');
-$user->deleted->range('0{3}');
-$user->gen(3);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$instanceTest = new instanceModelTest();
-
-// 准备测试数据
-// 测试1: 自定义域名配置
-$customData1 = new stdclass();
-$customData1->customDomain = 'testapp';
-$customData1->customName = 'Test App';
-$customData1->dbType = 'unsharedDB';
-$customData1->dbService = '';
-
-$dbInfo1 = new stdclass();
-$dbInfo1->name = 'mysql-service';
-$dbInfo1->namespace = 'default';
-$dbInfo1->host = 'mysql.default.svc';
-$dbInfo1->port = 3306;
-
-$instance1 = new stdclass();
-$instance1->id = 1;
-$instance1->chart = 'zentao';
-$instance1->source = 'cloud';
-
-// 测试2: devops应用配置
-$customData2 = new stdclass();
-$customData2->customDomain = '';
-$customData2->customName = 'Gitea';
-$customData2->dbType = 'unsharedDB';
-$customData2->dbService = '';
-
-$dbInfo2 = new stdclass();
-$dbInfo2->name = 'mysql-service';
-$dbInfo2->namespace = 'default';
-$dbInfo2->host = 'mysql.default.svc';
-$dbInfo2->port = 3306;
-
-$instance2 = new stdclass();
-$instance2->id = 2;
-$instance2->chart = 'gitea';
-$instance2->source = 'cloud';
-
-// 测试3: 测试nexus3应用
-$customData3 = new stdclass();
-$customData3->customDomain = 'nexus';
-$customData3->customName = 'Nexus3';
-$customData3->dbType = 'unsharedDB';
-$customData3->dbService = '';
-
-$dbInfo3 = new stdclass();
-$dbInfo3->name = 'mysql-service';
-$dbInfo3->namespace = 'default';
-$dbInfo3->host = 'mysql.default.svc';
-$dbInfo3->port = 3306;
-
-$instance3 = new stdclass();
-$instance3->id = 3;
-$instance3->chart = 'nexus3';
-$instance3->source = 'cloud';
-
-// 测试4: 测试自定义域名和ingress.host字段
-$customData4 = new stdclass();
-$customData4->customDomain = 'customhost';
-$customData4->customName = 'Custom Host Test';
-$customData4->dbType = 'unsharedDB';
-$customData4->dbService = '';
-
-$dbInfo4 = new stdclass();
-$dbInfo4->name = 'mysql-service';
-$dbInfo4->namespace = 'default';
-$dbInfo4->host = 'mysql.default.svc';
-$dbInfo4->port = 3306;
-
-$instance4 = new stdclass();
-$instance4->id = 4;
-$instance4->chart = 'zentao';
-$instance4->source = 'cloud';
-
-// 测试5: 测试sonarqube应用
-$customData5 = new stdclass();
-$customData5->customDomain = 'sonar';
-$customData5->customName = 'SonarQube';
-$customData5->dbType = 'unsharedDB';
-$customData5->dbService = '';
-
-$dbInfo5 = new stdclass();
-$dbInfo5->name = 'mysql-service';
-$dbInfo5->namespace = 'default';
-$dbInfo5->host = 'mysql.default.svc';
-$dbInfo5->port = 3306;
-
-$instance5 = new stdclass();
-$instance5->id = 5;
-$instance5->chart = 'sonarqube';
-$instance5->source = 'cloud';
-
-// 测试6: gitlab应用
-$customData6 = new stdclass();
-$customData6->customDomain = 'gitlab';
-$customData6->customName = 'GitLab';
-$customData6->dbType = 'unsharedDB';
-$customData6->dbService = '';
-
-$dbInfo6 = new stdclass();
-$dbInfo6->name = 'mysql-service';
-$dbInfo6->namespace = 'default';
-$dbInfo6->host = 'mysql.default.svc';
-$dbInfo6->port = 3306;
-
-$instance6 = new stdclass();
-$instance6->id = 6;
-$instance6->chart = 'gitlab';
-$instance6->source = 'cloud';
-
-// 测试7: jenkins应用
-$customData7 = new stdclass();
-$customData7->customDomain = 'jenkins';
-$customData7->customName = 'Jenkins';
-$customData7->dbType = 'unsharedDB';
-$customData7->dbService = '';
-
-$dbInfo7 = new stdclass();
-$dbInfo7->name = 'mysql-service';
-$dbInfo7->namespace = 'default';
-$dbInfo7->host = 'mysql.default.svc';
-$dbInfo7->port = 3306;
-
-$instance7 = new stdclass();
-$instance7->id = 7;
-$instance7->chart = 'jenkins';
-$instance7->source = 'cloud';
-
-// 5. 执行测试步骤
-r($instanceTest->installationSettingsMapTest($customData1, $dbInfo1, $instance1)) && p('ingress:enabled') && e('1'); // 步骤1:自定义域名配置测试
-r($instanceTest->installationSettingsMapTest($customData2, $dbInfo2, $instance2)) && p('ci:enabled') && e('1'); // 步骤2:devops应用(gitea)配置测试
-r($instanceTest->installationSettingsMapTest($customData3, $dbInfo3, $instance3)) && p('ci:enabled') && e('1'); // 步骤3:nexus3应用配置测试
-r($instanceTest->installationSettingsMapTest($customData4, $dbInfo4, $instance4)) && p('ingress:host') && e('customhost.dev.haogs.cn'); // 步骤4:自定义域名host字段测试
-r($instanceTest->installationSettingsMapTest($customData5, $dbInfo5, $instance5)) && p('ingress:enabled') && e('1'); // 步骤5:sonarqube应用ingress配置测试
-r($instanceTest->installationSettingsMapTest($customData5, $dbInfo5, $instance5)) && p('ci:enabled') && e('1'); // 步骤6:sonarqube应用ci配置测试
-r($instanceTest->installationSettingsMapTest($customData6, $dbInfo6, $instance6)) && p('ingress:enabled') && e('1'); // 步骤7:gitlab应用ingress配置测试
-r($instanceTest->installationSettingsMapTest($customData6, $dbInfo6, $instance6)) && p('ci:enabled') && e('1'); // 步骤8:gitlab应用ci配置测试
-r($instanceTest->installationSettingsMapTest($customData7, $dbInfo7, $instance7)) && p('ci:enabled') && e('1'); // 步骤9:jenkins应用ci配置测试
\ 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 ff2f35d8b5..0000000000
--- a/module/instance/test/model/stop.php
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$instanceTable->name->range('test-app{5}');
-$instanceTable->k8name->range('test-k8-{5}');
-$instanceTable->chart->range('zentao,gitlab,jenkins,sonar,mysql');
-$instanceTable->status->range('running{2},abnormal{1},stopped{1},starting{1}');
-$instanceTable->channel->range('stable{5}');
-$instanceTable->space->range('1-5');
-$instanceTable->deleted->range('0{5}');
-$instanceTable->gen(5);
-
-$spaceTable = zenData('space');
-$spaceTable->id->range('1-5');
-$spaceTable->k8space->range('default,test-space,dev-space,prod-space,staging-space');
-$spaceTable->name->range('默认空间,测试空间,开发空间,生产空间,演示空间');
-$spaceTable->deleted->range('0{5}');
-$spaceTable->gen(5);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$instanceTest = new instanceTest();
-
-// 5. 测试步骤(至少5个)
-// 构造测试实例对象
-$runningInstance = new stdclass();
-$runningInstance->id = 1;
-$runningInstance->k8name = 'test-k8-1';
-$runningInstance->chart = 'zentao';
-$runningInstance->channel = 'stable';
-$runningInstance->spaceData = new stdclass();
-$runningInstance->spaceData->k8space = 'default';
-
-$badRequestInstance = new stdclass();
-$badRequestInstance->id = 2;
-$badRequestInstance->k8name = 'test-k8-2';
-$badRequestInstance->chart = 'gitlab';
-$badRequestInstance->channel = 'stable';
-$badRequestInstance->spaceData = new stdclass();
-$badRequestInstance->spaceData->k8space = 'test-space';
-
-$serverErrorInstance = new stdclass();
-$serverErrorInstance->id = 3;
-$serverErrorInstance->k8name = 'test-k8-3';
-$serverErrorInstance->chart = 'jenkins';
-$serverErrorInstance->channel = 'stable';
-$serverErrorInstance->spaceData = new stdclass();
-$serverErrorInstance->spaceData->k8space = 'dev-space';
-
-$notFoundInstance = new stdclass();
-$notFoundInstance->id = 4;
-$notFoundInstance->k8name = 'test-k8-4';
-$notFoundInstance->chart = 'sonar';
-$notFoundInstance->channel = 'stable';
-$notFoundInstance->spaceData = new stdclass();
-$notFoundInstance->spaceData->k8space = 'prod-space';
-
-$stoppedInstance = new stdclass();
-$stoppedInstance->id = 5;
-$stoppedInstance->k8name = 'test-k8-5';
-$stoppedInstance->chart = 'mysql';
-$stoppedInstance->channel = 'stable';
-$stoppedInstance->spaceData = new stdclass();
-$stoppedInstance->spaceData->k8space = 'staging-space';
-
-r($instanceTest->stopTest($runningInstance)) && p('code') && e('200'); // 步骤1:正常停止运行中的实例
-r($instanceTest->stopTest($badRequestInstance)) && p('code') && e('400'); // 步骤2:停止异常状态的实例
-r($instanceTest->stopTest($serverErrorInstance)) && p('code') && e('500'); // 步骤3:停止服务器错误的实例
-r($instanceTest->stopTest($notFoundInstance)) && p('code') && e('404'); // 步骤4:停止不存在的实例
-r($runningInstance->k8name) && p() && e('test-k8-1'); // 步骤5:验证实例k8name属性
\ 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 5416f01319..0000000000
--- a/module/instance/test/zen/storeview.php
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env php
-gen(5);
-zenData('group')->gen(5);
-
-$userGroup = zenData('usergroup');
-$userGroup->account->range('admin,user1,user2');
-$userGroup->group->range('1');
-$userGroup->gen(3);
-
-$groupPriv = zenData('grouppriv');
-$groupPriv->group->range('1');
-$groupPriv->module->range('space');
-$groupPriv->method->range('browse');
-$groupPriv->gen(1);
-
-$space = zenData('space');
-$space->id->range('1-5');
-$space->name->range('Space1,Space2,Space3,Space4,Space5');
-$space->k8space->range('space1,space2,space3,space4,space5');
-$space->deleted->range('0');
-$space->gen(5);
-
-$instance = zenData('instance');
-$instance->id->range('1-5');
-$instance->name->range('Instance1,Instance2,Instance3,DeletedInstance,Instance5');
-$instance->space->range('1-5');
-$instance->appName->range('App1,App2,App3,App4,App5');
-$instance->appID->range('1-5');
-$instance->version->range('1.0,1.1,1.2,1.3,2.0');
-$instance->chart->range('zentao,gitlab,sonarqube,jenkins,zentao');
-$instance->status->range('stopped,stopped,stopped,stopped,running');
-$instance->k8name->range('instance1,instance2,instance3,instance4,instance5');
-$instance->domain->range('app1.test.com,app2.test.com,app3.test.com,app4.test.com,app5.test.com');
-$instance->deleted->range('0{3},1,0');
-$instance->gen(5);
-
-su('admin');
-
-$instanceTest = new instanceZenTest();
-
-r($instanceTest->storeViewTest(999)) && p('result') && e('fail'); // 步骤1:查看不存在的instance实例(ID=999)
-r($instanceTest->storeViewTest(0)) && p('result') && e('fail'); // 步骤2:查看ID为0的instance实例
-r($instanceTest->storeViewTest(4)) && p('result') && e('fail'); // 步骤3:查看已删除的instance实例(ID=4)
-r($instanceTest->storeViewTest(1)) && p('result') && e('fail'); // 步骤4:查看存在但会触发异常的instance实例(ID=1)
-r($instanceTest->storeViewTest(100)) && p('result') && e('fail'); // 步骤5:查看另一个不存在的instance实例(ID=100)
\ 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 443c0ab58e..0000000000
--- a/module/job/test/zen/getcompiledata.php
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env php
-gen(10);
-zenData('story')->gen(20);
-zenData('compile')->gen(10);
-zenData('user')->gen(5);
-
-$testtask = zenData('testtask');
-$testtask->id->range('1-3');
-$testtask->product->range('1,1,2');
-$testtask->gen(3);
-
-zenData('testrun')->gen(15);
-zenData('case')->gen(20);
-zenData('testresult')->gen(15);
-zenData('testsuite')->gen(5);
-zenData('suitecase')->gen(15);
-
-$jobTest = new jobZenTest();
-
-$compile1 = new stdClass();
-$compile1->testtask = 1;
-r($jobTest->getCompileDataTest($compile1)) && p('taskID') && e('1');
-
-$compile2 = new stdClass();
-$compile2->testtask = 2;
-r($jobTest->getCompileDataTest($compile2)) && p('taskID') && e('2');
-
-$compile3 = new stdClass();
-$compile3->testtask = 3;
-r($jobTest->getCompileDataTest($compile3)) && p('taskID') && e('3');
-
-$compile4 = new stdClass();
-$compile4->testtask = 1;
-r($jobTest->getCompileDataTest($compile4)) && p('groupCases') && e('1');
-
-$compile5 = new stdClass();
-$compile5->testtask = 2;
-r($jobTest->getCompileDataTest($compile5)) && p('suites') && e('5');
\ 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 20945359e6..0000000000
--- a/module/kanban/test/tao/getstorycardmenu.php
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env php
-loadYaml('getstorycardmenu/story', false, 2)->gen(10);
-zenData('project')->loadYaml('getstorycardmenu/project', false, 2)->gen(3);
-zenData('user')->loadYaml('getstorycardmenu/user', false, 2)->gen(5);
-
-su('admin');
-
-$kanbanTest = new kanbanTaoTest();
-
-global $tester;
-$execution1 = $tester->dao->select('*')->from(TABLE_EXECUTION)->where('id')->eq(1)->fetch();
-$execution2 = $tester->dao->select('*')->from(TABLE_EXECUTION)->where('id')->eq(2)->fetch();
-$execution3 = $tester->dao->select('*')->from(TABLE_EXECUTION)->where('id')->eq(3)->fetch();
-
-$story1 = $tester->dao->select('*')->from(TABLE_STORY)->where('id')->eq(1)->fetch();
-$story2 = $tester->dao->select('*')->from(TABLE_STORY)->where('id')->eq(2)->fetch();
-$story3 = $tester->dao->select('*')->from(TABLE_STORY)->where('id')->eq(3)->fetch();
-$story4 = $tester->dao->select('*')->from(TABLE_STORY)->where('id')->eq(4)->fetch();
-$story5 = $tester->dao->select('*')->from(TABLE_STORY)->where('id')->eq(5)->fetch();
-$story6 = $tester->dao->select('*')->from(TABLE_STORY)->where('id')->eq(6)->fetch();
-
-r(count($kanbanTest->getStoryCardMenuTest($execution1, array()))) && p() && e('0'); // 步骤1:空story数组输入
-r(count($kanbanTest->getStoryCardMenuTest($execution1, array(3 => $story3)))) && p() && e('1'); // 步骤2:单个active状态story
-r(count($kanbanTest->getStoryCardMenuTest($execution1, array(1 => $story1)))) && p() && e('1'); // 步骤3:draft状态story不能创建任务
-r(count($kanbanTest->getStoryCardMenuTest($execution1, array(2 => $story2)))) && p() && e('1'); // 步骤4:reviewing状态story不能创建任务
-r(count($kanbanTest->getStoryCardMenuTest($execution1, array(5 => $story5)))) && p() && e('1'); // 步骤5:closed状态story不能创建任务
-r(count($kanbanTest->getStoryCardMenuTest($execution3, array(6 => $story6)))) && p() && e('1'); // 步骤6:execution无产品关联不显示unlink
-r(count($kanbanTest->getStoryCardMenuTest($execution1, array(1 => $story1, 3 => $story3, 6 => $story6)))) && p() && e('3'); // 步骤7:多个story返回对应数量菜单
-r(count($kanbanTest->getStoryCardMenuTest($execution2, array(4 => $story4)))) && p() && e('1'); // 步骤8:测试不同stage的story菜单
\ 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 2bc7cdf50d..0000000000
--- a/module/kanban/test/tao/refreshbugcards.php
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$bug->execution->range('101');
-$bug->status->range('active{4},resolved{3},closed{3}');
-$bug->confirmed->range('0,1,1,1,0,1,1,1,1,1');
-$bug->activatedCount->range('0,0,0,1,0,0,0,0,0,0');
-$bug->title->range('Bug title');
-$bug->gen(10);
-
-su('admin');
-
-$kanbanTest = new kanbanTest();
-
-$cardPairs0 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => '');
-$cardPairs1 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => '');
-$cardPairs2 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => '');
-$cardPairs3 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => '');
-$cardPairs4 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => '');
-$cardPairs5 = array('unconfirmed' => '', 'confirmed' => '', 'fixing' => '', 'fixed' => '', 'testing' => '', 'tested' => '', 'closed' => '');
-
-r(count($kanbanTest->refreshBugCardsTest($cardPairs0, 999, ''))) && p() && e('0');
-r($kanbanTest->refreshBugCardsTest($cardPairs1, 101, '')) && p('unconfirmed') && e(',1,');
-r($kanbanTest->refreshBugCardsTest($cardPairs2, 101, '')) && p('confirmed') && e(',2,3,');
-r($kanbanTest->refreshBugCardsTest($cardPairs3, 101, '')) && p('fixing') && e(',4,');
-r($kanbanTest->refreshBugCardsTest($cardPairs4, 101, '')) && p('fixed') && e(',5,6,7,');
-r($kanbanTest->refreshBugCardsTest($cardPairs5, 101, '')) && p('closed') && e(',8,9,10,');
\ 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 804e0758f2..0000000000
--- a/module/kanban/test/tao/refresherurcards.php
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env php
- '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs1 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs2 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs3 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs4 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs5 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs6 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs7 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-$cardPairs8 = array('wait' => '', 'planned' => '', 'projected' => '', 'developing' => '', 'delivering' => '', 'delivered' => '', 'closed' => '');
-
-r(count($kanbanTest->refreshERURCardsTest($cardPairs0, 999, '', 'story'))) && p() && e('7');
-r($kanbanTest->refreshERURCardsTest($cardPairs1, 101, '', 'story')) && p('wait') && e(',2,1,');
-r($kanbanTest->refreshERURCardsTest($cardPairs2, 101, '', 'story')) && p('planned') && e(',3,');
-r($kanbanTest->refreshERURCardsTest($cardPairs3, 101, '', 'story')) && p('projected') && e('~~');
-r($kanbanTest->refreshERURCardsTest($cardPairs4, 101, '', 'story')) && p('developing') && e('~~');
-r($kanbanTest->refreshERURCardsTest($cardPairs5, 101, '', 'story')) && p('delivering') && e('~~');
-r($kanbanTest->refreshERURCardsTest($cardPairs6, 101, '', 'story')) && p('delivered') && e('~~');
-r($kanbanTest->refreshERURCardsTest($cardPairs7, 101, '', 'parentStory')) && p('wait') && e(',10,9,');
-r($kanbanTest->refreshERURCardsTest($cardPairs8, 101, '', 'epic')) && p('wait') && e(',8,7,6,');
\ 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 4ec2775c70..0000000000
--- a/module/kanban/test/tao/refreshstorycards.php
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env php
-id->range('101,999');
-$project->name->range('项目101,项目999');
-$project->type->range('sprint');
-$project->status->range('doing');
-$project->gen(2);
-
-$story = zenData('story');
-$story->id->range('1-10');
-$story->product->range('1');
-$story->status->range('active');
-$story->stage->range('projected{2},designing,designed,developing,developed,testing,tested,verified,closed');
-$story->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10');
-$story->gen(10);
-
-$projectStory = zenData('projectstory');
-$projectStory->project->range('101');
-$projectStory->product->range('1');
-$projectStory->story->range('1-10');
-$projectStory->gen(10);
-
-su('admin');
-
-$kanbanTest = new kanbanTest();
-
-$cardPairs0 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs1 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs2 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs3 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs4 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs5 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs6 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs7 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs8 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-$cardPairs9 = array('backlog' => '', 'ready' => '', 'designing' => '', 'designed' => '', 'developing' => '', 'developed' => '', 'testing' => '', 'tested' => '', 'verified' => '', 'closed' => '');
-
-r(count($kanbanTest->refreshStoryCardsTest($cardPairs0, 999, ''))) && p() && e('10');
-r($kanbanTest->refreshStoryCardsTest($cardPairs1, 101, '')) && p('backlog') && e(',2,');
-r($kanbanTest->refreshStoryCardsTest($cardPairs2, 101, '')) && p('designing') && e('~~');
-r($kanbanTest->refreshStoryCardsTest($cardPairs3, 101, '')) && p('designed') && e(',4,');
-r($kanbanTest->refreshStoryCardsTest($cardPairs4, 101, '')) && p('developing') && e('~~');
-r($kanbanTest->refreshStoryCardsTest($cardPairs5, 101, '')) && p('developed') && e(',6,');
-r($kanbanTest->refreshStoryCardsTest($cardPairs6, 101, '')) && p('testing') && e('~~');
-r($kanbanTest->refreshStoryCardsTest($cardPairs7, 101, '')) && p('tested') && e(',8,');
-r($kanbanTest->refreshStoryCardsTest($cardPairs8, 101, '')) && p('verified') && e('~~');
-r($kanbanTest->refreshStoryCardsTest($cardPairs9, 101, '')) && p('closed') && e(',10,');
\ 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 8ccbf9836a..0000000000
--- a/module/kanban/test/zen/assigncreatevars.php
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env php
-loadYaml('kanbanspace_assigncreatevars', false, 2)->gen(10);
-zendata('kanban')->loadYaml('kanban_assigncreatevars', false, 2)->gen(5);
-zendata('user')->loadYaml('user_assigncreatevars', false, 2)->gen(10);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$kanbanTest = new kanbanTest();
-
-// 5. 测试步骤
-r($kanbanTest->assignCreateVarsTest(1, 'private', 0, '')) && p('spaceID') && e('1'); // 步骤1:正常私有空间创建看板
-r($kanbanTest->assignCreateVarsTest(0, 'public', 0, '')) && p('ownerPairs') && e('10'); // 步骤2:全局空间创建看板
-r($kanbanTest->assignCreateVarsTest(2, 'cooperation', 0, '')) && p('users') && e('10'); // 步骤3:协作空间创建看板
-r($kanbanTest->assignCreateVarsTest(2, 'cooperation', 0, 'copyRegion=1')) && p('copyRegion') && e('1'); // 步骤4:带复制区域参数创建看板
-r($kanbanTest->assignCreateVarsTest(3, 'public', 0, '')) && p('copyRegion') && e('0'); // 步骤5:不带复制区域参数创建看板
\ 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 e2c7ce5967..0000000000
--- a/module/metric/test/model/getdatebydatetype.php
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env php
-getDateByDateTypeTest('day')) && p() && e('2025-10-29');
-r($metricTest->getDateByDateTypeTest('week')) && p() && e('2025-10-05');
-r($metricTest->getDateByDateTypeTest('month')) && p() && e('2024-11-05');
-r($metricTest->getDateByDateTypeTest('year')) && p() && e('2022-11-05');
-r($metricTest->getDateByDateTypeValidationTest('day')) && p() && e('1');
-r($metricTest->getDateByDateTypeValidationTest('week')) && p() && e('1');
-r($metricTest->getDateByDateTypeValidationTest('month')) && p() && e('1');
\ No newline at end of file
diff --git a/module/metric/test/model/getlatestresultbycode.php b/module/metric/test/model/getlatestresultbycode.php
deleted file mode 100755
index e4bbe877ba..0000000000
--- a/module/metric/test/model/getlatestresultbycode.php
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env php
-loadYaml('metriclib_getlatestresultbycode', false, 2);
-$table->gen(50);
-
-// 准备metric表数据
-zenData('metric')->loadYaml('metric', true)->gen(10);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$metricTest = new metricTest();
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($metricTest->getLatestResultByCodeTest('count_of_program')) && p() && e('TypeError: Metric not found or invalid'); // 步骤1:正常获取有效度量代码的最新结果
-r($metricTest->getLatestResultByCodeTest('nonexistent_code')) && p() && e('TypeError: Metric not found or invalid'); // 步骤2:测试不存在的度量代码
-r($metricTest->getLatestResultByCodeTest('')) && p() && e('Exception: '); // 步骤3:测试空字符串代码
-r($metricTest->getLatestResultByCodeTest('count_of_product', array('year' => '2024'))) && p() && e('TypeError: Metric not found or invalid'); // 步骤4:测试传入options参数的情况
-r($metricTest->getLatestResultByCodeTest('count_of_project', array(), null, 'lite')) && p() && e('TypeError: Metric not found or invalid'); // 步骤5:测试不同vision参数的情况
\ 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 c51eff209e..0000000000
--- a/module/metric/test/model/updatemetricfields.php
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env php
-loadYaml('updatemetricfields/metric', false, 2)->gen(10);
-
-su('admin');
-
-$metricTest = new metricTest();
-
-// 测试步骤1: 正常更新单个字段(name)
-$metric1 = new stdClass();
-$metric1->name = '更新后的度量项名称';
-r($metricTest->updateMetricFieldsTest('1', $metric1)) && p() && e('0');
-
-// 测试步骤2: 正常更新多个字段(name和desc)
-$metric2 = new stdClass();
-$metric2->name = '更新后的度量项名称2';
-$metric2->desc = '更新后的度量项描述2';
-r($metricTest->updateMetricFieldsTest('2', $metric2)) && p() && e('0');
-
-// 测试步骤3: 使用空对象更新
-$metric3 = new stdClass();
-r($metricTest->updateMetricFieldsTest('3', $metric3)) && p() && e('Exception:');
-
-// 测试步骤4: 使用不存在的metricID
-$metric4 = new stdClass();
-$metric4->name = '不存在的度量项';
-r($metricTest->updateMetricFieldsTest('999', $metric4)) && p() && e('0');
-
-// 测试步骤5: 更新包含特殊字符的字段
-$metric5 = new stdClass();
-$metric5->name = '特殊字符测试<>&"\'';
-$metric5->desc = '包含特殊字符的描述: ';
-r($metricTest->updateMetricFieldsTest('5', $metric5)) && p() && e('0');
-
-// 测试步骤6: 更新stage字段为released
-$metric6 = new stdClass();
-$metric6->stage = 'released';
-r($metricTest->updateMetricFieldsTest('6', $metric6)) && p() && e('0');
-
-// 测试步骤7: 更新type字段为sql
-$metric7 = new stdClass();
-$metric7->type = 'sql';
-r($metricTest->updateMetricFieldsTest('7', $metric7)) && p() && e('0');
\ 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 84e3eb8229..0000000000
--- a/module/metric/test/zen/getoldmetricinfo.php
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env php
-loadYaml('meas', true)->gen(10);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$metricTest = new metricZenTest();
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r(count($metricTest->getOldMetricInfoZenTest(1))) && p() && e('9'); // 步骤1:测试第1个旧版度量项基本信息字段数量
-r($metricTest->getOldMetricInfoZenTest(1)) && p('scope:name') && e('度量范围'); // 步骤2:测试第1个旧版度量项的scope字段name值
-r($metricTest->getOldMetricInfoZenTest(1)) && p('purpose:name') && e('度量目的'); // 步骤3:测试第1个旧版度量项的purpose字段name值
-r($metricTest->getOldMetricInfoZenTest(1)) && p('code:name') && e('度量项代号'); // 步骤4:测试第1个旧版度量项的code字段name值
-r($metricTest->getOldMetricInfoZenTest(1)) && p('unit:name') && e('度量单位'); // 步骤5:测试第1个旧版度量项的unit字段name值
-r($metricTest->getOldMetricInfoZenTest(1)) && p('collectType:name') && e('收集方式'); // 步骤6:测试第1个旧版度量项的collectType字段name值
-r($metricTest->getOldMetricInfoZenTest(1)) && p('definition:name') && e('度量定义'); // 步骤7:测试第1个旧版度量项的definition字段name值
-r($metricTest->getOldMetricInfoZenTest(1)) && p('sql:name') && e('SQL语句'); // 步骤8:测试第1个旧版度量项的sql字段name值
\ 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 ca2685d9b4..0000000000
--- a/module/my/test/zen/showworkcountnotinopen.php
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/env php
-gen(0);
-zenData('ticket')->gen(0);
-zenData('issue')->gen(0);
-zenData('risk')->gen(0);
-zenData('nc')->gen(0);
-zenData('auditplan')->gen(0);
-zenData('meeting')->gen(0);
-zenData('demand')->gen(0);
-zenData('user')->gen(10);
-zenData('product')->gen(5);
-
-su('admin');
-
-$myTest = new myZenTest();
-
-$emptyCount = array('task' => 0, 'story' => 0, 'bug' => 0, 'case' => 0, 'testtask' => 0, 'requirement' => 0, 'issue' => 0, 'risk' => 0, 'qa' => 0, 'meeting' => 0, 'ticket' => 0, 'feedback' => 0);
-$nonEmptyCount = array('task' => 5, 'story' => 3, 'bug' => 2);
-
-r($myTest->showWorkCountNotInOpenTest($emptyCount)) && p('isBiz') && e('0'); // 测试开源版(open)下空count数组
-r($myTest->showWorkCountNotInOpenTest($emptyCount)) && p('isMax') && e('0'); // 测试开源版(open)下空count数组的isMax
-r($myTest->showWorkCountNotInOpenTest($emptyCount)) && p('isIPD') && e('0'); // 测试开源版(open)下空count数组的isIPD
-r($myTest->showWorkCountNotInOpenTest($emptyCount)) && p('feedback') && e('0'); // 测试开源版(open)下feedback计数为0
-r($myTest->showWorkCountNotInOpenTest($nonEmptyCount)) && p('task') && e('5'); // 测试非空count数组保留原有task计数
-r($myTest->showWorkCountNotInOpenTest($nonEmptyCount)) && p('story') && e('3'); // 测试非空count数组保留原有story计数
-r($myTest->showWorkCountNotInOpenTest($nonEmptyCount)) && p('bug') && e('2'); // 测试非空count数组保留原有bug计数
\ 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 77c9becf25..0000000000
--- a/module/pivot/test/tao/getexecutionlist.php
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env php
-id->range('1-20');
-$task->project->range('1{4},2{4},3{4},4{4},5{4}');
-$task->execution->range('6{4},7{4},8{4},9{4},10{4}');
-$task->parent->range('0');
-$task->status->range('wait{4},doing{6},done{10}');
-$task->estimate->range('1{4},2{4},4{4},8{4},16{4}');
-$task->consumed->range('0.5{4},1{4},2{4},4{4},8{4}');
-$task->deleted->range('0');
-$task->gen(20);
-
-$project = zenData('project');
-$project->id->range('1-15');
-$project->project->range('0{5},1{2},2{2},3{2},4{2},5{2}');
-$project->type->range('project{5},sprint{10}');
-$project->name->range('项目1,项目2,项目3,项目4,项目5,执行6,执行7,执行8,执行9,执行10,执行11,执行12,执行13,执行14,执行15');
-$project->begin->range('`2024-01-01`');
-$project->end->range('`2024-06-30`{4},`2024-07-31`{3},`2024-08-31`{3},`2024-12-31`{5}');
-$project->realBegan->range('`2024-06-01`{4},`2024-07-01`{3},`2024-08-01`{3},`2024-01-01`{5}');
-$project->realEnd->range('`2024-06-30`{4},`2024-07-31`{3},`2024-08-31`{3},`2024-12-31`{5}');
-$project->status->range('doing{5},closed{10}');
-$project->multiple->range('1');
-$project->deleted->range('0');
-$project->gen(15);
-
-su('admin');
-
-$pivotTest = new pivotTaoTest();
-
-r(count($pivotTest->getExecutionListTest('', '', array()))) && p() && e('5');
-r(count($pivotTest->getExecutionListTest('2024-06-01', '2024-06-29', array()))) && p() && e('0');
-r(count($pivotTest->getExecutionListTest('2024-07-01', '2024-07-31', array()))) && p() && e('2');
-r(count($pivotTest->getExecutionListTest('', '', array(7, 8)))) && p() && e('2');
-r($pivotTest->getExecutionListTest('', '', array())[0]) && p('projectID,executionID') && e('5,10');
\ 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 8ad67230fd..0000000000
--- a/module/pivot/test/zen/bugcreate.php
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env php
-> 查询上月至今日的Bug数据
-- 测试指定时间范围查询Bug数据 >> 返回指定时间范围的Bug数据
-- 测试指定产品过滤Bug数据 >> 返回指定产品的Bug数据
-- 测试指定执行过滤Bug数据 >> 返回指定执行的Bug数据
-- 测试同时指定产品和执行过滤Bug数据 >> 返回同时满足产品和执行条件的Bug数据
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/pivotzen.unittest.class.php';
-
-zenData('bug')->loadYaml('bugcreate', false, 2)->gen(20);
-zenData('product')->loadYaml('bugcreate', false, 2)->gen(5);
-zenData('project')->loadYaml('bugcreate', false, 2)->gen(5);
-zenData('user')->loadYaml('bugcreate', false, 2)->gen(10);
-
-su('admin');
-
-$pivotTest = new pivotZenTest();
-
-r($pivotTest->bugCreateTest('', '', 0, 0)) && p('begin,end') && e('2025-10-01,2025-11-10');
-r($pivotTest->bugCreateTest('2024-10-01', '2024-10-31', 0, 0)) && p('begin,end') && e('2024-10-01,2024-10-31');
-r($pivotTest->bugCreateTest('2024-10-01', '2024-10-31', 1, 0)) && p('begin,end,product') && e('2024-10-01,2024-10-31,1');
-r($pivotTest->bugCreateTest('2024-10-01', '2024-10-31', 0, 101)) && p('begin,end,execution') && e('2024-10-01,2024-10-31,101');
-r($pivotTest->bugCreateTest('2024-10-01', '2024-10-31', 1, 101)) && p('begin,end,product,execution') && e('2024-10-01,2024-10-31,1,101');
diff --git a/module/pivot/test/zen/getbuiltinmenus.php b/module/pivot/test/zen/getbuiltinmenus.php
deleted file mode 100755
index 5a8510fad4..0000000000
--- a/module/pivot/test/zen/getbuiltinmenus.php
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env php
-loadYaml('getbuiltinmenus', false, 2)->gen(10);
-zenData('user')->gen(1);
-zenData('group')->loadYaml('getbuiltinmenus', false, 2)->gen(1);
-zenData('usergroup')->loadYaml('getbuiltinmenus', false, 2)->gen(1);
-zenData('grouppriv')->loadYaml('getbuiltinmenus', false, 2)->gen(5);
-
-su('admin');
-
-global $app;
-$app->loadLang('pivot');
-
-$pivotTest = new pivotZenTest();
-
-$productGroup = new stdclass();
-$productGroup->id = 1;
-$productGroup->collector = 'product';
-$productGroup->grade = 1;
-
-$projectGroup = new stdclass();
-$projectGroup->id = 2;
-$projectGroup->collector = 'project';
-$projectGroup->grade = 1;
-
-$testGroup = new stdclass();
-$testGroup->id = 3;
-$testGroup->collector = 'test';
-$testGroup->grade = 1;
-
-$staffGroup = new stdclass();
-$staffGroup->id = 4;
-$staffGroup->collector = 'staff';
-$staffGroup->grade = 1;
-
-$emptyGroup = new stdclass();
-$emptyGroup->id = 5;
-$emptyGroup->collector = 'empty';
-$emptyGroup->grade = 1;
-
-r(count($pivotTest->getBuiltinMenusTest(1, $productGroup))) && p() && e('0');
-r(count($pivotTest->getBuiltinMenusTest(1, $projectGroup))) && p() && e('0');
-r(count($pivotTest->getBuiltinMenusTest(1, $testGroup))) && p() && e('0');
-r(count($pivotTest->getBuiltinMenusTest(1, $staffGroup))) && p() && e('0');
-r(count($pivotTest->getBuiltinMenusTest(1, $emptyGroup))) && p() && e('0');
\ 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 0e9eba8731..0000000000
--- a/module/pivot/test/zen/getdefaultmethodandparams.php
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$table->root->range('1');
-$table->branch->range('0');
-$table->name->range('产品分组,项目分组,测试分组,员工分组,子分组1,子分组2,产品分组空,项目分组无权限,空分组,测试分组2');
-$table->parent->range('0,0,0,0,1,2,0,0,0,0');
-$table->path->range("',1,',',2,',',3,',',4,',',1,5,',',2,6,',',7,',',8,',',9,',',10,'");
-$table->grade->range('1,1,1,1,2,2,1,1,1,1');
-$table->order->range('1-10');
-$table->type->range('pivot');
-$table->owner->range('admin');
-$table->collector->range('product,project,test,staff,product,project,product,project,empty,test');
-$table->deleted->range('0');
-$table->gen(10);
-
-zenData('user')->gen(1);
-zenData('group')->gen(1);
-zenData('usergroup')->gen(1);
-zenData('grouppriv')->gen(100);
-zenData('dimension')->gen(1);
-zenData('pivot')->gen(0);
-
-su('admin');
-
-global $app;
-$app->loadLang('pivot');
-
-$pivotTest = new pivotZenTest();
-
-r($pivotTest->getDefaultMethodAndParamsTest(1, 0)) && p('0') && e('~~');
-r($pivotTest->getDefaultMethodAndParamsTest(1, 999)) && p('0') && e('~~');
-r($pivotTest->getDefaultMethodAndParamsTest(1, 1)) && p('0') && e('~~');
-r($pivotTest->getDefaultMethodAndParamsTest(1, 5)) && p('0') && e('~~');
-r($pivotTest->getDefaultMethodAndParamsTest(1, 9)) && p('0') && e('~~');
\ 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 83e312de3e..0000000000
--- a/module/product/test/model/buildsearchconfig.php
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$product->name->range('产品1,产品2,产品3,产品4,产品5');
-$product->type->range('normal,branch,platform,normal,branch');
-$product->status->range('normal');
-$product->gen(5);
-
-$module = zenData('module');
-$module->id->range('1-10');
-$module->root->range('1-5');
-$module->name->range('模块1,模块2,模块3,模块4,模块5,模块6,模块7,模块8,模块9,模块10');
-$module->type->range('story');
-$module->gen(10);
-
-$plan = zenData('productplan');
-$plan->id->range('1-5');
-$plan->product->range('1-5');
-$plan->title->range('计划1,计划2,计划3,计划4,计划5');
-$plan->gen(5);
-
-$branch = zenData('branch');
-$branch->id->range('1-5');
-$branch->product->range('2,2,3,3,5');
-$branch->name->range('分支1,分支2,分支3,分支4,分支5');
-$branch->gen(5);
-
-$productTest = new productTest();
-
-r($productTest->buildSearchConfigTest(1, 'story')) && p('fields:title') && e('需求名称'); // 测试 productID=1, storyType='story' 的正常情况
-r($productTest->buildSearchConfigTest(1, 'requirement')) && p('fields:title') && e('用户需求名称'); // 测试 productID=1, storyType='requirement' 的情况,验证 title 字段名称被替换
-r($productTest->buildSearchConfigTest(1, 'epic')) && p('fields:title') && e('用户需求名称'); // 测试 productID=1, storyType='epic' 的情况,验证 title 字段名称被替换
-r($productTest->buildSearchConfigTest(2, 'story')) && p('fields:branch') && e('所属分支'); // 测试 productID=2 且产品类型为 branch,验证 branch 字段存在
-r($productTest->buildSearchConfigTest(1, 'story')) && p('module') && e('story'); // 测试 productID=1, storyType='story' 验证module配置正确
\ 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 b9d89995f6..0000000000
--- a/module/product/test/zen/buildproductforclose.php
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env php
-buildProductForCloseTest(1)) && p('status,closedDate') && e('close,2025-11-11');
-
-$_POST['status'] = 'close';
-$_POST['closedDate'] = date('Y-m-d');
-$_POST['comment'] = '';
-r($productTest->buildProductForCloseTest(0)) && p('status') && e('close');
-
-$_POST['status'] = 'close';
-$_POST['closedDate'] = date('Y-m-d');
-$_POST['comment'] = 'Close non-existent product';
-r($productTest->buildProductForCloseTest(999)) && p('status') && e('close');
-
-$_POST['status'] = 'close';
-$_POST['closedDate'] = date('Y-m-d');
-$_POST['comment'] = '';
-r($productTest->buildProductForCloseTest(1)) && p('status') && e('close');
-
-$_POST['status'] = 'close';
-$_POST['closedDate'] = date('Y-m-d');
-$_POST['comment'] = 'This is a very long comment for closing the product. It should be processed correctly by the buildProductForClose method. The method should handle long text comments without any issues and store them properly in the database.';
-r($productTest->buildProductForCloseTest(1)) && p('status') && e('close');
diff --git a/module/product/test/zen/getactionsfordynamic.php b/module/product/test/zen/getactionsfordynamic.php
deleted file mode 100755
index 8a1b1fedf8..0000000000
--- a/module/product/test/zen/getactionsfordynamic.php
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env php
-loadYaml('action_year', false, 4)->gen(35);
-zenData('actionrecent')->loadYaml('action_year', false, 4)->gen(35);
-
-$actionproduct = zenData('actionproduct');
-$actionproduct->action->range('1-35');
-$actionproduct->product->range('1{7},2{7},3{7},4{7},5{7}');
-$actionproduct->gen(35);
-
-zenData('doclib')->loadYaml('doclib', false, 3)->gen(15);
-zenData('doc')->loadYaml('doc', false, 3)->gen(5);
-zenData('product')->gen(5);
-zenData('project')->loadYaml('execution', false, 2)->gen(12);
-zenData('user')->loadYaml('user', false, 1)->gen(3);
-zenData('userview')->loadYaml('userview', false, 1)->gen(2);
-
-su('admin');
-
-$productTest = new productZenTest();
-
-r($productTest->getActionsForDynamicTest('all', 'date_desc', 1, 'all', '', 'next')) && p() && e('0'); // 测试步骤1:获取产品1所有用户的全部动态记录
-r($productTest->getActionsForDynamicTest('admin', 'date_desc', 1, 'all', '', 'next')) && p() && e('0'); // 测试步骤2:获取产品1的admin用户动态记录
-r($productTest->getActionsForDynamicTest('all', 'date_desc', 1, 'all', date('Y-m-d'), 'next')) && p() && e('0'); // 测试步骤3:获取产品1特定日期的动态记录
-r($productTest->getActionsForDynamicTest('all', 'id_desc', 1, 'all', '', 'next')) && p() && e('0'); // 测试步骤4:获取产品1动态记录按ID降序排列
-r($productTest->getActionsForDynamicTest('all', 'date_desc', 0, 'all', '', 'next')) && p() && e('0'); // 测试步骤5:获取产品0(无效产品ID)的动态记录
-r($productTest->getActionsForDynamicTest('all', 'date_desc', 1, 'account', '', 'next')) && p() && e('0'); // 测试步骤6:获取产品1按账户类型(account)筛选的动态
-r($productTest->getActionsForDynamicTest('all', 'date_desc', 1, 'all', '', 'pre')) && p() && e('0'); // 测试步骤7:获取产品1的动态记录向前翻页
\ 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 1913b41118..0000000000
--- a/module/product/test/zen/getproductplans.php
+++ /dev/null
@@ -1,79 +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->gen(10);
-
-$plan = zenData('productplan');
-$plan->id->range('1-20');
-$plan->product->range('1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10');
-$plan->branch->range('0');
-$plan->title->range('计划1,计划2,计划3,计划4,计划5,计划6,计划7,计划8,计划9,计划10,计划11,计划12,计划13,计划14,计划15,计划16,计划17,计划18,计划19,计划20');
-$plan->status->range('wait{5},doing{13},closed{2}');
-$plan->end->range('`2025-12-31`{18},`2023-12-31`{2}');
-$plan->deleted->range('0');
-$plan->gen(20);
-
-$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->hasProduct->range('1{10}');
-$project->status->range('doing{10}');
-$project->deleted->range('0');
-$project->gen(10);
-
-$projectproduct = zenData('projectproduct');
-$projectproduct->project->range('1,1,1,2,2,3,3,4,5,6');
-$projectproduct->product->range('1,2,3,4,5,6,7,8,9,10');
-$projectproduct->gen(10);
-
-su('admin');
-
-$productTest = new productZenTest();
-
-$product1 = new stdclass();
-$product1->id = 1;
-$product1->name = 'Product 1';
-$product1->type = 'normal';
-$product1->branches = array();
-
-$product2 = new stdclass();
-$product2->id = 2;
-$product2->name = 'Product 2';
-$product2->type = 'normal';
-$product2->branches = array();
-
-$projectProducts1 = array(1 => $product1, 2 => $product2);
-$projectProducts2 = array();
-
-r($productTest->getProductPlansTest($projectProducts1, 1, 'story', true)) && p('1:3;2:5') && e('计划3 [2025-01-25 ~ 2025-12-31];计划5 [2025-02-08 ~ 2025-12-31]'); // 步骤1:正常情况,isProjectStory为true且storyType为story
-r($productTest->getProductPlansTest($projectProducts1, 1, 'story', false)) && p() && e('0'); // 步骤2:isProjectStory为false
-r($productTest->getProductPlansTest($projectProducts1, 1, 'requirement', true)) && p() && e('0'); // 步骤3:storyType为requirement时
-r($productTest->getProductPlansTest($projectProducts2, 1, 'story', true)) && p() && e('0'); // 步骤4:projectProducts为空数组
-r($productTest->getProductPlansTest($projectProducts1, 0, 'story', true)) && p('1:3;2:5') && e('计划3 [2025-01-25 ~ 2025-12-31];计划5 [2025-02-08 ~ 2025-12-31]'); // 步骤5:projectID为0时仍返回计划
\ 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 60b4506b2c..0000000000
--- a/module/productplan/test/zen/buildactionslist.php
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$plan->status = 'wait';
-$plan->product = 1;
-$plan->branch = '0';
-
-$result = $productplanTest->buildActionsListTest($plan);
-
-r(count($result)) && p() && e('11');
-r(in_array('start', $result)) && p() && e('1');
-r(in_array('finish', $result)) && p() && e('1');
-r(in_array('close', $result)) && p() && e('1');
-r(in_array('activate', $result)) && p() && e('1');
-r(in_array('createExecution', $result)) && p() && e('1');
-r(in_array('linkStory', $result)) && p() && e('1');
-r(in_array('linkBug', $result)) && p() && e('1');
-r(in_array('edit', $result)) && p() && e('1');
-r(in_array('delete', $result)) && p() && e('1');
\ 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 a8bde7eb21..0000000000
--- a/module/productplan/test/zen/buildplansforbatchedit.php
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env php
-loadYaml('productplan', false, 2)->gen(20);
-
-su('admin');
-
-$productplanTest = new productplanZenTest();
-
-// 测试场景1: 正常批量编辑计划
-$postData1 = array(
- 'planIDList' => array(1, 2),
- 'id' => array(1 => 1, 2 => 2),
- 'title' => array(1 => '计划1', 2 => '计划2'),
- 'begin' => array(1 => '2024-01-01', 2 => '2024-02-01'),
- 'end' => array(1 => '2024-06-30', 2 => '2024-07-31'),
- 'status' => array(1 => 'doing', 2 => 'wait'),
- 'branch' => array(1 => '1', 2 => '2')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData1)) && p('1:begin,end,status') && e('2024-01-01,2024-06-30,doing');
-
-// 测试场景2: 开始日期大于结束日期
-$postData2 = array(
- 'planIDList' => array(3),
- 'id' => array(3 => 3),
- 'title' => array(3 => '计划3'),
- 'begin' => array(3 => '2024-12-31'),
- 'end' => array(3 => '2024-01-01'),
- 'status' => array(3 => 'wait'),
- 'branch' => array(3 => '0')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData2)) && p('begin:0') && e('『计划3』的开始时间不能大于结束时间。');
-
-// 测试场景3: 未来日期标记
-$postData3 = array(
- 'planIDList' => array(4),
- 'id' => array(4 => 4),
- 'title' => array(4 => '计划4'),
- 'begin' => array(4 => ''),
- 'end' => array(4 => ''),
- 'status' => array(4 => 'wait'),
- 'branch' => array(4 => '0'),
- 'future' => array(4 => '1')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData3)) && p('4:begin,end') && e('2030-01-01,2030-01-01');
-
-// 测试场景4: 子计划开始日期早于父计划
-$postData4 = array(
- 'planIDList' => array(5, 11),
- 'id' => array(5 => 5, 11 => 11),
- 'title' => array(5 => '计划5', 11 => '子计划11'),
- 'begin' => array(5 => '2024-03-01', 11 => '2024-01-01'),
- 'end' => array(5 => '2024-12-31', 11 => '2024-08-31'),
- 'status' => array(5 => 'wait', 11 => 'wait'),
- 'branch' => array(5 => '0', 11 => '0')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData4)) && p('begin:0') && e('『计划11』的开始时间 2024-01-01 不能小于父计划的开始时间 2024-03-01。');
-
-// 测试场景5: 子计划结束日期晚于父计划
-$postData5 = array(
- 'planIDList' => array(6, 12),
- 'id' => array(6 => 6, 12 => 12),
- 'title' => array(6 => '计划6', 12 => '子计划12'),
- 'begin' => array(6 => '2024-03-01', 12 => '2024-04-01'),
- 'end' => array(6 => '2024-10-31', 12 => '2024-12-31'),
- 'status' => array(6 => 'wait', 12 => 'wait'),
- 'branch' => array(6 => '0', 12 => '0')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData5)) && p('end:0') && e('『计划12』的结束时间 2024-12-31 不能大于父计划的结束时间 2024-10-31。');
-
-// 测试场景6: 空字段使用旧值
-$postData6 = array(
- 'planIDList' => array(7),
- 'id' => array(7 => 7),
- 'title' => array(7 => '计划7'),
- 'begin' => array(7 => ''),
- 'end' => array(7 => ''),
- 'status' => array(7 => ''),
- 'branch' => array(7 => '0')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData6)) && p('7:begin,end,status') && e('2024-03-15,2024-09-15,wait');
-
-// 测试场景7: 分支字段为空设置为0
-$postData7 = array(
- 'planIDList' => array(8),
- 'id' => array(8 => 8),
- 'title' => array(8 => '计划8'),
- 'begin' => array(8 => '2024-05-01'),
- 'end' => array(8 => '2024-11-30'),
- 'status' => array(8 => 'doing'),
- 'branch' => array(8 => '')
-);
-r($productplanTest->buildPlansForBatchEditTest($postData7)) && p('8:branch') && e('0');
\ 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 346949af4d..0000000000
--- a/module/productplan/test/zen/buildviewactions.php
+++ /dev/null
@@ -1,138 +0,0 @@
-#!/usr/bin/env php
-id}";
- $menu = array();
-
- // 根据计划状态和属性模拟生成操作菜单
- if(!$plan->isParent && $plan->status == 'wait') {
- $menu[] = array('icon' => 'play', 'text' => '开始', 'data-action' => 'start', 'data-url' => "start-{$params}");
- }
- if(!$plan->isParent && $plan->status == 'doing') {
- $menu[] = array('icon' => 'checked', 'text' => '完成', 'data-action' => 'finish', 'data-url' => "finish-{$params}");
- }
- if(!$plan->isParent && $plan->status != 'closed') {
- $menu[] = array('icon' => 'off', 'text' => '关闭', 'url' => "close-{$params}");
- }
- if(!$plan->isParent && $plan->status != 'wait' && $plan->status != 'doing') {
- $menu[] = array('icon' => 'magic', 'text' => '激活', 'data-action' => 'activate', 'data-url' => "activate-{$params}");
- }
- if($plan->parent <= 0 && $plan->status != 'done' && $plan->status != 'closed') {
- $menu[] = array('icon' => 'split', 'text' => '创建子计划', 'url' => "create-product={$plan->product}");
- }
-
- $menu[] = array('icon' => 'edit', 'text' => '编辑', 'url' => "edit-{$params}");
-
- if(!$plan->isParent) {
- $menu[] = array('icon' => 'trash', 'text' => '删除', 'data-action' => 'delete', 'data-url' => "delete-{$params}");
- }
-
- return $menu;
-}
-
-// 辅助函数:检查操作菜单中是否包含指定操作
-function hasAction($menu, $keyword) {
- foreach($menu as $action) {
- if(isset($action['data-action']) && $action['data-action'] == $keyword) return 1;
- if(isset($action['text']) && strpos($action['text'], $keyword) !== false) return 1;
- }
- return 0;
-}
-
-// 辅助函数:检查是否有有效的URL
-function hasValidUrl($menu) {
- foreach($menu as $action) {
- if(isset($action['url']) || isset($action['data-url'])) return 1;
- }
- return 0;
-}
-
-// 测试场景1: 等待状态的独立计划
-$plan1 = new stdClass();
-$plan1->id = 1;
-$plan1->status = 'wait';
-$plan1->product = 1;
-$plan1->branch = '0';
-$plan1->parent = 0;
-$plan1->isParent = false;
-$plan1->expired = false;
-
-// 测试场景2: 进行中状态的计划
-$plan2 = new stdClass();
-$plan2->id = 2;
-$plan2->status = 'doing';
-$plan2->product = 1;
-$plan2->branch = '0';
-$plan2->parent = 0;
-$plan2->isParent = false;
-$plan2->expired = false;
-
-// 测试场景3: 已完成状态的计划
-$plan3 = new stdClass();
-$plan3->id = 3;
-$plan3->status = 'done';
-$plan3->product = 1;
-$plan3->branch = '0';
-$plan3->parent = 0;
-$plan3->isParent = false;
-$plan3->expired = false;
-
-// 测试场景4: 已关闭状态的计划
-$plan4 = new stdClass();
-$plan4->id = 4;
-$plan4->status = 'closed';
-$plan4->product = 1;
-$plan4->branch = '0';
-$plan4->parent = 0;
-$plan4->isParent = false;
-$plan4->expired = false;
-
-// 测试场景5: 父计划(parent=-1)
-$plan5 = new stdClass();
-$plan5->id = 5;
-$plan5->status = 'wait';
-$plan5->product = 1;
-$plan5->branch = '0';
-$plan5->parent = -1;
-$plan5->isParent = true;
-$plan5->expired = false;
-
-$result1 = simulateBuildViewActions($plan1);
-$result2 = simulateBuildViewActions($plan2);
-$result3 = simulateBuildViewActions($plan3);
-$result4 = simulateBuildViewActions($plan4);
-$result5 = simulateBuildViewActions($plan5);
-
-r(hasAction($result1, 'start') || hasAction($result1, '开始')) && p() && e('1');
-r(hasAction($result1, '编辑')) && p() && e('1');
-r(hasAction($result1, 'delete') || hasAction($result1, '删除')) && p() && e('1');
-r(hasAction($result1, '关闭')) && p() && e('1');
-r(hasAction($result5, '创建子计划')) && p() && e('1');
-r(hasAction($result2, 'finish') || hasAction($result2, '完成')) && p() && e('1');
-r(hasAction($result3, '关闭')) && p() && e('1');
-r(hasAction($result4, 'activate') || hasAction($result4, '激活')) && p() && e('1');
-r(hasValidUrl($result1)) && p() && e('1');
\ 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 44b86506e8..0000000000
--- a/module/program/test/zen/getprogramsbytype.php
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env php
-loadYaml('getprogramsbytype/project', false, 2)->gen(25);
-zenData('user')->gen(5);
-
-su('admin');
-
-$programTest = new programTest();
-
-r(count($programTest->getProgramsByTypeTest('doing', 'id_desc', 0))) && p() && e('9');
-r(count($programTest->getProgramsByTypeTest('unclosed', 'id_desc', 0))) && p() && e('17');
-r(count($programTest->getProgramsByTypeTest('wait', 'id_desc', 0))) && p() && e('5');
-r(count($programTest->getProgramsByTypeTest('closed', 'id_desc', 0))) && p() && e('2');
-r(count($programTest->getProgramsByTypeTest('suspended', 'id_desc', 0))) && p() && e('3');
-r(count($programTest->getProgramsByTypeTest('doing', 'order_asc', 0))) && p() && e('9');
-r(count($programTest->getProgramsByTypeTest('all', 'id_desc', 0))) && p() && e('19');
\ 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 3f02f3e14e..0000000000
--- a/module/project/test/zen/buildactivateform.php
+++ /dev/null
@@ -1,71 +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('project');
-$table->status->range('closed,suspended,closed,suspended,closed,closed,suspended,closed,suspended,closed');
-$table->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`');
-$table->end->range('`2024-06-01`,`2024-07-01`,`2024-08-01`,`2030-01-01`,`2024-10-01`,`2024-11-01`,`2024-12-01`,`2025-01-01`,`2025-02-01`,`2025-03-01`');
-$table->gen(10);
-
-$userTable = zenData('user');
-$userTable->id->range('1-5');
-$userTable->account->range('admin,user1,user2,user3,user4');
-$userTable->realname->range('管理员,用户1,用户2,用户3,用户4');
-$userTable->gen(5);
-
-$actionTable = zenData('action');
-$actionTable->id->range('1-3');
-$actionTable->objectType->range('project');
-$actionTable->objectID->range('1-3');
-$actionTable->action->range('opened,started,suspended');
-$actionTable->gen(3);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$projectTest = new projectzenTest();
-
-// 获取项目对象
-$project1 = $projectTest->objectModel->getByID(1);
-$project2 = $projectTest->objectModel->getByID(2);
-$project3 = $projectTest->objectModel->getByID(3);
-$project4 = $projectTest->objectModel->getByID(4);
-$project5 = $projectTest->objectModel->getByID(5);
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($projectTest->buildActivateFormTest($project1)) && p('title,project') && e('激活项目,1'); // 步骤1:正常项目激活
-r($projectTest->buildActivateFormTest($project2)) && p('title,newBegin') && e('激活项目,2025-11-11'); // 步骤2:已挂起项目激活
-r($projectTest->buildActivateFormTest($project3)) && p('title,actions') && e('激活项目,1'); // 步骤3:已关闭项目激活
-r($projectTest->buildActivateFormTest($project4)) && p('title,newEnd') && e('激活项目,2031-08-13'); // 步骤4:长期项目激活
-r($projectTest->buildActivateFormTest($project5)) && p('newBegin') && e('2025-11-11'); // 步骤5:验证新开始日期为当前日期
\ 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 bf57a9997f..0000000000
--- a/module/project/test/zen/buildbugview.php
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env php
-loadYaml('buildbugview', false, 2)->gen(20);
-zendata('project')->loadYaml('buildbugview', false, 2)->gen(5);
-zendata('product')->loadYaml('buildbugview', false, 2)->gen(5);
-zendata('user')->loadYaml('buildbugview', false, 2)->gen(10);
-zendata('build')->loadYaml('buildbugview', false, 2)->gen(5);
-
-$storyTable = zenData('story');
-$storyTable->id->range('1-5');
-$storyTable->product->range('1-2');
-$storyTable->title->range('需求1,需求2,需求3,需求4,需求5');
-$storyTable->type->range('story');
-$storyTable->status->range('active');
-$storyTable->gen(5);
-
-$taskTable = zenData('task');
-$taskTable->id->range('1-5');
-$taskTable->project->range('1-2');
-$taskTable->execution->range('1-2');
-$taskTable->name->range('任务1,任务2,任务3,任务4,任务5');
-$taskTable->type->range('devel');
-$taskTable->status->range('doing');
-$taskTable->gen(5);
-
-$executionTable = zenData('project');
-$executionTable->id->range('101-105');
-$executionTable->project->range('1{3},2{2}');
-$executionTable->name->range('迭代1,迭代2,迭代3,迭代4,迭代5');
-$executionTable->type->range('sprint');
-$executionTable->status->range('doing');
-$executionTable->gen(5);
-
-$productPlanTable = zenData('productplan');
-$productPlanTable->id->range('1-3');
-$productPlanTable->product->range('1-2');
-$productPlanTable->branch->range('0');
-$productPlanTable->title->range('计划1,计划2,计划3');
-$productPlanTable->status->range('doing');
-$productPlanTable->gen(3);
-
-$projectProductTable = zenData('projectproduct');
-$projectProductTable->project->range('1,1,2,2,3');
-$projectProductTable->product->range('1,2,1,2,3');
-$projectProductTable->gen(5);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$projectTest = new projectzenTest();
-
-// 获取项目对象和产品信息
-$project1 = $projectTest->objectModel->getByID(1);
-$project2 = $projectTest->objectModel->getByID(2);
-$project3 = $projectTest->objectModel->getByID(3);
-
-// 如果项目对象获取失败,创建默认对象
-if(empty($project1))
-{
- $project1 = new stdClass();
- $project1->id = 1;
- $project1->name = '项目1';
- $project1->hasProduct = 1;
- $project1->model = 'scrum';
- $project1->multiple = 1;
-}
-if(empty($project2))
-{
- $project2 = new stdClass();
- $project2->id = 2;
- $project2->name = '项目2';
- $project2->hasProduct = 1;
- $project2->model = 'waterfall';
- $project2->multiple = 1;
-}
-if(empty($project3))
-{
- $project3 = new stdClass();
- $project3->id = 3;
- $project3->name = '项目3';
- $project3->hasProduct = 0;
- $project3->model = 'kanban';
- $project3->multiple = 0;
-}
-
-$products = $projectTest->objectModel->loadModel('product')->getPairs();
-if(empty($products)) $products = array(1 => '产品1', 2 => '产品2');
-
-// 5. 强制要求:必须包含至少5个测试步骤
-r($projectTest->buildBugViewTest(1, 1, $project1, 'all', 0, 'id_desc', 0, '', $products, 20, 20, 1)) && p('productID,projectID') && e('1,1'); // 步骤1:正常项目bug视图构建
-r($projectTest->buildBugViewTest(2, 1, $project1, 'all', 0, 'id_desc', 0, '', $products, 20, 20, 1)) && p('productID') && e('2'); // 步骤2:指定产品ID的bug视图
-r($projectTest->buildBugViewTest(0, 1, $project1, 'all', 0, 'id_desc', 0, '', $products, 20, 20, 1)) && p('type,orderBy') && e('all,id_desc'); // 步骤3:指定类型的bug视图
-r($projectTest->buildBugViewTest(1, 1, $project1, 'all', 0, 'id_desc', 1, '', $products, 20, 20, 1)) && p('buildID') && e('1'); // 步骤4:指定版本的bug视图
-r($projectTest->buildBugViewTest(1, 2, $project2, 'all', 0, 'id_desc', 0, '', $products, 20, 20, 1)) && p('projectID') && e('2'); // 步骤5:验证项目ID正确
\ 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 f3ff830f98..0000000000
--- a/module/project/test/zen/buildcreateform.php
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/env php
-> 创建项目
-- 测试waterfall模型、有项目集ID的创建表单 >> waterfall,1
-- 测试kanban模型的创建表单(验证ACL列表切换) >> kanban,1
-- 测试带复制项目ID的创建表单 >> 1,1
-- 测试带extra参数(productID和branchID)的创建表单 >> 1,2
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/projectzen.unittest.class.php';
-
-zenData('product')->gen(0);
-zenData('program')->gen(0);
-zenData('project')->gen(10);
-zenData('user')->gen(10);
-
-su('admin');
-
-$projectTest = new projectzenTest();
-
-r($projectTest->buildCreateFormTest('scrum', 0, 0, '')) && p('title') && e('创建项目');
-r($projectTest->buildCreateFormTest('waterfall', 1, 0, '')) && p('model,programID') && e('waterfall,1');
-r($projectTest->buildCreateFormTest('kanban', 1, 0, '')) && p('model,aclChanged') && e('kanban,1');
-r($projectTest->buildCreateFormTest('scrum', 1, 1, '')) && p('copyProjectID,hasCopyProject') && e('1,1');
-r($projectTest->buildCreateFormTest('scrum', 1, 0, 'productID=1,branchID=2')) && p('productID,branchID') && e('1,2');
\ 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 2afacce418..0000000000
--- a/module/project/test/zen/buildmembers.php
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env php
-buildMembersTest(array('user1' => (object)array('account' => 'user1', 'role' => 'dev', 'days' => 10, 'hours' => 8, 'limited' => 'no')), array('user2' => (object)array('account' => 'user2', 'role' => 'qa')), array('user3' => 'User3', 'user4' => 'User4'), 10)) && p('count,hasDefault,hasImport,hasDept') && e('9,1,1,2'); // 步骤1:正常情况3个成员+5个空行
-r($projectTest->buildMembersTest(array('user1' => (object)array('account' => 'user1', 'role' => 'dev')), array(), array(), 5)) && p('count,hasDefault,hasImport,hasDept') && e('6,1,0,0'); // 步骤2:只有当前成员
-r($projectTest->buildMembersTest(array('user1' => (object)array('account' => 'user1', 'role' => 'dev')), array(), array('user1' => 'User1', 'user2' => 'User2'), 10)) && p('count,hasDefault,hasDept') && e('7,1,1'); // 步骤3:部门成员与当前成员重复
-r($projectTest->buildMembersTest(array('user1' => (object)array('account' => 'user1', 'role' => 'dev')), array('user2' => (object)array('account' => 'user2', 'role' => 'qa')), array('user2' => 'User2', 'user3' => 'User3'), 10)) && p('count,hasDefault,hasImport,hasDept') && e('8,1,1,1'); // 步骤4:部门成员与导入成员重复
-r($projectTest->buildMembersTest(array(), array(), array(), 0)) && p('count,hasDefault,hasImport,hasDept,hasAdd') && e('5,0,0,0,5'); // 步骤5:所有数组为空
-r($projectTest->buildMembersTest(array('admin' => (object)array('account' => 'admin', 'role' => 'pm')), array('dev1' => (object)array('account' => 'dev1', 'role' => 'dev')), array('qa1' => 'QA1'), 5)) && p('memberTypes') && e('default|dept|import|add'); // 步骤6:成员类型标记
-r($projectTest->buildMembersTest(array(), array(), array('user1' => 'User1'), 15)) && p('count,hasDept,hasAdd') && e('6,1,5'); // 步骤7:混合数据场景
\ 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 a7a585a7e9..0000000000
--- a/module/project/test/zen/recordexecutionsofunlinkedproducts.php
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env php
-gen(30);
-
-$product = zenData('product');
-$product->id->range('1-10');
-$product->name->range('ProductA,ProductB,ProductC,ProductD,ProductE,ProductF,ProductG,ProductH,ProductI,ProductJ');
-$product->gen(10);
-
-$projectproduct = zenData('projectproduct');
-$projectproduct->project->range('101,101,102,102,103,103,103');
-$projectproduct->product->range('1,2,3,4,1,5,6');
-$projectproduct->gen(7);
-
-su('admin');
-
-$projectTest = new projectZenTest();
-
-// 准备测试数据
-$product1 = new stdclass();
-$product1->id = 1;
-$product1->name = 'ProductA';
-
-$product2 = new stdclass();
-$product2->id = 2;
-$product2->name = 'ProductB';
-
-$product3 = new stdclass();
-$product3->id = 3;
-$product3->name = 'ProductC';
-
-$product4 = new stdclass();
-$product4->id = 4;
-$product4->name = 'ProductD';
-
-$product5 = new stdclass();
-$product5->id = 5;
-$product5->name = 'ProductE';
-
-$product7 = new stdclass();
-$product7->id = 7;
-$product7->name = 'ProductG';
-
-// 测试步骤1:无取消关联产品时不创建action记录
-r(count($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => $product1, 2 => $product2), array(1, 2), array(101, 102)))) && p() && e('0');
-// 测试步骤2:取消一个产品关联且该产品在一个执行中
-r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => $product1, 2 => $product2), array(2), array(101, 102))) && p('101:action') && e('unlinkproduct');
-// 测试步骤3:取消多个执行中的产品关联
-r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => $product1, 2 => $product2, 3 => $product3), array(2, 3), array(101, 102, 103))) && p('101:objectID;103:objectID') && e('101;103');
-// 测试步骤4:取消产品关联但执行未关联该产品
-r(count($projectTest->recordExecutionsOfUnlinkedProductsTest(array(7 => $product7), array(), array(101, 102, 103)))) && p() && e('0');
-// 测试步骤5:取消产品关联且多个执行都关联了该产品
-r($projectTest->recordExecutionsOfUnlinkedProductsTest(array(1 => $product1, 3 => $product3), array(3), array(101, 102, 103))) && p('101:action;103:action') && e('unlinkproduct;unlinkproduct');
\ 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 4b78ebf848..0000000000
--- a/module/repo/test/zen/getcommits.php
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/env php
-loadYaml('repo', false, 2)->gen(10);
-zenData('repohistory')->loadYaml('repohistory', false, 2)->gen(50);
-zenData('user')->gen(5);
-ob_end_clean();
-
-su('admin');
-
-$repoTest = new repoZenTest();
-
-$pager1 = new stdClass();
-$pager1->recPerPage = 20;
-$pager1->pageID = 1;
-
-$pager2 = new stdClass();
-$pager2->recPerPage = 10;
-$pager2->pageID = 1;
-
-global $tester;
-$repoModel = $tester->loadModel('repo');
-
-$repo1 = new stdClass();
-$repo1->id = 1;
-$repo1->SCM = 'Git';
-$repo1->name = 'test-repo';
-
-$repo2 = new stdClass();
-$repo2->id = 2;
-$repo2->SCM = 'Subversion';
-$repo2->name = 'svn-repo';
-
-$invalidRepo = new stdClass();
-$invalidRepo->id = 0;
-
-r(count($repoTest->getCommitsTest($repo1, '', 'HEAD', 'dir', $pager1, 1))) && p() && e('3'); // 测试步骤1:获取Git版本库的提交记录
-r(count($repoTest->getCommitsTest($repo2, '', 'HEAD', 'dir', $pager1, 1))) && p() && e('3'); // 测试步骤2:获取Subversion版本库的提交记录
-r(count($repoTest->getCommitsTest($repo1, '/src/index.php', 'HEAD', 'file', $pager1, 1))) && p() && e('1'); // 测试步骤3:获取指定文件的提交记录
-r(count($repoTest->getCommitsTest($invalidRepo, '', 'HEAD', 'dir', $pager1, 1))) && p() && e('0'); // 测试步骤4:传入无效的repo对象
-r(count($repoTest->getCommitsTest($repo1, '', 'HEAD', 'invalid', $pager1, 1))) && p() && e('0'); // 测试步骤5:传入无效的type参数
-r(count($repoTest->getCommitsTest($repo1, '', 'HEAD', 'dir', $pager2, 1))) && p() && e('3'); // 测试步骤6:使用不同分页参数获取提交记录
\ 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 40645fb11a..0000000000
--- a/module/repo/test/zen/getfilesinfo.php
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$gitRepo->SCM = 'Git';
-$gitRepo->name = 'TestGitRepo';
-r(count($repoTest->getFilesInfoTest($gitRepo, '', 'master', base64_encode('master'), 1))) && p() && e('2'); // 步骤1:正常Git仓库返回2个文件信息
-
-// 测试步骤2: 测试Gitlab仓库根路径文件列表
-$gitlabRepo = new stdClass();
-$gitlabRepo->id = 2;
-$gitlabRepo->SCM = 'Gitlab';
-$gitlabRepo->name = 'TestGitlabRepo';
-r($repoTest->getFilesInfoTest($gitlabRepo, '', 'master', base64_encode('master'), 1)) && p('0:revision') && e('~~'); // 步骤2:Gitlab仓库revision字段为空
-
-// 测试步骤3: 测试Subversion仓库根路径文件列表
-$svnRepo = new stdClass();
-$svnRepo->id = 3;
-$svnRepo->SCM = 'Subversion';
-$svnRepo->name = 'TestSvnRepo';
-r($repoTest->getFilesInfoTest($svnRepo, '', '', '', 1)) && p('0:revision') && e('1'); // 步骤3:SVN仓库返回数字revision
-
-// 测试步骤4: 测试空repo对象
-r($repoTest->getFilesInfoTest(null, '', '', '', 1)) && p() && e('0'); // 步骤4:空repo对象返回空数组
-
-// 测试步骤5: 测试Git仓库目录文件revision截取
-$gitRepo2 = new stdClass();
-$gitRepo2->id = 4;
-$gitRepo2->SCM = 'Git';
-$gitRepo2->name = 'TestGitRepo2';
-r(strlen($repoTest->getFilesInfoTest($gitRepo2, 'src', 'develop', base64_encode('develop'), 1)[0]->revision)) && p() && e('10'); // 步骤5:Git仓库revision被截取为10位
-
-// 测试步骤6: 测试Gitlab仓库文件comment为空
-$gitlabRepo2 = new stdClass();
-$gitlabRepo2->id = 5;
-$gitlabRepo2->SCM = 'Gitlab';
-$gitlabRepo2->name = 'TestGitlabRepo2';
-r($repoTest->getFilesInfoTest($gitlabRepo2, 'docs', 'main', base64_encode('main'), 1)) && p('0:comment') && e('~~'); // 步骤6:Gitlab文件comment为空
-
-// 测试步骤7: 测试Subversion仓库文件路径处理
-$svnRepo2 = new stdClass();
-$svnRepo2->id = 6;
-$svnRepo2->SCM = 'Subversion';
-$svnRepo2->name = 'TestSvnRepo2';
-r($repoTest->getFilesInfoTest($svnRepo2, 'trunk', '', '', 1)) && p('0:kind') && e('file'); // 步骤7:SVN仓库返回文件类型
\ 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 11e94afdd1..0000000000
--- a/module/repo/test/zen/getlinkbranches.php
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env php
-gen(0);
-zendata('branch')->gen(0);
-
-su('admin');
-
-$repoTest = new repoZenTest();
-
-$emptyProducts = array();
-$normalProducts = array();
-$product1 = new stdClass();
-$product1->id = 1;
-$product1->name = 'Normal Product';
-$product1->type = 'normal';
-$normalProducts[1] = $product1;
-
-$branchProducts = array();
-$product2 = new stdClass();
-$product2->id = 2;
-$product2->name = 'Branch Product';
-$product2->type = 'branch';
-$branchProducts[2] = $product2;
-
-$platformProducts = array();
-$product3 = new stdClass();
-$product3->id = 3;
-$product3->name = 'Platform Product';
-$product3->type = 'platform';
-$platformProducts[3] = $product3;
-
-$mixedProducts = array();
-$product4 = new stdClass();
-$product4->id = 1;
-$product4->name = 'Normal Product 1';
-$product4->type = 'normal';
-$mixedProducts[1] = $product4;
-
-$product5 = new stdClass();
-$product5->id = 2;
-$product5->name = 'Branch Product 1';
-$product5->type = 'branch';
-$mixedProducts[2] = $product5;
-
-$product6 = new stdClass();
-$product6->id = 3;
-$product6->name = 'Platform Product 1';
-$product6->type = 'platform';
-$mixedProducts[3] = $product6;
-
-r($repoTest->getLinkBranchesTest($emptyProducts)) && p() && e('0'); // 测试步骤1:空产品数组
-r($repoTest->getLinkBranchesTest($normalProducts)) && p() && e('0'); // 测试步骤2:仅包含normal类型产品
-r($repoTest->getLinkBranchesTest($branchProducts)) && p() && e('0'); // 测试步骤3:包含branch类型产品但无分支
-r(count($repoTest->getLinkBranchesTest($branchProducts))) && p() && e('0'); // 测试步骤4:验证branch类型产品返回0个分支(无分支数据)
-r(count($repoTest->getLinkBranchesTest($mixedProducts))) && p() && e('0'); // 测试步骤5:包含多个产品类型,返回0个分支(无分支数据)
\ 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 d3a4f35f55..0000000000
--- a/module/repo/test/zen/getsearchformquery.php
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env php
-gen(0);
-
-su('admin');
-
-// 测试步骤1: 验证查询对象返回begin属性
-$query1 = new stdclass();
-$query1->begin = '2023-01-01';
-$query1->end = '';
-$query1->committer = '';
-$query1->commit = '';
-r($query1) && p('begin') && e('2023-01-01'); // 测试步骤1:验证查询对象返回begin属性
-
-// 测试步骤2: 验证查询对象返回end属性
-$query2 = new stdclass();
-$query2->begin = '';
-$query2->end = '2023-12-31';
-$query2->committer = '';
-$query2->commit = '';
-r($query2) && p('end') && e('2023-12-31'); // 测试步骤2:验证查询对象返回end属性
-
-// 测试步骤3: 验证查询对象返回committer属性
-$query3 = new stdclass();
-$query3->begin = '';
-$query3->end = '';
-$query3->committer = 'admin';
-$query3->commit = '';
-r($query3) && p('committer') && e('admin'); // 测试步骤3:验证查询对象返回committer属性
-
-// 测试步骤4: 验证查询对象返回commit属性
-$query4 = new stdclass();
-$query4->begin = '';
-$query4->end = '';
-$query4->committer = '';
-$query4->commit = 'abc123';
-r($query4) && p('commit') && e('abc123'); // 测试步骤4:验证查询对象返回commit属性
-
-// 测试步骤5: 验证多个属性组合返回值
-$query5 = new stdclass();
-$query5->begin = '2024-01-01';
-$query5->end = '2024-12-31';
-$query5->committer = 'user1';
-$query5->commit = 'def456';
-r($query5) && p('begin') && e('2024-01-01'); // 测试步骤5:验证多个属性组合返回值
\ 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 07df5127f4..0000000000
--- a/module/repo/test/zen/preparecreate.php
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/env php
- 'Git',
- 'client' => 'git',
- 'name' => 'test-repo',
- 'path' => '/test/path',
- 'product' => '1',
- 'projects' => '1',
- 'acl' => array('acl' => 'open')
-);
-
-$containerFormData = array(
- 'SCM' => 'Git',
- 'client' => '',
- 'name' => 'container-repo',
- 'path' => '/test/path'
-);
-
-$gitlabFormData = array(
- 'SCM' => 'Gitlab',
- 'path' => '/test/gitlab',
- 'serviceProject' => '123',
- 'name' => 'gitlab-repo'
-);
-
-// 测试步骤1: 正常Git仓库创建
-r($result1 = $repoZenTest->prepareCreateTest($normalFormData, false, 'normal')) && p('acl') && e('{"acl":"open"}');
-
-// 测试步骤2: 容器环境下Git仓库
-r($result2 = $repoZenTest->prepareCreateTest($containerFormData, false, 'container_git')) && p('acl') && e('{"acl":"open"}');
-
-// 测试步骤3: Gitlab仓库特殊字段处理 - 验证extra字段
-r($result3 = $repoZenTest->prepareCreateTest($gitlabFormData, false, 'gitlab')) && p('extra') && e('123');
-
-// 测试步骤4: ACL配置验证失败
-r($result4 = $repoZenTest->prepareCreateTest($normalFormData, false, 'acl_error')) && p() && e('0');
-
-// 测试步骤5: 流水线服务器重复项目检查
-r($result5 = $repoZenTest->prepareCreateTest($normalFormData, true, 'duplicate_project')) && p() && e('0');
-
-// 测试步骤6: 正常非流水线服务器场景 - 验证返回对象类型
-r(is_object($repoZenTest->prepareCreateTest($normalFormData, false, 'normal'))) && p() && e('1');
-
-// 测试步骤7: 验证ACL字段格式包含open
-r(strpos(json_encode($repoZenTest->prepareCreateTest($normalFormData, false, 'normal')), 'open') !== false) && p() && e('1');
\ 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 1b86a82176..0000000000
--- a/module/repo/test/zen/synclocalcommit.php
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$repo1->SCM = 'Git';
-$repo1->name = 'testrepo1';
-
-$repo2 = new stdClass();
-$repo2->id = 2;
-$repo2->SCM = 'Subversion';
-$repo2->name = 'testrepo2';
-
-$repo3 = new stdClass();
-$repo3->id = 3;
-$repo3->SCM = 'Git';
-$repo3->name = 'testrepo3';
-
-$repo4 = new stdClass();
-$repo4->id = 4;
-$repo4->SCM = 'Git';
-$repo4->name = 'testrepo4';
-
-$repo5 = new stdClass();
-$repo5->id = 5;
-$repo5->SCM = 'Git';
-$repo5->name = 'testrepo5';
-
-$repo6 = new stdClass();
-$repo6->id = 6;
-$repo6->SCM = 'Git';
-$repo6->name = 'testrepo6';
-
-$repo7 = new stdClass();
-$repo7->id = 7;
-$repo7->SCM = 'Git';
-$repo7->name = 'testrepo7';
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r($repoZenTest->syncLocalCommitTest($repo1, '', false)) && p() && e('0'); // 步骤1:日志文件不存在时应返回空字符串
-r($repoZenTest->syncLocalCommitTest($repo2, "Line 1\nLine 2\nfatal: repository not found\n", true)) && p() && e('fatal: repository not found'); // 步骤2:日志包含fatal错误时应返回错误行内容
-r($repoZenTest->syncLocalCommitTest($repo3, "Line 1\nLine 2\nfailed to connect\n", true)) && p() && e('failed to connect'); // 步骤3:日志包含failed错误时应返回错误行内容
-r($repoZenTest->syncLocalCommitTest($repo4, "Line 1\nLine 2\ndone\n", true)) && p() && e('0'); // 步骤4:日志包含done标记且成功完成时应删除文件并返回空字符串
-r($repoZenTest->syncLocalCommitTest($repo5, "Line 1\nempty repository\n", true)) && p() && e('0'); // 步骤5:日志包含empty repository标记时应删除文件并返回空字符串
-r($repoZenTest->syncLocalCommitTest($repo6, "Line 1\nTotal 100 objects\n", true)) && p() && e('1'); // 步骤6:日志包含Total标记但未完成finishCount时应返回处理中状态
-r($repoZenTest->syncLocalCommitTest($repo7, "Line 1\nCounting objects: 100%\nCompressing objects: 100%\nTotal 100 objects\n", true)) && p() && e('0'); // 步骤7:日志包含Total标记和finishCount及finishCompress时应删除文件并返回空字符串
\ 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 6325321a6d..0000000000
--- a/module/report/test/zen/assignannualdata.php
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env php
-gen(20);
-zenData('dept')->gen(10);
-zenData('action')->gen(100);
-zenData('todo')->gen(50);
-zenData('effort')->gen(50);
-zenData('story')->gen(30);
-zenData('task')->gen(40);
-zenData('bug')->gen(25);
-zenData('case')->gen(30);
-zenData('product')->gen(5);
-
-su('admin');
-
-$reportTest = new reportTest();
-
-r($reportTest->assignAnnualDataTest('2024', '1', 'admin', array('admin'), 10)) && p('hasLogins') && e('yes'); // 测试有account参数的情况,返回hasLogins标识
-r($reportTest->assignAnnualDataTest('2024', '1', '', array('user1', 'user2'), 10)) && p('hasUsers') && e('yes'); // 测试有dept参数的情况,返回hasUsers标识
-r($reportTest->assignAnnualDataTest('2024', '0', '', array(), 10)) && p('allTimeStatus') && e('yes'); // 测试dept为0且account为空的情况,返回allTimeStatus标识
-r($reportTest->assignAnnualDataTest('2024', '1', '', array(), 10)) && p('deptEmptyAccounts') && e('yes'); // 测试dept不为0且accounts为空的边界情况,返回deptEmptyAccounts标识
-r($reportTest->assignAnnualDataTest('2024', '1', '', array('admin', 'user1'), 10)) && p('hasTodos') && e('yes'); // 测试正常dept和accounts参数的情况,返回hasTodos标识
-r($reportTest->assignAnnualDataTest('2024', '1', '', array('admin', 'user1'), 10)) && p('hasContributions') && e('yes'); // 测试正常参数的情况,返回hasContributions标识
-r($reportTest->assignAnnualDataTest('2024', '1', '', array('admin', 'user1'), 10)) && p('hasConsumed') && e('yes'); // 测试正常参数的情况,返回hasConsumed标识
\ 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 5b264d4712..0000000000
--- a/module/screen/test/model/gennotfoundordraftcomponentoption.php
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env php
-genNotFoundOrDraftComponentOptionTest(null, (object)array(), 'chart')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤1:测试chart类型,空component和空chart对象
-r($screenTest->genNotFoundOrDraftComponentOptionTest(null, (object)array('name' => '测试图表'), 'chart')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted,notFoundText') && e('1,1,1,1,图表 测试图表 未找到或处于草稿状态'); // 步骤2:测试chart类型,空component和有name的chart对象
-r($screenTest->genNotFoundOrDraftComponentOptionTest(null, (object)array('name' => '测试透视表'), 'pivot')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted,notFoundText') && e('1,1,1,1,透视表 测试透视表 未找到或处于草稿状态'); // 步骤3:测试pivot类型,空component和有name的chart对象
-r($screenTest->genNotFoundOrDraftComponentOptionTest((object)array('option' => new stdclass()), (object)array('name' => '测试图表2'), 'chart')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤4:测试chart类型,已有option的component对象
-r($screenTest->genNotFoundOrDraftComponentOptionTest((object)array('option' => (object)array('title' => new stdclass())), (object)array('name' => '测试图表3'), 'chart')) && p('hasOption,hasTitle,hasNotFoundText,isDeleted') && e('1,1,1,1'); // 步骤5:测试chart类型,已有option和title的component对象
\ 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 ccc8224b49..0000000000
--- a/module/search/test/model/buildoldquery.php
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env php
-= '2024-01-01' AND `openedDate` <= '2024-01-01 23:59:59') ) AND ( 1 ))
-- 执行search模块的buildOldQueryTest方法,参数是$searchConfig, $postData6 属性query @(( 1 AND (`openedDate` < '2024-01-01' OR `openedDate` > '2024-01-01 23:59:59') ) AND ( 1 ))
-- 执行search2模块的buildOldQueryTest方法,参数是$searchConfig2, $postData7 属性query @(( 1 ) AND ( 1 ))
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/search.unittest.class.php';
-
-su('admin');
-
-$searchConfig = array();
-$searchConfig['module'] = 'bug';
-$searchConfig['fields'] = array();
-$searchConfig['fields']['title'] = 'Bug Title';
-$searchConfig['fields']['status'] = 'Bug Status';
-$searchConfig['fields']['openedDate'] = 'Opened Date';
-$searchConfig['params'] = array();
-$searchConfig['params']['title']['operator'] = 'include';
-$searchConfig['params']['title']['control'] = 'input';
-$searchConfig['params']['title']['value'] = '';
-$searchConfig['params']['status']['operator'] = '=';
-$searchConfig['params']['status']['control'] = 'select';
-$searchConfig['params']['status']['value'] = array('active' => 'Active', 'closed' => 'Closed');
-$searchConfig['params']['openedDate']['operator'] = '=';
-$searchConfig['params']['openedDate']['control'] = 'input';
-$searchConfig['params']['openedDate']['value'] = '';
-$searchConfig['onMenuBar'] = 'yes';
-$searchConfig['actionURL'] = '/index.php?m=bug&f=browse&productID=110&branch=0&browseType=bySearch&queryID=myQueryID';
-$searchConfig['queryID'] = 0;
-
-$search = new searchTest();
-
-// 测试步骤1:正常搜索条件构建(include操作符)
-$postData1 = array(
- 'module' => 'bug',
- 'field1' => 'title',
- 'andOr1' => 'and',
- 'operator1' => 'include',
- 'value1' => 'test',
- 'groupAndOr' => 'AND'
-);
-r($search->buildOldQueryTest($searchConfig, $postData1)) && p('query') && e("(( 1 AND `title` LIKE '%test%' ) AND ( 1 ))");
-
-// 测试步骤2:特殊值'0'的处理(ZERO转换)
-$postData2 = array(
- 'module' => 'bug',
- 'field1' => 'title',
- 'andOr1' => 'and',
- 'operator1' => 'include',
- 'value1' => '0',
- 'groupAndOr' => 'AND'
-);
-r($search->buildOldQueryTest($searchConfig, $postData2)) && p('query') && e("(( 1 AND `title` LIKE '%0%' ) AND ( 1 ))");
-
-// 测试步骤3:多条件组合(AND逻辑)
-$postData3 = array(
- 'module' => 'bug',
- 'field1' => 'title',
- 'andOr1' => 'and',
- 'operator1' => 'include',
- 'value1' => 'bug',
- 'field2' => 'status',
- 'andOr2' => 'and',
- 'operator2' => '=',
- 'value2' => 'active',
- 'groupAndOr' => 'AND'
-);
-r($search->buildOldQueryTest($searchConfig, $postData3)) && p('query') && e("(( 1 AND `title` LIKE '%bug%' AND `status` = 'active' ) AND ( 1 ))");
-
-// 测试步骤4:多条件组合(OR逻辑)
-$postData4 = array(
- 'module' => 'bug',
- 'field1' => 'title',
- 'andOr1' => 'and',
- 'operator1' => 'include',
- 'value1' => 'bug',
- 'field2' => 'status',
- 'andOr2' => 'or',
- 'operator2' => '=',
- 'value2' => 'active',
- 'groupAndOr' => 'AND'
-);
-r($search->buildOldQueryTest($searchConfig, $postData4)) && p('query') && e("(( 1 AND `title` LIKE '%bug%' OR `status` = 'active' ) AND ( 1 ))");
-
-// 测试步骤5:日期格式的特殊处理(等于)
-$postData5 = array(
- 'module' => 'bug',
- 'field1' => 'openedDate',
- 'andOr1' => 'and',
- 'operator1' => '=',
- 'value1' => '2024-01-01',
- 'groupAndOr' => 'AND'
-);
-r($search->buildOldQueryTest($searchConfig, $postData5)) && p('query') && e("(( 1 AND (`openedDate` >= '2024-01-01' AND `openedDate` <= '2024-01-01 23:59:59') ) AND ( 1 ))");
-
-// 测试步骤6:日期格式的特殊处理(不等于)
-$postData6 = array(
- 'module' => 'bug',
- 'field1' => 'openedDate',
- 'andOr1' => 'and',
- 'operator1' => '!=',
- 'value1' => '2024-01-01',
- 'groupAndOr' => 'AND'
-);
-r($search->buildOldQueryTest($searchConfig, $postData6)) && p('query') && e("(( 1 AND (`openedDate` < '2024-01-01' OR `openedDate` > '2024-01-01 23:59:59') ) AND ( 1 ))");
-
-// 测试步骤7:SQL注入防护测试
-$searchConfig2 = array();
-$searchConfig2['module'] = 'bug';
-$searchConfig2['fields'] = array('title' => 'Bug Title');
-$searchConfig2['params'] = array('title' => array('operator' => 'include', 'control' => 'input', 'value' => ''));
-$searchConfig2['onMenuBar'] = 'yes';
-$searchConfig2['actionURL'] = '/index.php?m=bug&f=browse&productID=110&branch=0&browseType=bySearch&queryID=myQueryID';
-$searchConfig2['queryID'] = 0;
-
-$search2 = new searchTest();
-$postData7 = array(
- 'module' => 'bug',
- 'field1' => 'title; DROP TABLE users; --',
- 'andOr1' => 'and',
- 'operator1' => 'include',
- 'value1' => 'test',
- 'groupAndOr' => 'AND'
-);
-r($search2->buildOldQueryTest($searchConfig2, $postData7)) && 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 89368a522b..0000000000
--- a/module/search/test/model/getoldquery.php
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env php
-gen(10);
-
-$search = new searchTest();
-
-r($search->getOldQueryTest(1)) && p('id,account,module') && e('1,admin,task'); // 步骤1:正常查询存在的记录
-r($search->getOldQueryTest(999)) && p() && e('0'); // 步骤2:查询不存在的记录
-r($search->getOldQueryTest(2)) && p('id,module,title') && e('2,task,这是搜索条件名称2'); // 步骤3:查询第2条记录验证基本属性
-r($search->getOldQueryTest(3)) && p('id,module,title') && e('3,task,这是搜索条件名称3'); // 步骤4:查询第3条记录验证基本属性
-r($search->getOldQueryTest(0)) && p() && e('0'); // 步骤5:查询ID为0的边界值
\ 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 100644
index 583aa94610..0000000000
--- a/module/search/test/tao/checkfeedbackandticketpriv.php
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env php
-> 验证返回结果数量为1
-- 测试feedback类型,用户有产品授权,应保留结果 >> 验证返回结果数量为1
-- 测试feedback类型,用户无授权且非创建者,应移除结果 >> 验证返回结果数量为0
-- 测试ticket类型,用户有产品授权,应保留结果 >> 验证返回结果数量为1
-- 测试ticket类型,用户无产品授权,应移除结果 >> 验证返回结果数量为0
-- 测试多条feedback记录的混合权限过滤 >> 验证保留有权限的记录
-- 测试空结果集输入 >> 验证返回空数组
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-$feedback = zenData('feedback');
-$feedback->id->range('1-10');
-$feedback->product->range('1,1,2,2,3,3,4,4,5,5');
-$feedback->title->range('Feedback1,Feedback2,Feedback3,Feedback4,Feedback5,Feedback6,Feedback7,Feedback8,Feedback9,Feedback10');
-$feedback->openedBy->range('admin,user1,user2,user3,user4,user5,admin,user1,user2,user3');
-$feedback->status->range('noreview');
-$feedback->gen(10);
-
-$ticket = zenData('ticket');
-$ticket->id->range('1-10');
-$ticket->product->range('1,1,2,2,3,3,4,4,5,5');
-$ticket->title->range('Ticket1,Ticket2,Ticket3,Ticket4,Ticket5,Ticket6,Ticket7,Ticket8,Ticket9,Ticket10');
-$ticket->openedBy->range('admin,user1,user2,user3,user4,user5,admin,user1,user2,user3');
-$ticket->status->range('wait');
-$ticket->gen(10);
-
-$feedbackview = zenData('feedbackview');
-$feedbackview->account->range('admin,user1,user1');
-$feedbackview->product->range('1,1,2');
-$feedbackview->gen(3);
-
-su('admin');
-
-$searchTest = new searchTaoTest();
-
-$results1 = array(1 => (object)array('id' => 1, 'objectID' => 1, 'objectType' => 'feedback', 'title' => 'Feedback Result 1'));
-$objectIdList1 = array(1 => 1);
-$table1 = TABLE_FEEDBACK;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results1, $objectIdList1, $table1))) && p() && e('1');
-
-$results2 = array(2 => (object)array('id' => 2, 'objectID' => 2, 'objectType' => 'feedback', 'title' => 'Feedback Result 2'));
-$objectIdList2 = array(2 => 2);
-$table2 = TABLE_FEEDBACK;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results2, $objectIdList2, $table2))) && p() && e('1');
-
-su('user2');
-$results3 = array(3 => (object)array('id' => 3, 'objectID' => 3, 'objectType' => 'feedback', 'title' => 'Feedback Result 3'));
-$objectIdList3 = array(3 => 3);
-$table3 = TABLE_FEEDBACK;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results3, $objectIdList3, $table3))) && p() && e('0');
-
-su('admin');
-$results4 = array(4 => (object)array('id' => 4, 'objectID' => 1, 'objectType' => 'ticket', 'title' => 'Ticket Result 1'));
-$objectIdList4 = array(1 => 4);
-$table4 = TABLE_TICKET;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('ticket', $results4, $objectIdList4, $table4))) && p() && e('1');
-
-su('user3');
-$results5 = array(5 => (object)array('id' => 5, 'objectID' => 5, 'objectType' => 'ticket', 'title' => 'Ticket Result 5'));
-$objectIdList5 = array(5 => 5);
-$table5 = TABLE_TICKET;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('ticket', $results5, $objectIdList5, $table5))) && p() && e('0');
-
-su('user1');
-$results6 = array(1 => (object)array('id' => 1, 'objectID' => 1, 'objectType' => 'feedback', 'title' => 'Feedback Result 1'), 2 => (object)array('id' => 2, 'objectID' => 2, 'objectType' => 'feedback', 'title' => 'Feedback Result 2'), 3 => (object)array('id' => 3, 'objectID' => 3, 'objectType' => 'feedback', 'title' => 'Feedback Result 3'));
-$objectIdList6 = array(1 => 1, 2 => 2, 3 => 3);
-$table6 = TABLE_FEEDBACK;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results6, $objectIdList6, $table6))) && p() && e('2');
-
-su('admin');
-$results7 = array();
-$objectIdList7 = array();
-$table7 = TABLE_FEEDBACK;
-r(count($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results7, $objectIdList7, $table7))) && p() && e('0');
diff --git a/module/search/test/tao/processdocrecord.php b/module/search/test/tao/processdocrecord.php
deleted file mode 100755
index 35fc12aa31..0000000000
--- a/module/search/test/tao/processdocrecord.php
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/usr/bin/env php
-loadYaml('processdocrecord', false, 2)->gen(10);
-
-su('admin');
-
-$searchTest = new searchTaoTest();
-
-$record1 = new stdClass();
-$record1->objectID = 1;
-$record1->objectType = 'doc';
-
-$doc1 = new stdClass();
-$doc1->id = 1;
-$doc1->assetLib = 0;
-$doc1->assetLibType = '';
-
-$objectList1 = array('doc' => array(1 => $doc1));
-
-$record2 = new stdClass();
-$record2->objectID = 3;
-$record2->objectType = 'doc';
-
-$doc2 = new stdClass();
-$doc2->id = 3;
-$doc2->assetLib = 1;
-$doc2->assetLibType = 'practice';
-
-$objectList2 = array('doc' => array(3 => $doc2));
-
-$record3 = new stdClass();
-$record3->objectID = 5;
-$record3->objectType = 'doc';
-
-$doc3 = new stdClass();
-$doc3->id = 5;
-$doc3->assetLib = 2;
-$doc3->assetLibType = 'component';
-
-$objectList3 = array('doc' => array(5 => $doc3));
-
-$record4 = new stdClass();
-$record4->objectID = 7;
-$record4->objectType = 'doc';
-
-$doc4 = new stdClass();
-$doc4->id = 7;
-$doc4->assetLib = 1;
-$doc4->assetLibType = '';
-
-$objectList4 = array('doc' => array(7 => $doc4));
-
-$record5 = new stdClass();
-$record5->objectID = 9;
-$record5->objectType = 'doc';
-
-$doc5 = new stdClass();
-$doc5->id = 9;
-$doc5->assetLib = 0;
-$doc5->assetLibType = '';
-
-$objectList5 = array('doc' => array(9 => $doc5));
-
-r($searchTest->processDocRecordTest($record1, $objectList1)) && p('url') && e('doc-view-1.html'); // 测试普通文档记录(无assetLib)
-r($searchTest->processDocRecordTest($record2, $objectList2)) && p('url') && e('assetlib-practiceView-3.html'); // 测试资产库文档记录(assetLibType为practice)
-r($searchTest->processDocRecordTest($record3, $objectList3)) && p('url') && e('assetlib-componentView-5.html'); // 测试资产库文档记录(assetLibType为component)
-r($searchTest->processDocRecordTest($record4, $objectList4)) && p('url') && e('assetlib-componentView-7.html'); // 测试资产库文档记录(assetLibType为空)
-r($searchTest->processDocRecordTest($record5, $objectList5)) && p('url') && e('doc-view-9.html'); // 测试文档记录的URL是否包含正确的objectID
\ 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 100644
index 57fd471e2e..0000000000
--- a/module/search/test/tao/processexecutionrecord.php
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env php
-> 验证URL包含execution-view且extraType为空
-- 测试看板执行类型(kanban),应生成kanban链接 >> 验证URL包含execution-kanban且extraType为kanban
-- 测试迭代执行类型(stage),应生成view链接 >> 验证URL包含execution-view且extraType为stage
-- 测试空类型执行,应生成view链接 >> 验证URL包含execution-view且extraType为空
-- 测试另一个普通执行,验证ID和URL正确生成 >> 验证URL包含execution-view且record ID正确
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-$project = zenData('project');
-$project->id->range('1-10');
-$project->name->range('项目1,项目2,项目3,项目4,项目5,项目6,项目7,项目8,项目9,项目10');
-$project->type->range('sprint,kanban,stage,sprint,sprint,kanban,sprint,stage,sprint,sprint');
-$project->status->range('doing');
-$project->deleted->range('0');
-$project->gen(10);
-
-su('admin');
-
-$searchTest = new searchTaoTest();
-
-$record1 = (object)array('id' => 1, 'objectID' => 1, 'objectType' => 'execution', 'title' => 'Execution 1', 'url' => '', 'extraType' => '');
-$objectList1 = array('execution' => array(1 => (object)array('id' => 1, 'type' => 'sprint', 'project' => 1)));
-$result1 = $searchTest->processExecutionRecordTest($record1, $objectList1);
-r(strpos($result1->url, 'execution-view') !== false && $result1->extraType == '') && p() && e('1');
-
-$record2 = (object)array('id' => 2, 'objectID' => 2, 'objectType' => 'execution', 'title' => 'Execution 2', 'url' => '', 'extraType' => '');
-$objectList2 = array('execution' => array(2 => (object)array('id' => 2, 'type' => 'kanban', 'project' => 2)));
-$result2 = $searchTest->processExecutionRecordTest($record2, $objectList2);
-r(strpos($result2->url, 'execution-kanban') !== false && $result2->extraType == 'kanban') && p() && e('1');
-
-$record3 = (object)array('id' => 3, 'objectID' => 3, 'objectType' => 'execution', 'title' => 'Execution 3', 'url' => '', 'extraType' => '');
-$objectList3 = array('execution' => array(3 => (object)array('id' => 3, 'type' => 'stage', 'project' => 3)));
-$result3 = $searchTest->processExecutionRecordTest($record3, $objectList3);
-r(strpos($result3->url, 'execution-view') !== false && $result3->extraType == 'stage') && p() && e('1');
-
-$record4 = (object)array('id' => 4, 'objectID' => 4, 'objectType' => 'execution', 'title' => 'Execution 4', 'url' => '', 'extraType' => '');
-$objectList4 = array('execution' => array(4 => (object)array('id' => 4, 'type' => '', 'project' => 4)));
-$result4 = $searchTest->processExecutionRecordTest($record4, $objectList4);
-r(strpos($result4->url, 'execution-view') !== false && $result4->extraType == '') && p() && e('1');
-
-$record5 = (object)array('id' => 5, 'objectID' => 5, 'objectType' => 'execution', 'title' => 'Execution 5', 'url' => '', 'extraType' => '');
-$objectList5 = array('execution' => array(5 => (object)array('id' => 5, 'type' => 'sprint', 'project' => 5)));
-$result5 = $searchTest->processExecutionRecordTest($record5, $objectList5);
-r(strpos($result5->url, 'execution-view') !== false && $result5->id == 5) && p() && e('1');
diff --git a/module/search/test/tao/processprojectrecord.php b/module/search/test/tao/processprojectrecord.php
deleted file mode 100644
index ece44925ee..0000000000
--- a/module/search/test/tao/processprojectrecord.php
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/usr/bin/env php
-> url属性包含project-view-1
-- 执行searchTest模块的processProjectRecordTest方法,项目模型为waterfall,参数是$record2, $objectList2 >> url属性包含project-view-2
-- 执行searchTest模块的processProjectRecordTest方法,项目模型为kanban,参数是$record3, $objectList3 >> url属性包含project-index-3
-- 执行searchTest模块的processProjectRecordTest方法,项目模型为空,参数是$record4, $objectList4 >> url属性包含project-view-4
-- 执行searchTest模块的processProjectRecordTest方法,项目模型为agileplus,参数是$record5, $objectList5 >> url属性包含project-view-5
-- 执行searchTest模块的processProjectRecordTest方法,项目模型为waterfallplus,参数是$record6, $objectList6 >> url属性包含project-view-6
-- 执行searchTest模块的processProjectRecordTest方法,项目ID为100,参数是$record7, $objectList7 >> url属性包含project-index-100
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-zenData('project')->gen(10);
-
-su('admin');
-
-$searchTest = new searchTaoTest();
-
-$record1 = new stdClass();
-$record1->objectType = 'project';
-$record1->objectID = 1;
-
-$record2 = new stdClass();
-$record2->objectType = 'project';
-$record2->objectID = 2;
-
-$record3 = new stdClass();
-$record3->objectType = 'project';
-$record3->objectID = 3;
-
-$record4 = new stdClass();
-$record4->objectType = 'project';
-$record4->objectID = 4;
-
-$record5 = new stdClass();
-$record5->objectType = 'project';
-$record5->objectID = 5;
-
-$record6 = new stdClass();
-$record6->objectType = 'project';
-$record6->objectID = 6;
-
-$record7 = new stdClass();
-$record7->objectType = 'project';
-$record7->objectID = 100;
-
-$project1 = new stdClass();
-$project1->model = 'scrum';
-
-$project2 = new stdClass();
-$project2->model = 'waterfall';
-
-$project3 = new stdClass();
-$project3->model = 'kanban';
-
-$project4 = new stdClass();
-$project4->model = '';
-
-$project5 = new stdClass();
-$project5->model = 'agileplus';
-
-$project6 = new stdClass();
-$project6->model = 'waterfallplus';
-
-$project7 = new stdClass();
-$project7->model = 'kanban';
-
-$objectList1 = array('project' => array(1 => $project1));
-$objectList2 = array('project' => array(2 => $project2));
-$objectList3 = array('project' => array(3 => $project3));
-$objectList4 = array('project' => array(4 => $project4));
-$objectList5 = array('project' => array(5 => $project5));
-$objectList6 = array('project' => array(6 => $project6));
-$objectList7 = array('project' => array(100 => $project7));
-
-r($searchTest->processProjectRecordTest($record1, $objectList1)) && p('url') && e('*/project-view-1.html');
-r($searchTest->processProjectRecordTest($record2, $objectList2)) && p('url') && e('*/project-view-2.html');
-r($searchTest->processProjectRecordTest($record3, $objectList3)) && p('url') && e('*/project-index-3.html');
-r($searchTest->processProjectRecordTest($record4, $objectList4)) && p('url') && e('*/project-view-4.html');
-r($searchTest->processProjectRecordTest($record5, $objectList5)) && p('url') && e('*/project-view-5.html');
-r($searchTest->processProjectRecordTest($record6, $objectList6)) && p('url') && e('*/project-view-6.html');
-r($searchTest->processProjectRecordTest($record7, $objectList7)) && p('url') && e('*/project-index-100.html');
diff --git a/module/search/test/tao/processrecord.php b/module/search/test/tao/processrecord.php
deleted file mode 100644
index d9ff847e9c..0000000000
--- a/module/search/test/tao/processrecord.php
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env php
-> url属性包含issue-view-1
-- 测试project类型的记录处理,项目模型为scrum >> url属性包含project-view-2
-- 测试execution类型的记录处理,执行类型为stage >> url属性包含execution-view-3
-- 测试project类型的记录处理,项目模型为kanban >> url属性包含project-index-4
-- 测试bug类型的记录处理 >> url属性包含bug-view-5
-- 测试story类型的记录处理,lib为空 >> url属性包含story-storyView-6
-- 测试普通类型的记录处理(testcase) >> url属性包含testcase-view-7
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-zenData('project')->gen(10);
-zenData('task')->gen(10);
-
-su('admin');
-
-$searchTest = new searchTaoTest();
-
-$record1 = new stdClass();
-$record1->objectType = 'issue';
-$record1->objectID = 1;
-
-$record2 = new stdClass();
-$record2->objectType = 'project';
-$record2->objectID = 2;
-
-$record3 = new stdClass();
-$record3->objectType = 'execution';
-$record3->objectID = 3;
-
-$record4 = new stdClass();
-$record4->objectType = 'project';
-$record4->objectID = 4;
-
-$record5 = new stdClass();
-$record5->objectType = 'bug';
-$record5->objectID = 5;
-
-$record6 = new stdClass();
-$record6->objectType = 'story';
-$record6->objectID = 6;
-
-$record7 = new stdClass();
-$record7->objectType = 'testcase';
-$record7->objectID = 7;
-
-$issue1 = new stdClass();
-$issue1->lib = '';
-$issue1->owner = '';
-$issue1->project = 1;
-
-$project2 = new stdClass();
-$project2->id = 2;
-$project2->model = 'scrum';
-
-$execution3 = new stdClass();
-$execution3->id = 3;
-$execution3->type = 'stage';
-$execution3->project = 1;
-
-$project4 = new stdClass();
-$project4->id = 4;
-$project4->model = 'kanban';
-
-$story6 = new stdClass();
-$story6->id = 6;
-$story6->type = 'story';
-$story6->lib = '';
-
-$objectList1 = array('issue' => array(1 => $issue1));
-$objectList2 = array('project' => array(2 => $project2));
-$objectList3 = array('execution' => array(3 => $execution3));
-$objectList4 = array('project' => array(4 => $project4));
-$objectList5 = array();
-$objectList6 = array('story' => array(6 => $story6));
-$objectList7 = array();
-
-r($searchTest->processRecordTest($record1, $objectList1)) && p('url') && e('*/issue-view-1.html');
-r($searchTest->processRecordTest($record2, $objectList2)) && p('url') && e('*/project-view-2.html');
-r($searchTest->processRecordTest($record3, $objectList3)) && p('url') && e('*/execution-view-3.html');
-r($searchTest->processRecordTest($record4, $objectList4)) && p('url') && e('*/project-index-4.html');
-r($searchTest->processRecordTest($record5, $objectList5)) && p('url') && e('*/bug-view-5.html');
-r($searchTest->processRecordTest($record6, $objectList6)) && p('url') && e('*/story-storyView-6.html');
-r($searchTest->processRecordTest($record7, $objectList7)) && p('url') && e('*/testcase-view-7.html');
diff --git a/module/search/test/tao/processriskrecord.php b/module/search/test/tao/processriskrecord.php
deleted file mode 100644
index 38b8a6cf50..0000000000
--- a/module/search/test/tao/processriskrecord.php
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/env php
-> url属性包含risk-view-1
-- 执行searchTao模块的processRiskRecordTest方法,module为risk,lib不为0 >> url属性包含assetlib-riskView-2
-- 执行searchTao模块的processRiskRecordTest方法,module为opportunity,lib为0 >> url属性包含opportunity-view-3
-- 执行searchTao模块的processRiskRecordTest方法,module为opportunity,lib不为0 >> url属性包含assetlib-opportunityView-4
-- 执行searchTao模块的processRiskRecordTest方法,module为risk,objectID为100,lib为0 >> url属性包含risk-view-100
-- 执行searchTao模块的processRiskRecordTest方法,module为opportunity,objectID为200,lib为0 >> url属性包含opportunity-view-200
-- 执行searchTao模块的processRiskRecordTest方法,module为risk,objectID为50,lib为15 >> url属性包含assetlib-riskView-50
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-zenData('risk')->gen(10);
-
-su('admin');
-
-global $config;
-$config->edition = 'max';
-
-$searchTest = new searchTaoTest();
-
-$record1 = new stdClass();
-$record1->objectType = 'risk';
-$record1->objectID = 1;
-
-$record2 = new stdClass();
-$record2->objectType = 'risk';
-$record2->objectID = 2;
-
-$record3 = new stdClass();
-$record3->objectType = 'opportunity';
-$record3->objectID = 3;
-
-$record4 = new stdClass();
-$record4->objectType = 'opportunity';
-$record4->objectID = 4;
-
-$record5 = new stdClass();
-$record5->objectType = 'risk';
-$record5->objectID = 100;
-
-$record6 = new stdClass();
-$record6->objectType = 'opportunity';
-$record6->objectID = 200;
-
-$record7 = new stdClass();
-$record7->objectType = 'risk';
-$record7->objectID = 50;
-
-$risk1 = new stdClass();
-$risk1->lib = 0;
-
-$risk2 = new stdClass();
-$risk2->lib = 5;
-
-$opportunity1 = new stdClass();
-$opportunity1->lib = 0;
-
-$opportunity2 = new stdClass();
-$opportunity2->lib = 10;
-
-$risk3 = new stdClass();
-$risk3->lib = 0;
-
-$opportunity3 = new stdClass();
-$opportunity3->lib = 0;
-
-$risk4 = new stdClass();
-$risk4->lib = 15;
-
-$objectList1 = array('risk' => array(1 => $risk1));
-$objectList2 = array('risk' => array(2 => $risk2));
-$objectList3 = array('opportunity' => array(3 => $opportunity1));
-$objectList4 = array('opportunity' => array(4 => $opportunity2));
-$objectList5 = array('risk' => array(100 => $risk3));
-$objectList6 = array('opportunity' => array(200 => $opportunity3));
-$objectList7 = array('risk' => array(50 => $risk4));
-
-r($searchTest->processRiskRecordTest($record1, 'risk', $objectList1)) && p('url') && e('*/risk-view-1.html');
-r($searchTest->processRiskRecordTest($record2, 'risk', $objectList2)) && p('url') && e('*/assetlib-riskView-2.html');
-r($searchTest->processRiskRecordTest($record3, 'opportunity', $objectList3)) && p('url') && e('*/opportunity-view-3.html');
-r($searchTest->processRiskRecordTest($record4, 'opportunity', $objectList4)) && p('url') && e('*/assetlib-opportunityView-4.html');
-r($searchTest->processRiskRecordTest($record5, 'risk', $objectList5)) && p('url') && e('*/risk-view-100.html');
-r($searchTest->processRiskRecordTest($record6, 'opportunity', $objectList6)) && p('url') && e('*/opportunity-view-200.html');
-r($searchTest->processRiskRecordTest($record7, 'risk', $objectList7)) && p('url') && e('*/assetlib-riskView-50.html');
diff --git a/module/search/test/tao/processstoryrecord.php b/module/search/test/tao/processstoryrecord.php
deleted file mode 100644
index 2be21f549f..0000000000
--- a/module/search/test/tao/processstoryrecord.php
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env php
-> url为空字符串
-- 执行searchTao模块的processStoryRecordTest方法,story类型,lib为0,vision为rnd >> url包含story-storyView-1
-- 执行searchTao模块的processStoryRecordTest方法,story类型,lib不为0 >> url包含assetlib-storyView-2
-- 执行searchTao模块的processStoryRecordTest方法,requirement类型,lib为0 >> extraType为requirement
-- 执行searchTao模块的processStoryRecordTest方法,epic类型,lib为0 >> extraType为epic
-- 执行searchTao模块的processStoryRecordTest方法,vision为lite >> url包含projectstory-storyView-6
-- 执行searchTao模块的processStoryRecordTest方法,story类型,lib为5,vision为rnd >> url包含assetlib-storyView-7且extraType为story
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-zenData('story')->gen(10);
-
-su('admin');
-
-global $config;
-
-$searchTest = new searchTaoTest();
-
-$record1 = new stdClass();
-$record1->objectType = 'story';
-$record1->objectID = 999;
-
-$record2 = new stdClass();
-$record2->objectType = 'story';
-$record2->objectID = 1;
-
-$record3 = new stdClass();
-$record3->objectType = 'story';
-$record3->objectID = 2;
-
-$record4 = new stdClass();
-$record4->objectType = 'requirement';
-$record4->objectID = 3;
-
-$record5 = new stdClass();
-$record5->objectType = 'epic';
-$record5->objectID = 4;
-
-$record6 = new stdClass();
-$record6->objectType = 'story';
-$record6->objectID = 6;
-
-$record7 = new stdClass();
-$record7->objectType = 'story';
-$record7->objectID = 7;
-
-$story1 = new stdClass();
-$story1->lib = 0;
-$story1->type = 'story';
-
-$story2 = new stdClass();
-$story2->lib = 10;
-$story2->type = 'story';
-
-$requirement1 = new stdClass();
-$requirement1->lib = 0;
-$requirement1->type = 'requirement';
-
-$epic1 = new stdClass();
-$epic1->lib = 0;
-$epic1->type = 'epic';
-
-$story6 = new stdClass();
-$story6->lib = 0;
-$story6->type = 'story';
-
-$story7 = new stdClass();
-$story7->lib = 5;
-$story7->type = 'story';
-
-$objectList1 = array('story' => array());
-$objectList2 = array('story' => array(1 => $story1));
-$objectList3 = array('story' => array(2 => $story2));
-$objectList4 = array('requirement' => array(3 => $requirement1));
-$objectList5 = array('epic' => array(4 => $epic1));
-$objectList6 = array('story' => array(6 => $story6));
-$objectList7 = array('story' => array(7 => $story7));
-
-$config->vision = 'rnd';
-r($searchTest->processStoryRecordTest($record1, 'story', $objectList1)) && p('url') && e('');
-r($searchTest->processStoryRecordTest($record2, 'story', $objectList2)) && p('url') && e('*/story-storyView-1.html');
-r($searchTest->processStoryRecordTest($record3, 'story', $objectList3)) && p('url') && e('*/assetlib-storyView-2.html');
-r($searchTest->processStoryRecordTest($record4, 'requirement', $objectList4)) && p('extraType') && e('requirement');
-r($searchTest->processStoryRecordTest($record5, 'epic', $objectList5)) && p('extraType') && e('epic');
-$config->vision = 'lite';
-r($searchTest->processStoryRecordTest($record6, 'story', $objectList6)) && p('url') && e('*/projectstory-storyView-6.html');
-$config->vision = 'rnd';
-r($searchTest->processStoryRecordTest($record7, 'story', $objectList7)) && p('url,extraType') && e('*/assetlib-storyView-7.html,story');
diff --git a/module/search/test/tao/processtaskrecord.php b/module/search/test/tao/processtaskrecord.php
deleted file mode 100755
index c668d746fe..0000000000
--- a/module/search/test/tao/processtaskrecord.php
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$task->project->range('1-10');
-$task->name->range('任务1,任务2,任务3,任务4,任务5,任务6,任务7,任务8,任务9,任务10');
-$task->status->range('wait');
-$task->deleted->range('0');
-$task->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');
-$project->multiple->range('1,0,1,0,1,0,1,0,1,0');
-$project->status->range('doing');
-$project->deleted->range('0');
-$project->gen(10);
-
-su('admin');
-
-/**
-
-title=测试 searchTao::processTaskRecord();
-timeout=0
-cid=18342
-
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record1 属性url @task-view-1
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record2
- - 属性url @task-view-2
- - 属性dataApp @project
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record3 属性url @task-view-3
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record4
- - 属性url @task-view-4
- - 属性dataApp @project
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record5 属性url @task-view-5
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record6
- - 属性url @task-view-6
- - 属性dataApp @project
-- 执行searchTest模块的processTaskRecordTest方法,参数是$record7 属性url @task-view-7
-
-*/
-
-$searchTest = new searchTaoTest();
-
-$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 = 4;
-
-$record5 = new stdClass();
-$record5->objectType = 'task';
-$record5->objectID = 5;
-
-$record6 = new stdClass();
-$record6->objectType = 'task';
-$record6->objectID = 6;
-
-$record7 = new stdClass();
-$record7->objectType = 'task';
-$record7->objectID = 7;
-
-r($searchTest->processTaskRecordTest($record1)) && p('url') && e('task-view-1');
-r($searchTest->processTaskRecordTest($record2)) && p('url;dataApp') && e('task-view-2;project');
-r($searchTest->processTaskRecordTest($record3)) && p('url') && e('task-view-3');
-r($searchTest->processTaskRecordTest($record4)) && p('url;dataApp') && e('task-view-4;project');
-r($searchTest->processTaskRecordTest($record5)) && p('url') && e('task-view-5');
-r($searchTest->processTaskRecordTest($record6)) && p('url;dataApp') && e('task-view-6;project');
-r($searchTest->processTaskRecordTest($record7)) && p('url') && e('task-view-7');
\ No newline at end of file
diff --git a/module/sonarqube/test/zen/getissuelist.php b/module/sonarqube/test/zen/getissuelist.php
deleted file mode 100755
index 8a1d7156a9..0000000000
--- a/module/sonarqube/test/zen/getissuelist.php
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env php
-id->range('100-110');
-$table->type->range('sonarqube{5},jenkins{3},gitlab{2}');
-$table->name->range('测试SonarQube{3},开发服务器{2},生产服务器{3},其他{2}');
-$table->url->range('http://test.com{3},https://prod.com{3},http://dev.com{4}');
-$table->token->range('squ_token123{5},squ_test456{3},squ_prod789{2}');
-$table->deleted->range('0{9},1{1}');
-$table->gen(10);
-
-su('admin');
-
-$sonarqubeTest = new sonarqubeZenTest();
-
-r($sonarqubeTest->getIssueListTest(100, 'test-project')) && p() && e('0');
-r($sonarqubeTest->getIssueListTest(101, '')) && p() && e('0');
-r($sonarqubeTest->getIssueListTest(999, 'test-project')) && p() && e('0');
-r($sonarqubeTest->getIssueListTest(0, 'test-project')) && p() && e('0');
-r($sonarqubeTest->getIssueListTest(102, 'non-cached-project')) && p() && e('0');
\ 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 597dd0f488..0000000000
--- a/module/story/test/tao/getproductreviewers.php
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env php
-> 返回包含admin和user1用户
-- 测试步骤2:获取有reviewer字段的private产品的评审人员列表 >> 返回包含admin和user2用户
-- 测试步骤3:获取无reviewer字段但ACL为private的产品评审人员列表 >> 返回有权限查看产品的用户列表
-- 测试步骤4:获取无reviewer字段且ACL为open的产品评审人员列表 >> 返回所有未关闭未删除用户
-- 测试步骤5:传入storyReviewers参数获取评审人员列表 >> 返回包含story评审人员的列表
-- 测试步骤6:获取有reviewer字段但用户已删除的产品评审人员 >> 返回不包含已删除用户的列表
-- 测试步骤7:获取ACL为custom的产品评审人员列表 >> 返回指定的评审人员
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/tao.class.php';
-
-$product = zenData('product');
-$product->id->range('1-7');
-$product->name->range('产品1,产品2,产品3,产品4,产品5,产品6,产品7');
-$product->acl->range('open,private,custom,open,private,open,private');
-$product->reviewer->range('admin,user1,admin,user2,[]{2},admin,user3,user5');
-$product->deleted->range('0');
-$product->gen(7);
-
-$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->password->range('123456{10}');
-$user->role->range('admin,dev{9}');
-$user->deleted->range('0{8},1,0');
-$user->gen(10);
-
-$usergroup = zenData('usergroup');
-$usergroup->account->range('admin,user1,user2,user3');
-$usergroup->group->range('1,2,2,2');
-$usergroup->gen(4);
-
-su('admin');
-
-$storyTest = new storyTaoTest();
-
-r($storyTest->getProductReviewersTest(1, array())) && p('admin,user1') && e('管理员,用户1');
-r($storyTest->getProductReviewersTest(2, array())) && p('admin,user2') && e('管理员,用户2');
-r($storyTest->getProductReviewersTest(5, array())) && p('admin;user1;user2;user3') && e('管理员;用户1;用户2;用户3');
-r($storyTest->getProductReviewersTest(4, array())) && p('admin;user1;user2;user3;user4;user5;user6;user7;user9') && e('管理员;用户1;用户2;用户3;用户4;用户5;用户6;用户7;用户9');
-r($storyTest->getProductReviewersTest(1, array('user4' => '用户4'))) && p('admin;user1;user4') && e('管理员;用户1;用户4');
-r($storyTest->getProductReviewersTest(7, array())) && p('admin,user3,user5') && e('管理员,用户3,用户5');
-r($storyTest->getProductReviewersTest(3, array())) && p('admin,user3') && e('管理员,用户3');
diff --git a/module/story/test/zen/getformfieldsforcreate.php b/module/story/test/zen/getformfieldsforcreate.php
deleted file mode 100755
index c7de11860d..0000000000
--- a/module/story/test/zen/getformfieldsforcreate.php
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$product->name->range('产品1,产品2,产品3,产品4,产品5,分支产品1,分支产品2,普通产品1,普通产品2,测试产品1');
-$product->type->range('normal{5},branch{2},normal{3}');
-$product->status->range('normal{10}');
-$product->PO->range('admin{10}');
-$product->createdBy->range('admin{10}');
-$product->acl->range('open{10}');
-$product->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->deleted->range('0{10}');
-$user->gen(10);
-
-$productplan = zenData('productplan');
-$productplan->id->range('1-5');
-$productplan->product->range('1-5');
-$productplan->branch->range('0{5}');
-$productplan->title->range('计划1,计划2,计划3,计划4,计划5');
-$productplan->status->range('wait{3},doing{2}');
-$productplan->deleted->range('0{5}');
-$productplan->gen(5);
-
-$module = zenData('module');
-$module->id->range('1-5');
-$module->root->range('1-5');
-$module->type->range('story{5}');
-$module->name->range('模块1,模块2,模块3,模块4,模块5');
-$module->deleted->range('0{5}');
-$module->gen(5);
-
-$story = zenData('story');
-$story->id->range('1-10');
-$story->product->range('1-3');
-$story->title->range('需求1,需求2,需求3,需求4,需求5{5}');
-$story->type->range('story{5},requirement{3},epic{2}');
-$story->status->range('active{10}');
-$story->stage->range('wait{10}');
-$story->openedBy->range('admin{10}');
-$story->assignedTo->range('admin{10}');
-$story->reviewedBy->range('admin{10}');
-$story->closedBy->range('admin{10}');
-$story->estimate->range('1-8');
-$story->grade->range('1-3');
-$story->branch->range('0{10}');
-$story->parent->range('-1{2},0{8}');
-$story->gen(10);
-
-$project = zenData('project');
-$project->id->range('1-5');
-$project->name->range('项目1,项目2,项目3,项目4,项目5');
-$project->type->range('project{5}');
-$project->status->range('doing{5}');
-$project->deleted->range('0{5}');
-$project->gen(5);
-
-$projectproduct = zenData('projectproduct');
-$projectproduct->project->range('1{3},2{2}');
-$projectproduct->product->range('1,2,3,1,4');
-$projectproduct->gen(5);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$storyTest = new storyZenTest();
-
-// 5. 测试步骤(必须至少5个)
-r($storyTest->getFormFieldsForCreateTest(1, '0', 0, 'story')) && p('product:name') && e('product'); // 步骤1:测试普通产品创建需求的表单字段包含product字段
-r($storyTest->getFormFieldsForCreateTest(6, '0', 0, 'story')) && p('branch:name') && e('branch'); // 步骤2:测试分支产品创建需求的表单字段包含branch字段
-r($storyTest->getFormFieldsForCreateTest(1, '0', 1, 'story')) && p('product:default') && e('1'); // 步骤3:测试带执行项目创建需求时产品默认值设置正确
-r($storyTest->getFormFieldsForCreateTest(1, '0', 0, 'requirement')) && p('grade:name') && e('grade'); // 步骤4:测试需求类型为requirement时grade字段存在
-r($storyTest->getFormFieldsForCreateTest(1, '0', 0, 'epic')) && p('reviewer:name') && e('reviewer'); // 步骤5:测试需求类型为epic时reviewer字段存在
\ 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 c57dec0381..0000000000
--- a/module/story/test/zen/getformfieldsforreview.php
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env php
-loadYaml('getformfieldsforreview/story')->gen(20);
-zenData('user')->loadYaml('getformfieldsforreview/user')->gen(10);
-zenData('product')->gen(5);
-
-su('admin');
-
-$storyIDs = array(1, 6, 11, 13, 7, 3);
-
-$storyTester = new storyZenTest();
-r($storyTester->getFormFieldsForReviewTest($storyIDs[0])) && p('result:control,required') && e('picker,1'); // 测试获取软件需求评审表单字段的基本结构
-r($storyTester->getFormFieldsForReviewTest($storyIDs[1])) && p('assignedTo:control') && e('picker'); // 测试获取用户需求评审表单字段的assignedTo字段
-r($storyTester->getFormFieldsForReviewTest($storyIDs[2])) && p('pri:default') && e('3'); // 测试reviewing状态且版本为1的需求评审字段的pri默认值
-r($storyTester->getFormFieldsForReviewTest($storyIDs[3])) && p('estimate:default') && e('9'); // 测试reviewing状态且版本大于1的需求评审字段的estimate默认值
-r($storyTester->getFormFieldsForReviewTest($storyIDs[4])) && p('status:default') && e('closed'); // 测试active状态需求的评审表单字段的status默认值
-r($storyTester->getFormFieldsForReviewTest($storyIDs[5])) && p('comment:control') && e('editor'); // 测试评审表单字段的comment字段control属性
\ 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 a52fb8b52d..0000000000
--- a/module/story/test/zen/processdataforedit.php
+++ /dev/null
@@ -1,88 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$story->product->range('1');
-$story->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10');
-$story->type->range('story{5},requirement{5}');
-$story->status->range('draft{3},changing{2},active{5}');
-$story->stage->range('wait{5},planned{5}');
-$story->version->range('1');
-$story->gen(10);
-
-zenData('user')->gen(5);
-
-su('admin');
-
-$storyTest = new storyZenTest();
-
-// 测试1:changing状态需求修改为draft时保持changing状态
-$storyData = new stdClass();
-$storyData->status = 'draft';
-$oldStory = array('id' => 4, 'type' => 'story', 'status' => 'changing', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(4, $storyData, $oldStory)) && p('status') && e('changing');
-
-// 测试2:plan参数为数组时转换为字符串并去除首尾逗号
-$_POST['plan'] = array('', '5', '');
-$storyData = new stdClass();
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && p('plan') && e('5');
-unset($_POST['plan']);
-
-// 测试3:branch参数为0时设置branch为0
-$_POST['branch'] = 0;
-$storyData = new stdClass();
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && p('branch') && e('0');
-unset($_POST['branch']);
-
-// 测试4:stage变更为tested时设置stagedBy为当前用户
-$storyData = new stdClass();
-$storyData->stage = 'tested';
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && p('stagedBy') && e('admin');
-
-// 测试5:stage变更为verified时设置stagedBy为当前用户
-$storyData = new stdClass();
-$storyData->stage = 'verified';
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && p('stagedBy') && e('admin');
-
-// 测试6:stage变更为released时设置stagedBy为当前用户
-$storyData = new stdClass();
-$storyData->stage = 'released';
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && p('stagedBy') && e('admin');
-
-// 测试7:stage变更为closed时设置stagedBy为当前用户
-$storyData = new stdClass();
-$storyData->stage = 'closed';
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && p('stagedBy') && e('admin');
-
-// 测试8:stage变更为rejected时设置stagedBy为当前用户
-$storyData = new stdClass();
-$storyData->stage = 'rejected';
-$oldStory = array('id' => 1, 'type' => 'story', 'status' => 'draft', 'stage' => 'wait');
-r($storyTest->processDataForEditTest(1, $storyData, $oldStory)) && 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 3acbb16973..0000000000
--- a/module/story/test/zen/processfiltertitle.php
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$product->name->range('测试产品A,测试产品B,测试产品C{5}');
-$product->status->range('normal{10}');
-$product->deleted->range('0{10}');
-$product->gen(10);
-
-$module = zenData('module');
-$module->id->range('1-10');
-$module->name->range('模块1,模块2,模块3{5}');
-$module->type->range('story{10}');
-$module->deleted->range('0{10}');
-$module->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->deleted->range('0{10}');
-$user->gen(10);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 设置必要的语言变量和配置
-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->execution->featureBar['story']['unclosed'] = '未关闭';
-$lang->execution->featureBar['story']['draft'] = '草稿';
-$lang->execution->featureBar['story']['reviewing'] = '评审中';
-$lang->execution->featureBar['story']['all'] = '全部';
-
-$lang->search->andor = new stdclass();
-$lang->search->andor->and = ' 并且 ';
-$lang->search->andor->or = ' 或者 ';
-
-$lang->search->operators = new stdclass();
-$lang->search->operators->equal = '=';
-$lang->search->operators->include = '包含';
-
-$config->execution->search['fields']['module'] = '模块';
-$config->product->search['fields']['module'] = '模块';
-
-// 设置搜索配置以避免错误
-$_SESSION['executionStoryForm'] = null;
-$_SESSION['executionStorysearchParams'] = array('params' => array('module' => array('values' => array(1 => '模块1', 2 => '模块2'))));
-$_SESSION['projectstoryForm'] = null;
-$_SESSION['projectstorysearchParams'] = array('params' => array('module' => array('values' => array(1 => '模块1', 2 => '模块2'))));
-$_SESSION['multiple'] = false;
-
-$app->session = new stdclass();
-$app->session->executionStoryForm = null;
-$app->session->executionStorysearchParams = array('params' => array('module' => array('values' => array(1 => '模块1', 2 => '模块2'))));
-$app->session->projectstoryForm = null;
-$app->session->projectstorysearchParams = array('params' => array('module' => array('values' => array(1 => '模块1', 2 => '模块2'))));
-$app->session->multiple = false;
-
-// 5. 创建测试实例
-$storyTest = new storyZenTest();
-
-// 6. 强制要求:必须包含至少5个测试步骤
-r($storyTest->processFilterTitleTest('unclosed', 0)) && p() && e('状态: 未关闭'); // 步骤1:普通状态过滤(未关闭)
-r($storyTest->processFilterTitleTest('byproduct', 1)) && p() && e('状态: 测试产品A'); // 步骤2:按产品过滤
-r($storyTest->processFilterTitleTest('bymodule', 1)) && p() && e('模块 = 模块1'); // 步骤3:按模块过滤
-r($storyTest->processFilterTitleTest('draft', 0)) && p() && e('状态: 草稿'); // 步骤4:草稿状态过滤
-r($storyTest->processFilterTitleTest('reviewing', 0)) && p() && e('状态: 评审中'); // 步骤5:评审中状态过滤
\ 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 6d441d9eab..0000000000
--- a/module/story/test/zen/setformoptionsforbatchedit.php
+++ /dev/null
@@ -1,98 +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->type->range('normal{3},branch{2}');
-$product->status->range('normal');
-$product->gen(5);
-
-$module = zenData('module');
-$module->id->range('1-20');
-$module->root->range('1{5},2{5},3{5},4{3},5{2}');
-$module->branch->range('0{15},1{3},2{2}');
-$module->name->range('模块1,模块2,模块3,模块4,模块5{15}');
-$module->type->range('story');
-$module->gen(20);
-
-$productplan = zenData('productplan');
-$productplan->id->range('1-10');
-$productplan->product->range('1-5');
-$productplan->branch->range('0{8},1,2');
-$productplan->title->range('计划1,计划2,计划3,计划4,计划5{5}');
-$productplan->gen(10);
-
-$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');
-$user->gen(5);
-
-su('admin');
-
-$storyTest = new storyZenTest();
-
-$story1 = new stdClass();
-$story1->id = 1;
-$story1->product = 1;
-$story1->branch = 0;
-$story1->module = 1;
-$story1->plan = '';
-$story1->status = 'active';
-$story1->type = 'story';
-
-$story2 = new stdClass();
-$story2->id = 2;
-$story2->product = 1;
-$story2->branch = 0;
-$story2->module = 2;
-$story2->plan = '';
-$story2->status = 'active';
-$story2->type = 'story';
-
-$story3 = new stdClass();
-$story3->id = 3;
-$story3->product = 2;
-$story3->branch = 0;
-$story3->module = 6;
-$story3->plan = '';
-$story3->status = 'active';
-$story3->type = 'story';
-
-$story4 = new stdClass();
-$story4->id = 4;
-$story4->product = 3;
-$story4->branch = 0;
-$story4->module = 11;
-$story4->plan = '';
-$story4->status = 'closed';
-$story4->type = 'story';
-
-$singleProductStories = array(1 => $story1, 2 => $story2);
-$multiProductStories = array(1 => $story1, 3 => $story3, 4 => $story4);
-
-r($storyTest->setFormOptionsForBatchEditTest(1, 0, $singleProductStories)) && p('branchProduct') && e('0');
-r($storyTest->setFormOptionsForBatchEditTest(1, 0, $singleProductStories)) && p('users:admin') && e('`A:管理员`');
-r($storyTest->setFormOptionsForBatchEditTest(1, 0, $singleProductStories)) && p('moduleList:0') && e('/');
-r($storyTest->setFormOptionsForBatchEditTest(0, 0, $multiProductStories)) && p('branchProduct') && e('1');
-r($storyTest->setFormOptionsForBatchEditTest(0, 0, $multiProductStories)) && p('plans') && e('0');
diff --git a/module/task/test/model/updateparent.php b/module/task/test/model/updateparent.php
deleted file mode 100755
index fe5e70dc64..0000000000
--- a/module/task/test/model/updateparent.php
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env php
-id->range('1-20');
-$table->parent->range('0,0,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0');
-$table->path->range('`1`, `2`, `1,3`, `1,4`, `3,5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, `18`, `19`, `20`')->prefix(',')->postfix(',');
-$table->isParent->range('0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0');
-$table->name->range('任务1,任务2,任务3,任务4,任务5,任务6,任务7,任务8,任务9,任务10,任务11,任务12,任务13,任务14,任务15,任务16,任务17,任务18,任务19,任务20');
-$table->execution->range('1-20');
-$table->project->range('1');
-$table->status->range('wait');
-$table->assignedTo->range('admin');
-$table->gen(20);
-
-zenData('action')->gen(0);
-zenData('taskteam')->gen(0);
-
-su('admin');
-
-$taskTest = new taskTest();
-
-// 测试步骤1: 测试任务2设置父任务为任务1
-$task = new stdClass();
-$task->id = 2;
-$task->parent = 1;
-r($taskTest->updateParentTest($task, false)) && p('path') && e(',1,2,');
-
-// 测试步骤2: 验证父任务1的isParent字段被设置为1
-global $tester;
-$parentTask = $tester->loadModel('task')->fetchByID(1);
-r($parentTask) && p('isParent') && e('1');
-
-// 测试步骤3: 测试任务4更改父任务从1到6
-$task = new stdClass();
-$task->id = 4;
-$task->parent = 6;
-r($taskTest->updateParentTest($task, true)) && p('path') && e(',6,4,');
-
-// 测试步骤4: 测试任务3移除父任务
-$task = new stdClass();
-$task->id = 3;
-$task->parent = 0;
-r($taskTest->updateParentTest($task, true)) && p('path') && e(',3,');
-
-// 测试步骤5: 测试任务7设置父任务为1
-$task = new stdClass();
-$task->id = 7;
-$task->parent = 1;
-r($taskTest->updateParentTest($task, false)) && p('path') && e(',1,7,');
-
-// 测试步骤6: 测试任务8设置父任务为3,形成多层级结构
-$task = new stdClass();
-$task->id = 8;
-$task->parent = 3;
-r($taskTest->updateParentTest($task, false)) && p('path') && e(',3,8,');
-
-// 测试步骤7: 测试任务10从无父任务变为有父任务
-$task = new stdClass();
-$task->id = 10;
-$task->parent = 5;
-r($taskTest->updateParentTest($task, true)) && p('path') && e(',3,5,10,');
diff --git a/module/task/test/zen/buildeffortforfinish.php b/module/task/test/zen/buildeffortforfinish.php
deleted file mode 100755
index b5a7d02d2f..0000000000
--- a/module/task/test/zen/buildeffortforfinish.php
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$oldTask->name = 'Test Task';
-
-$task1 = new stdclass();
-$task1->id = 1;
-$task1->finishedDate = '2024-01-15 10:30:00';
-$task1->work = 'Original work description';
-
-$task2 = new stdclass();
-$task2->id = 1;
-$task2->finishedDate = '2024-01-15 10:30:00';
-$task2->work = 'Original work description';
-
-$task3 = new stdclass();
-$task3->id = 1;
-$task3->finishedDate = '2024-01-15 10:30:00';
-$task3->work = 'Original work description';
-
-$task4 = new stdclass();
-$task4->id = 1;
-$task4->finishedDate = '2024-01-15 10:30:00';
-$task4->work = 'Original work description';
-
-$task5 = new stdclass();
-$task5->id = 1;
-$task5->finishedDate = '2024-01-15 10:30:00';
-$task5->work = 'Original work description';
-
-$task6 = new stdclass();
-$task6->id = 1;
-$task6->finishedDate = '2024-01-15 10:30:00';
-$task6->work = 'Original work description';
-
-r($taskTest->buildEffortForFinishTest($oldTask, $task1, '3.5', '')) && p('consumed,left,account,task') && e('3.5,0,admin,1');
-r($taskTest->buildEffortForFinishTest($oldTask, $task2, '0', '')) && p('consumed,left,task') && e('0,0,1');
-r($taskTest->buildEffortForFinishTest($oldTask, $task3, '-1', '')) && p('0') && e('"总计消耗"必须大于之前消耗');
-r($taskTest->buildEffortForFinishTest($oldTask, $task4, '5', '')) && p('date') && e('2024-01-15');
-r($taskTest->buildEffortForFinishTest($oldTask, $task5, '1.5', '')) && p('work,consumed') && e('Original work description,1.5');
-r($taskTest->buildEffortForFinishTest($oldTask, $task6, '2', 'New work comment')) && p('work,consumed') && e('New work comment,2');
\ 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 fdf3360cb3..0000000000
--- a/module/task/test/zen/processexportdata.php
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/env php
-> 期望story字段包含需求标题 @用户需求1(
-timeout=0
-cid=18937
-
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的name属性 @Task 1
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的story属性 @用户需求1(#1)
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的fromBug属性 @#1 BUG1
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的name属性 @[多人] Multi task
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的name属性 @[父] Parent task
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的progress属性 @0%
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的progress属性 @30%
-- 执行taskTest模块的processExportDataTest方法,参数是array 第0条的progress属性 @100%
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/taskzen.unittest.class.php';
-
-zenData('user')->loadYaml('user', false, 2)->gen(10);
-zenData('project')->loadYaml('project', false, 4)->gen(10);
-zenData('story')->loadYaml('story', false, 4)->gen(10);
-zenData('bug')->loadYaml('bug', false, 1)->gen(10);
-zenData('module')->loadYaml('module', false, 1)->gen(10);
-zenData('file')->loadYaml('file', false, 1)->gen(5);
-
-su('admin');
-
-$taskTest = new taskZenTest();
-
-$task1 = new stdClass();
-$task1->id = 1;
-$task1->project = 1;
-$task1->execution = 1;
-$task1->module = 1;
-$task1->story = 0;
-$task1->fromBug = 0;
-$task1->name = 'Task 1';
-$task1->type = 'devel';
-$task1->mode = 'linear';
-$task1->pri = 1;
-$task1->estimate = 5;
-$task1->consumed = 2;
-$task1->left = 3;
-$task1->status = 'doing';
-$task1->desc = 'Desc 1';
-$task1->mailto = '';
-$task1->team = '';
-$task1->isParent = 0;
-$task1->parent = 0;
-$task1->openedBy = 'admin';
-$task1->openedDate = '2024-01-01 10:00:00';
-$task1->assignedTo = 'admin';
-$task1->assignedDate = '2024-01-02 11:00:00';
-$task1->finishedBy = '';
-$task1->finishedDate = '0000-00-00 00:00:00';
-$task1->canceledBy = '';
-$task1->canceledDate = '0000-00-00 00:00:00';
-$task1->closedBy = '';
-$task1->closedDate = '0000-00-00 00:00:00';
-$task1->closedReason = '';
-$task1->lastEditedBy = '';
-$task1->lastEditedDate = '0000-00-00 00:00:00';
-
-$baseTask = new stdClass();
-$baseTask->type = 'devel';
-$baseTask->mode = 'linear';
-$baseTask->pri = 1;
-$baseTask->status = 'doing';
-$baseTask->desc = 'Base desc';
-$baseTask->openedBy = 'admin';
-$baseTask->openedDate = '2024-01-01 10:00:00';
-$baseTask->assignedTo = 'admin';
-$baseTask->assignedDate = '2024-01-02 11:00:00';
-$baseTask->finishedBy = '';
-$baseTask->finishedDate = '0000-00-00 00:00:00';
-$baseTask->canceledBy = '';
-$baseTask->canceledDate = '0000-00-00 00:00:00';
-$baseTask->closedBy = '';
-$baseTask->closedDate = '0000-00-00 00:00:00';
-$baseTask->closedReason = '';
-$baseTask->lastEditedBy = '';
-$baseTask->lastEditedDate = '0000-00-00 00:00:00';
-
-$task2 = clone $baseTask;
-$task2->id = 2;
-$task2->project = 1;
-$task2->execution = 1;
-$task2->module = 2;
-$task2->story = 1;
-$task2->fromBug = 0;
-$task2->name = 'Task with story';
-$task2->estimate = 8;
-$task2->consumed = 4;
-$task2->left = 4;
-$task2->mailto = '';
-$task2->team = '';
-$task2->isParent = 0;
-$task2->parent = 0;
-
-$task3 = clone $baseTask;
-$task3->id = 3;
-$task3->project = 1;
-$task3->execution = 1;
-$task3->module = 3;
-$task3->story = 0;
-$task3->fromBug = 1;
-$task3->name = 'Task with bug';
-$task3->estimate = 3;
-$task3->consumed = 1;
-$task3->left = 2;
-$task3->mailto = '';
-$task3->team = '';
-$task3->isParent = 0;
-$task3->parent = 0;
-
-$task4 = clone $baseTask;
-$task4->id = 4;
-$task4->project = 1;
-$task4->execution = 1;
-$task4->module = 4;
-$task4->story = 0;
-$task4->fromBug = 0;
-$task4->name = 'Multi task';
-$task4->estimate = 10;
-$task4->consumed = 5;
-$task4->left = 5;
-$task4->mailto = '';
-$task4->team = 'team1';
-$task4->isParent = 0;
-$task4->parent = 0;
-
-$task5 = clone $baseTask;
-$task5->id = 5;
-$task5->project = 1;
-$task5->execution = 1;
-$task5->module = 5;
-$task5->story = 0;
-$task5->fromBug = 0;
-$task5->name = 'Parent task';
-$task5->estimate = 20;
-$task5->consumed = 10;
-$task5->left = 10;
-$task5->mailto = '';
-$task5->team = '';
-$task5->isParent = 1;
-$task5->parent = 0;
-
-$task6 = clone $baseTask;
-$task6->id = 6;
-$task6->project = 1;
-$task6->execution = 1;
-$task6->module = 6;
-$task6->story = 0;
-$task6->fromBug = 0;
-$task6->name = 'Not started';
-$task6->estimate = 5;
-$task6->consumed = 0;
-$task6->left = 0;
-$task6->mailto = '';
-$task6->team = '';
-$task6->isParent = 0;
-$task6->parent = 0;
-
-$task7 = clone $baseTask;
-$task7->id = 7;
-$task7->project = 1;
-$task7->execution = 1;
-$task7->module = 7;
-$task7->story = 0;
-$task7->fromBug = 0;
-$task7->name = 'In progress';
-$task7->estimate = 10;
-$task7->consumed = 3;
-$task7->left = 7;
-$task7->mailto = '';
-$task7->team = '';
-$task7->isParent = 0;
-$task7->parent = 0;
-
-$task8 = clone $baseTask;
-$task8->id = 8;
-$task8->project = 1;
-$task8->execution = 1;
-$task8->module = 8;
-$task8->story = 0;
-$task8->fromBug = 0;
-$task8->name = 'Completed';
-$task8->estimate = 6;
-$task8->consumed = 6;
-$task8->left = 0;
-$task8->mailto = '';
-$task8->team = '';
-$task8->isParent = 0;
-$task8->parent = 0;
-
-r($taskTest->processExportDataTest(array($task1), 1)) && p('0:name') && e('Task 1');
-r($taskTest->processExportDataTest(array($task2), 1)) && p('0:story') && e('用户需求1(#1)');
-r($taskTest->processExportDataTest(array($task3), 1)) && p('0:fromBug') && e('#1 BUG1');
-r($taskTest->processExportDataTest(array($task4), 1)) && p('0:name') && e('[多人] Multi task');
-r($taskTest->processExportDataTest(array($task5), 1)) && p('0:name') && e('[父] Parent task');
-r($taskTest->processExportDataTest(array($task6), 1)) && p('0:progress') && e('0%');
-r($taskTest->processExportDataTest(array($task7), 1)) && p('0:progress') && e('30%');
-r($taskTest->processExportDataTest(array($task8), 1)) && p('0:progress') && e('100%');
\ 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 fefd1d8cfd..0000000000
--- a/module/task/test/zen/responseafterrecord.php
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$task->project->range('1');
-$task->execution->range('1{5},2{5}');
-$task->fromBug->range('0,1,2,3,0,0,0,0,0,0');
-$task->status->range('doing{5},done{5}');
-$task->gen(10);
-
-$bug = zenData('bug');
-$bug->id->range('1-10');
-$bug->status->range('active{5},resolved{5}');
-$bug->gen(10);
-
-$project = zenData('project');
-$project->id->range('1-5');
-$project->project->range('0,1,1,0,4');
-$project->name->range('项目1,执行1,执行2,项目2,执行3');
-$project->type->range('project,sprint,sprint,project,sprint');
-$project->gen(5);
-
-su('admin');
-
-$taskTest = new taskZenTest();
-
-$task1 = new stdclass();
-$task1->id = 1;
-$task1->execution = 1;
-$task1->fromBug = 0;
-$task1->status = 'doing';
-
-$task2 = new stdclass();
-$task2->id = 2;
-$task2->execution = 1;
-$task2->fromBug = 1;
-$task2->status = 'doing';
-
-$task3 = new stdclass();
-$task3->id = 3;
-$task3->execution = 1;
-$task3->fromBug = 2;
-$task3->status = 'done';
-
-$task4 = new stdclass();
-$task4->id = 4;
-$task4->execution = 1;
-$task4->fromBug = 6;
-$task4->status = 'done';
-
-$task5 = new stdclass();
-$task5->id = 5;
-$task5->execution = 1;
-$task5->fromBug = 0;
-$task5->status = 'done';
-
-$task6 = new stdclass();
-$task6->id = 6;
-$task6->execution = 2;
-$task6->fromBug = 0;
-$task6->status = 'done';
-
-$task7 = new stdclass();
-$task7->id = 7;
-$task7->execution = 2;
-$task7->fromBug = 0;
-$task7->status = 'done';
-
-$changes1 = array();
-$changes2 = array();
-$changes3 = array(array('field' => 'status', 'old' => 'doing', 'new' => 'done'));
-$changes4 = array(array('field' => 'status', 'old' => 'doing', 'new' => 'done'));
-$changes5 = array(array('field' => 'status', 'old' => 'doing', 'new' => 'done'));
-
-r($taskTest->responseAfterRecordTest($task1, $changes1, '', false)) && p('result') && e('success');
-r($taskTest->responseAfterRecordTest($task2, $changes2, '', false)) && p('result') && e('success');
-r($taskTest->responseAfterRecordTest($task3, $changes3, '', false)) && p('result') && e('success');
-r($taskTest->responseAfterRecordTest($task4, $changes4, '', false)) && p('result') && e('success');
-r($taskTest->responseAfterRecordTest($task5, $changes5, '', true)) && p('result') && e('success');
-r($taskTest->responseAfterRecordTest($task6, $changes5, '', true)) && p('result') && e('success');
-r($taskTest->responseAfterRecordTest($task7, $changes5, 'taskkanban', true)) && p('callback') && e('refreshKanban()');
\ 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 bbbf9ab0b1..0000000000
--- a/module/testcase/test/zen/addeditaction.php
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env php
-loadYaml('case', false, 2)->gen(10);
-zendata('action')->gen(0);
-
-su('admin');
-
-$testcaseTest = new testcaseZenTest();
-
-$changes1 = array(array('field' => 'title', 'old' => '旧标题', 'new' => '新标题'));
-$changes2 = array();
-$changes3 = array(
- array('field' => 'title', 'old' => '旧标题', 'new' => '新标题'),
- array('field' => 'pri', 'old' => '1', 'new' => '2'),
- array('field' => 'type', 'old' => 'feature', 'new' => 'performance')
-);
-$comment1 = '这是一个评论';
-
-r($testcaseTest->addEditActionTest(1, 'normal', 'normal', $changes1, '')) && p('actionCount') && e('1'); // 测试步骤1:有变更时创建编辑动作
-r($testcaseTest->addEditActionTest(2, 'normal', 'normal', $changes1, $comment1)) && p('actionCount') && e('1'); // 测试步骤2:有变更和评论时创建编辑动作
-r($testcaseTest->addEditActionTest(3, 'normal', 'normal', $changes2, $comment1)) && p('actionCount') && e('1'); // 测试步骤3:只有评论无变更时创建评论动作
-r($testcaseTest->addEditActionTest(4, 'normal', 'wait', $changes1, '')) && p('actionCount') && e('2'); // 测试步骤4:状态从normal变为wait时创建编辑和提交审核两个动作
-r($testcaseTest->addEditActionTest(5, 'wait', 'normal', $changes1, '')) && p('actionCount') && e('1'); // 测试步骤5:状态从wait变为normal时只创建编辑动作
-r($testcaseTest->addEditActionTest(6, 'wait', 'wait', $changes1, '')) && p('actionCount') && e('1'); // 测试步骤6:状态保持wait不变时只创建编辑动作
-r($testcaseTest->addEditActionTest(7, 'normal', 'normal', $changes3, $comment1)) && p('actionCount') && e('1'); // 测试步骤7:有多个变更字段时创建编辑动作
\ 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 73f14e96e9..0000000000
--- a/module/testcase/test/zen/assignbranchforedit.php
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env php
-loadYaml('case_assignbranchforedit', false, 2)->gen(10);
-zendata('branch')->loadYaml('branch_assignbranchforedit', false, 2)->gen(10);
-zendata('product')->loadYaml('product_assignbranchforedit', false, 2)->gen(5);
-
-su('admin');
-
-$testcaseTest = new testcaseZenTest();
-
-$case1 = new stdClass();
-$case1->id = 1;
-$case1->product = 1;
-$case1->project = 1;
-$case1->branch = 1;
-
-$case2 = new stdClass();
-$case2->id = 2;
-$case2->product = 1;
-$case2->project = 2;
-$case2->branch = 2;
-
-$case3 = new stdClass();
-$case3->id = 3;
-$case3->product = 1;
-$case3->project = 1;
-$case3->branch = 10;
-
-$case4 = new stdClass();
-$case4->id = 4;
-$case4->product = 1;
-$case4->project = 1;
-$case4->branch = 999;
-
-$case5 = new stdClass();
-$case5->id = 5;
-$case5->product = 2;
-$case5->project = 3;
-$case5->branch = 3;
-
-r($testcaseTest->assignBranchForEditTest($case1, 1, 'execution')) && p('1') && e('分支1');
-r($testcaseTest->assignBranchForEditTest($case2, 0, 'project')) && p('2') && e('分支2 (已关闭)');
-r($testcaseTest->assignBranchForEditTest($case3, 1, 'execution')) && p('10') && e('分支10 (已关闭)');
-r($testcaseTest->assignBranchForEditTest($case4, 1, 'execution')) && p('999') && e('0');
-r(count($testcaseTest->assignBranchForEditTest($case5, 3, 'execution'))) && p() && e('1');
\ 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 dedd96f567..0000000000
--- a/module/testcase/test/zen/assigncreatescenevars.php
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env php
-loadYaml('assigncreatescenevars/product', false, 2)->gen(10);
-zendata('branch')->loadYaml('assigncreatescenevars/branch', false, 2)->gen(10);
-zendata('module')->loadYaml('assigncreatescenevars/module', false, 2)->gen(20);
-zendata('scene')->loadYaml('assigncreatescenevars/scene', false, 2)->gen(10);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$testcaseTest = new testcaseZenTest();
-
-// 5. 测试步骤
-r($testcaseTest->assignCreateSceneVarsTest(1, '', 0)) && p('executed') && e('1'); // 步骤1:正常产品ID,空分支,无模块
-r($testcaseTest->assignCreateSceneVarsTest(6, '1', 0)) && p('executed') && e('1'); // 步骤2:有分支的产品,指定分支
-r($testcaseTest->assignCreateSceneVarsTest(1, '', 5)) && p('executed') && e('1'); // 步骤3:正常产品,指定模块ID
-r($testcaseTest->assignCreateSceneVarsTest(7, '', 0)) && p('executed') && e('1'); // 步骤4:分支产品但分支为空
-r($testcaseTest->assignCreateSceneVarsTest(2, '', 10)) && p('executed') && e('1'); // 步骤5:正常产品,指定大的模块ID
\ 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 1511f4caaa..0000000000
--- a/module/testcase/test/zen/assignmoduleoptionmenuforedit.php
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$productTable->name->range('产品1,产品2,产品3,产品4,产品5');
-$productTable->type->range('normal{2},branch{2},platform{1}');
-$productTable->status->range('normal');
-$productTable->deleted->range('0');
-$productTable->gen(5);
-
-// 模块数据
-$moduleTable = zenData('module');
-$moduleTable->id->range('1-20');
-$moduleTable->root->range('1{5},2{5},3{5},4{3},5{2}');
-$moduleTable->branch->range('0{5},1{5},2{5},0{3},1{2}');
-$moduleTable->name->range('模块A,模块B,模块C,模块D,模块E,模块F,模块G,模块H,模块I,模块J,模块K,模块L,模块M,模块N,模块O,模块P,模块Q,模块R,模块S,模块T');
-$moduleTable->type->range('case');
-$moduleTable->parent->range('0');
-$moduleTable->grade->range('1');
-$moduleTable->deleted->range('0');
-$moduleTable->gen(20);
-
-// 用例数据
-$caseTable = zenData('case');
-$caseTable->id->range('1-10');
-$caseTable->product->range('1{5},2{3},3{2}');
-$caseTable->module->range('1,2,3,4,5,6,7,8,11,12');
-$caseTable->branch->range('0{3},1{4},2{3}');
-$caseTable->lib->range('0');
-$caseTable->fromCaseID->range('0');
-$caseTable->title->range('测试用例A,测试用例B,测试用例C,测试用例D,测试用例E,测试用例F,测试用例G,测试用例H,测试用例I,测试用例J');
-$caseTable->type->range('feature');
-$caseTable->status->range('normal');
-$caseTable->deleted->range('0');
-$caseTable->gen(10);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$testcaseTest = new testcaseTest();
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(1))) && p('1') && e('/模块A'); // 步骤1:普通产品用例(branch=0)
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(4))) && p('4') && e('/模块D'); // 步骤2:分支产品用例(branch=1)
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(7))) && p('7') && e('/模块G'); // 步骤3:分支产品用例(branch=2)
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(2))) && p('2') && e('/模块B'); // 步骤4:产品1的第一个模块
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(3))) && p('3') && e('/模块C'); // 步骤5:产品1的第二个模块
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(6))) && p('6') && e('/模块F'); // 步骤6:产品2的模块
-r($testcaseTest->assignModuleOptionMenuForEditTest($testcaseTest->objectModel->loadModel('testcase')->getByID(8))) && p('8') && e('/模块H'); // 步骤7:产品2分支用例
\ 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 1427c6f41a..0000000000
--- a/module/testcase/test/zen/buildbrowsesearchform.php
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env php
-id->range('1-5');
-$product->name->range('产品A,产品B,产品C,产品D,产品E');
-$product->type->range('normal');
-$product->status->range('normal');
-$product->deleted->range('0');
-$product->gen(5);
-
-$project = zenData('project');
-$project->id->range('1-3');
-$project->name->range('项目A,项目B,项目C');
-$project->type->range('project');
-$project->status->range('doing');
-$project->deleted->range('0');
-$project->gen(3);
-
-$case = zenData('case');
-$case->id->range('1-10');
-$case->product->range('1-5');
-$case->project->range('1-3');
-$case->title->range('测试用例{1-10}');
-$case->status->range('normal');
-$case->deleted->range('0');
-$case->gen(10);
-
-// 3. 用户登录
-su('admin');
-
-// 4. 创建测试实例
-$testcaseTest = new testcaseTest();
-
-// 5. 测试步骤
-r($testcaseTest->buildBrowseSearchFormTest(1, 0, 1, 'testcase-browse-1.html', 'testcase')) && p('onMenuBar') && e('yes'); // 步骤1:在testcase模块下构建搜索表单
-r($testcaseTest->buildBrowseSearchFormTest(1, 0, 1, 'testcase-browse-1.html', 'other')) && p('onMenuBar') && e('~~'); // 步骤2:在非testcase模块下构建搜索表单
-r($testcaseTest->buildBrowseSearchFormTest(1, 0, 0, 'testcase-browse-1.html', 'testcase')) && p('searchProductsCount') && e('5'); // 步骤3:使用有效productID构建搜索表单
-r($testcaseTest->buildBrowseSearchFormTest(2, 1, 0, 'testcase-browse-2.html', 'testcase')) && p('searchFieldsCount') && e('20'); // 步骤4:使用有效queryID构建搜索表单
-r($testcaseTest->buildBrowseSearchFormTest(3, 0, 2, 'testcase-browse-3.html', 'testcase')) && p('searchFieldsCount') && e('20'); // 步骤5:使用有效projectID构建搜索表单
\ No newline at end of file
diff --git a/module/testcase/test/zen/getstatusforupdate.php b/module/testcase/test/zen/getstatusforupdate.php
deleted file mode 100755
index 7be90449cf..0000000000
--- a/module/testcase/test/zen/getstatusforupdate.php
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env php
-loadYaml('case_getstatusforupdate', false, 2)->gen(5);
-
-$stepTable = zenData('casestep');
-$stepTable->loadYaml('casestep_getstatusforupdate', false, 2)->gen(10);
-
-// 3. 设置配置以启用审核
-global $config;
-$config->testcase->needReview = '1';
-
-// 4. 用户登录
-su('admin');
-
-// 5. 创建测试实例
-$testcaseTest = new testcaseZenTest();
-
-// 6. 准备测试数据 - 创建用例对象,包含步骤信息
-$case = new stdClass();
-$case->id = 1;
-$case->title = '测试用例标题1';
-$case->precondition = '前置条件描述1';
-$case->status = 'normal';
-$case->lastEditedDate = '2023-09-01 10:00:00';
-
-// 创建步骤对象
-$step1 = new stdClass();
-$step1->desc = '步骤描述1';
-$step1->expect = '期望结果1';
-$step1->type = 'step';
-
-$step2 = new stdClass();
-$step2->desc = '步骤描述2';
-$step2->expect = '期望结果2';
-$step2->type = 'step';
-
-$case->steps = array($step1, $step2);
-
-// 7. 测试步骤
-// 步骤1:正常情况下无变更 - 相同的数据
-$postData1 = array(
- 'title' => '测试用例标题1',
- 'precondition' => '前置条件描述1',
- 'status' => 'normal',
- 'lastEditedDate' => '2023-09-01 10:00:00',
- 'steps' => array('步骤描述1', '步骤描述2'),
- 'stepType' => array('step', 'step'),
- 'expects' => array('期望结果1', '期望结果2')
-);
-$result1 = $testcaseTest->getStatusForUpdateTest($case, $postData1);
-r($result1[0]) && p() && e('0');
-r($result1[1]) && p() && e('normal');
-
-// 步骤2:步骤内容发生变更
-$postData2 = array(
- 'title' => '测试用例标题1',
- 'precondition' => '前置条件描述1',
- 'status' => 'normal',
- 'lastEditedDate' => '2023-09-01 10:00:00',
- 'steps' => array('修改后的步骤描述', '步骤描述2'),
- 'stepType' => array('step', 'step'),
- 'expects' => array('期望结果1', '期望结果2')
-);
-$result2 = $testcaseTest->getStatusForUpdateTest($case, $postData2);
-r($result2[0]) && p() && e('1');
-r($result2[1]) && p() && e('wait');
-
-// 步骤3:并发编辑冲突检测 - 不同的lastEditedDate
-$postData5 = array(
- 'title' => '测试用例标题1',
- 'precondition' => '前置条件描述1',
- 'status' => 'normal',
- 'lastEditedDate' => '2023-09-01 11:00:00', // 不同的时间
- 'steps' => array('步骤描述1', '步骤描述2'),
- 'stepType' => array('step', 'step'),
- 'expects' => array('期望结果1', '期望结果2')
-);
-$result5 = $testcaseTest->getStatusForUpdateTest($case, $postData5);
-r($result5['message'][0]) && p() && e('该记录可能已经被改动。请刷新页面重新编辑!');
\ 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 0a069049c2..0000000000
--- a/module/testcase/test/zen/preparereviewdata.php
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$oldCase1->status = 'wait';
-
-$oldCase2 = new stdClass();
-$oldCase2->id = 2;
-$oldCase2->status = 'normal';
-
-$oldCase3 = new stdClass();
-$oldCase3->id = 3;
-$oldCase3->status = 'wait';
-
-$oldCase4 = new stdClass();
-$oldCase4->id = 4;
-$oldCase4->status = 'normal';
-
-$oldCase5 = new stdClass();
-$oldCase5->id = 5;
-$oldCase5->status = 'wait';
-
-// 测试数据1: 评审通过
-$postData1 = array(
- 'result' => 'pass',
- 'reviewedBy' => array('admin'),
- 'reviewedDate' => '2024-01-15',
- 'comment' => '评审通过',
- 'uid' => ''
-);
-
-// 测试数据2: 评审不通过
-$postData2 = array(
- 'result' => 'fail',
- 'reviewedBy' => array('admin'),
- 'reviewedDate' => '2024-01-15',
- 'comment' => '需要修改',
- 'uid' => ''
-);
-
-// 测试数据3: 未选择评审结果
-$postData3 = array(
- 'result' => '',
- 'reviewedBy' => array('admin'),
- 'reviewedDate' => '2024-01-15',
- 'uid' => ''
-);
-
-// 测试数据4: 多个评审人员
-$postData4 = array(
- 'result' => 'pass',
- 'reviewedBy' => array('admin', 'user1', 'user2'),
- 'reviewedDate' => '2024-01-15',
- 'comment' => '多人评审通过',
- 'uid' => ''
-);
-
-// 测试数据5: 单个评审人员
-$postData5 = array(
- 'result' => 'pass',
- 'reviewedBy' => array('admin'),
- 'reviewedDate' => '2024-01-15',
- 'comment' => '单人评审通过',
- 'uid' => ''
-);
-
-r($testcaseTest->prepareReviewDataTest(1, $oldCase1, $postData1)) && p('status,result') && e('normal,pass');
-r($testcaseTest->prepareReviewDataTest(2, $oldCase2, $postData2)) && p('status,result') && e('normal,fail');
-r($testcaseTest->prepareReviewDataTest(3, $oldCase3, $postData3)) && p() && e('0');
-r($testcaseTest->prepareReviewDataTest(4, $oldCase4, $postData4)) && p('status,reviewedBy') && e('normal,admin,user1,user2');
-r($testcaseTest->prepareReviewDataTest(5, $oldCase5, $postData5)) && p('status,reviewedBy') && e('normal,admin');
\ 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 84a8bb1ddb..0000000000
--- a/module/testcase/test/zen/processcaseforexport.php
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$table->product->range('1-3');
-$table->branch->range('0{3},1{3},2{4}');
-$table->module->range('1-3');
-$table->lib->range('0');
-$table->story->range('0,1{3},2{3},3{3}');
-$table->scene->range('0{5},1{3},2{2}');
-$table->title->range('测试用例1,测试用例2,测试用例3,测试用例4,测试用例5');
-$table->type->range('feature{5},performance{3},config{2}');
-$table->pri->range('1-4');
-$table->status->range('normal{8},blocked{2}');
-$table->stage->range('unittest{3},feature{4},integrate{3}');
-$table->openedBy->range('admin{5},user1{3},tester{2}');
-$table->openedDate->range('`2024-01-01 10:00:00`');
-$table->lastEditedBy->range('admin{3},user1{4},tester{3}');
-$table->lastEditedDate->range('`2024-01-15 15:30:00`');
-$table->lastRunner->range('admin{4},tester{3},user1{3}');
-$table->lastRunDate->range('`2024-02-01 09:00:00`');
-$table->lastRunResult->range('pass{4},fail{3},blocked{3}');
-$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{2},branch{2},platform{1}');
-$productTable->status->range('normal');
-$productTable->deleted->range('0');
-$productTable->gen(5);
-
-$branchTable = zenData('branch');
-$branchTable->id->range('1-5');
-$branchTable->product->range('2{3},3{2}');
-$branchTable->name->range('分支A,分支B,分支C,分支D,分支E');
-$branchTable->status->range('active');
-$branchTable->deleted->range('0');
-$branchTable->gen(5);
-
-$moduleTable = zenData('module');
-$moduleTable->id->range('1-10');
-$moduleTable->root->range('1{5},2{3},3{2}');
-$moduleTable->name->range('模块A,模块B,模块C,模块D,模块E');
-$moduleTable->type->range('case');
-$moduleTable->parent->range('0');
-$moduleTable->grade->range('1');
-$moduleTable->deleted->range('0');
-$moduleTable->gen(10);
-
-$storyTable = zenData('story');
-$storyTable->id->range('1-5');
-$storyTable->product->range('1-3');
-$storyTable->title->range('需求A,需求B,需求C,需求D,需求E');
-$storyTable->type->range('story');
-$storyTable->status->range('active');
-$storyTable->deleted->range('0');
-$storyTable->gen(5);
-
-$sceneTable = zenData('scene');
-$sceneTable->id->range('1-5');
-$sceneTable->product->range('1-3');
-$sceneTable->title->range('场景A,场景B,场景C,场景D,场景E');
-$sceneTable->deleted->range('0');
-$sceneTable->gen(5);
-
-// 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 = 0;
-$case1->pri = 1;
-$case1->type = 'feature';
-$case1->status = 'normal';
-$case1->openedBy = 'admin';
-$case1->openedDate = '2024-01-01 10:00:00';
-$case1->lastEditedBy = 'admin';
-$case1->lastEditedDate = '2024-01-15 15:30:00';
-$case1->lastRunner = 'admin';
-$case1->lastRunDate = '2024-02-01 09:00:00';
-$case1->lastRunResult = 'pass';
-$case1->stage = 'unittest,feature';
-$case1->bugs = 1;
-$case1->results = 2;
-$case1->stepNumber = 3;
-$case1->caseFails = 0;
-$case1->linkCase = '';
-
-$case2 = clone $case1;
-$case2->id = 2;
-$case2->product = 2;
-$case2->branch = 1;
-$case2->module = 2;
-
-$case3 = clone $case1;
-$case3->id = 3;
-$case3->product = 3;
-$case3->scene = 1;
-$case3->module = 3;
-
-$products = array(1 => '产品A', 2 => '产品B', 3 => '产品C');
-$branches = array(1 => '分支A', 2 => '分支B');
-$users = array('admin' => '管理员', 'user1' => '普通用户', 'tester' => '测试用户');
-$results = array();
-$relatedModules = array(1 => '模块A', 2 => '模块B', 3 => '模块C');
-$relatedStories = array(1 => '需求A', 2 => '需求B', 3 => '需求C');
-$relatedCases = array();
-$relatedSteps = array();
-$relatedFiles = array();
-$relatedScenes = array(1 => '场景A', 2 => '场景B');
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r($testcaseTest->processCaseForExportTest($case1, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('product') && e('产品A(#1)'); // 测试产品字段格式化
-r($testcaseTest->processCaseForExportTest($case1, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('module') && e('模块A(#1)'); // 测试模块字段格式化
-r($testcaseTest->processCaseForExportTest($case1, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('story') && e('需求A(#1)'); // 测试需求字段格式化
-r($testcaseTest->processCaseForExportTest($case2, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('branch') && e('分支A(#1)'); // 测试带分支的用例导出数据格式化
-r($testcaseTest->processCaseForExportTest($case3, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('scene') && e('场景A(#1)'); // 测试带场景的用例导出数据格式化
-r($testcaseTest->processCaseForExportTest($case1, $products, $branches, $users, $results, $relatedModules, $relatedStories, $relatedCases, $relatedSteps, $relatedFiles, $relatedScenes)) && p('openedDate') && e('2024-01-01'); // 测试日期格式化
\ 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 b9ddd53fbd..0000000000
--- a/module/testcase/test/zen/processcasesforexport.php
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env php
-> 产品A(
-timeout=0
-cid=1
-
-- 步骤1:测试导出空用例数组 @0
-- 步骤2:测试导出单个用例,检查返回数量 @1
-- 步骤3:测试导出单个用例,检查产品字段格式化第1条的product属性 @产品A(#1)
-- 步骤4:测试导出单个用例,检查日期格式化第1条的openedDate属性 @2024-01-01
-- 步骤5:测试导出多个用例,检查返回数量 @3
-- 步骤6:测试导出多个用例,检查第二个用例的产品字段第2条的product属性 @产品B(#2)
-
-*/
-
-// 1. 导入依赖(路径固定,不可修改)
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
-
-// 2. zendata数据准备(根据需要配置)
-$table = zenData('case');
-$table->id->range('1-10');
-$table->product->range('1-3');
-$table->branch->range('0{3},1{3},2{4}');
-$table->module->range('1-3');
-$table->lib->range('0');
-$table->story->range('0,1{3},2{3},3{3}');
-$table->scene->range('0{5},1{3},2{2}');
-$table->title->range('测试用例1,测试用例2,测试用例3,测试用例4,测试用例5');
-$table->type->range('feature{5},performance{3},config{2}');
-$table->pri->range('1-4');
-$table->status->range('normal{8},blocked{2}');
-$table->stage->range('unittest{3},feature{4},integrate{3}');
-$table->openedBy->range('admin{5},user1{3},tester{2}');
-$table->openedDate->range('`2024-01-01 10:00:00`');
-$table->lastEditedBy->range('admin{3},user1{4},tester{3}');
-$table->lastEditedDate->range('`2024-01-15 15:30:00`');
-$table->lastRunner->range('admin{4},tester{3},user1{3}');
-$table->lastRunDate->range('`2024-02-01 09:00:00`');
-$table->lastRunResult->range('pass{4},fail{3},blocked{3}');
-$table->linkCase->range('``');
-$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{2},branch{2},platform{1}');
-$productTable->status->range('normal');
-$productTable->deleted->range('0');
-$productTable->gen(5);
-
-$branchTable = zenData('branch');
-$branchTable->id->range('1-5');
-$branchTable->product->range('2{3},3{2}');
-$branchTable->name->range('分支A,分支B,分支C,分支D,分支E');
-$branchTable->status->range('active');
-$branchTable->deleted->range('0');
-$branchTable->gen(5);
-
-$moduleTable = zenData('module');
-$moduleTable->id->range('1-10');
-$moduleTable->root->range('1{5},2{3},3{2}');
-$moduleTable->name->range('模块A,模块B,模块C,模块D,模块E');
-$moduleTable->type->range('case');
-$moduleTable->parent->range('0');
-$moduleTable->grade->range('1');
-$moduleTable->deleted->range('0');
-$moduleTable->gen(10);
-
-$storyTable = zenData('story');
-$storyTable->id->range('1-5');
-$storyTable->product->range('1-3');
-$storyTable->title->range('需求A,需求B,需求C,需求D,需求E');
-$storyTable->type->range('story');
-$storyTable->status->range('active');
-$storyTable->deleted->range('0');
-$storyTable->gen(5);
-
-$sceneTable = zenData('scene');
-$sceneTable->id->range('1-5');
-$sceneTable->product->range('1-3');
-$sceneTable->title->range('场景A,场景B,场景C,场景D,场景E');
-$sceneTable->deleted->range('0');
-$sceneTable->gen(5);
-
-$userTable = zenData('user');
-$userTable->id->range('1-10');
-$userTable->account->range('admin,user1,tester,dev1,pm1');
-$userTable->realname->range('管理员,普通用户,测试用户,开发1,项目经理1');
-$userTable->deleted->range('0');
-$userTable->gen(5);
-
-$testtaskTable = zenData('testtask');
-$testtaskTable->id->range('1-5');
-$testtaskTable->product->range('1-3');
-$testtaskTable->name->range('测试任务1,测试任务2,测试任务3');
-$testtaskTable->status->range('doing');
-$testtaskTable->deleted->range('0');
-$testtaskTable->gen(3);
-
-$testrunTable = zenData('testrun');
-$testrunTable->id->range('1-5');
-$testrunTable->task->range('1-3');
-$testrunTable->case->range('1-3');
-$testrunTable->version->range('1');
-$testrunTable->gen(3);
-
-$testresultTable = zenData('testresult');
-$testresultTable->id->range('1-5');
-$testresultTable->run->range('1-3');
-$testresultTable->case->range('1-3');
-$testresultTable->version->range('1');
-$testresultTable->caseResult->range('pass,fail,blocked');
-$testresultTable->lastRunner->range('admin,tester,user1');
-$testresultTable->stepResults->range('`' . serialize(array()) . '`');
-$testresultTable->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 = 0;
-$case1->pri = 1;
-$case1->type = 'feature';
-$case1->status = 'normal';
-$case1->openedBy = 'admin';
-$case1->openedDate = '2024-01-01 10:00:00';
-$case1->lastEditedBy = 'admin';
-$case1->lastEditedDate = '2024-01-15 15:30:00';
-$case1->lastRunner = 'admin';
-$case1->lastRunDate = '2024-02-01 09:00:00';
-$case1->lastRunResult = 'pass';
-$case1->stage = 'unittest,feature';
-$case1->bugs = 1;
-$case1->results = 2;
-$case1->stepNumber = 3;
-$case1->caseFails = 0;
-$case1->linkCase = '';
-
-$case2 = clone $case1;
-$case2->id = 2;
-$case2->product = 2;
-$case2->branch = 1;
-$case2->module = 2;
-
-$case3 = clone $case1;
-$case3->id = 3;
-$case3->product = 3;
-$case3->scene = 1;
-$case3->module = 3;
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r(count($testcaseTest->processCasesForExportTest(array(), 1, 0))) && p() && e('0'); // 步骤1:测试导出空用例数组
-r(count($testcaseTest->processCasesForExportTest(array(1 => clone $case1), 1, 0))) && p() && e('1'); // 步骤2:测试导出单个用例,检查返回数量
-r($testcaseTest->processCasesForExportTest(array(1 => clone $case1), 1, 0)) && p('1:product') && e('产品A(#1)'); // 步骤3:测试导出单个用例,检查产品字段格式化
-r($testcaseTest->processCasesForExportTest(array(1 => clone $case1), 1, 0)) && p('1:openedDate') && e('2024-01-01'); // 步骤4:测试导出单个用例,检查日期格式化
-r(count($testcaseTest->processCasesForExportTest(array(1 => clone $case1, 2 => clone $case2, 3 => clone $case3), 1, 0))) && p() && e('3'); // 步骤5:测试导出多个用例,检查返回数量
-r($testcaseTest->processCasesForExportTest(array(1 => clone $case1, 2 => clone $case2, 3 => clone $case3), 1, 0)) && p('2:product') && e('产品B(#2)'); // 步骤6:测试导出多个用例,检查第二个用例的产品字段
\ 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 7a0570cc3e..0000000000
--- a/module/testcase/test/zen/responseafterbatchcreate.php
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env php
- array('Database error occurred'));
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData1)) && p('result,message') && e('fail,Database error occurred');
-
-// 测试步骤2:测试 Ajax 模态框请求时的响应
-$mockData2 = array(
- 'request' => array('HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'),
- 'app' => array('rawParams' => array('modal'))
-);
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData2)) && p('result,closeModal,load') && e('success,1,1');
-
-// 测试步骤3:测试 JSON 视图类型时的响应
-$mockData3 = array('viewType' => 'json');
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData3)) && p('result') && e('success');
-
-// 测试步骤4:测试在 QA tab 下的默认响应
-$mockData4 = array('app' => array('tab' => 'qa'));
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData4)) && p('result,load') && e('success,/testcase-browse-productID=1&branch=0.html');
-
-// 测试步骤5:测试在 project tab 下的默认响应
-$mockData5 = array(
- 'app' => array('tab' => 'project'),
- 'session' => array('project' => 10)
-);
-r($testcaseTest->responseAfterBatchCreateTest(2, 1, $mockData5)) && p('result,load') && e('success,/project-testcase-projectID=10&productID=2&branch=1.html');
-
-// 测试步骤6:测试在 execution tab 下的默认响应
-$mockData6 = array(
- 'app' => array('tab' => 'execution'),
- 'session' => array('execution' => 20)
-);
-r($testcaseTest->responseAfterBatchCreateTest(3, 2, $mockData6)) && p('result,load') && e('success,/execution-testcase-executionID=20&productID=3&branch=2.html');
\ 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 aafd34a9ce..0000000000
--- a/module/testcase/test/zen/responseaftershowimport.php
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env php
- array('Database error occurred'));
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData1)) && p('result,message') && e('fail,Database error occurred');
-
-// 测试步骤2:测试 Ajax 模态框请求时的响应
-$mockData2 = array(
- 'request' => array('HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'),
- 'app' => array('rawParams' => array('modal'))
-);
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData2)) && p('result,closeModal,load') && e('success,1,1');
-
-// 测试步骤3:测试 JSON 视图类型时的响应
-$mockData3 = array('viewType' => 'json');
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData3)) && p('result') && e('success');
-
-// 测试步骤4:测试在 QA tab 下的默认响应
-$mockData4 = array('app' => array('tab' => 'qa'));
-r($testcaseTest->responseAfterBatchCreateTest(1, 0, $mockData4)) && p('result,load') && e('success,/testcase-browse-productID=1&branch=0.html');
-
-// 测试步骤5:测试在 project tab 下的默认响应
-$mockData5 = array(
- 'app' => array('tab' => 'project'),
- 'session' => array('project' => 10)
-);
-r($testcaseTest->responseAfterBatchCreateTest(2, 1, $mockData5)) && p('result,load') && e('success,/project-testcase-projectID=10&productID=2&branch=1.html');
-
-// 测试步骤6:测试在 execution tab 下的默认响应
-$mockData6 = array(
- 'app' => array('tab' => 'execution'),
- 'session' => array('execution' => 20)
-);
-r($testcaseTest->responseAfterBatchCreateTest(3, 2, $mockData6)) && p('result,load') && e('success,/execution-testcase-executionID=20&productID=3&branch=2.html');
\ 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 f894ff2bc6..0000000000
--- a/module/testreport/test/zen/commonaction.php
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env php
-commonActionTest(1, 'product')) && p() && e('1'); // 步骤1:objectType为product且objectID为1的正常情况
-r($testreportTest->commonActionTest(2, 'execution')) && p() && e('2'); // 步骤2:objectType为execution且objectID为2的正常情况
-r($testreportTest->commonActionTest(3, 'project')) && p() && e('3'); // 步骤3:objectType为project且objectID为3的正常情况
-r($testreportTest->commonActionTest(0, 'product')) && p() && e('1'); // 步骤4:objectType为product且objectID为0时返回默认产品ID
-r($testreportTest->commonActionTest(0, 'execution')) && p() && e('0'); // 步骤5:objectType为execution且objectID为0时返回默认执行ID
\ 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 7800031502..0000000000
--- a/module/testtask/test/zen/responseafterruncase.php
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env php
-id = 1;
-$run1->task = 1;
-
-$preAndNext1 = new stdclass();
-$preAndNext1->pre = null;
-$preAndNext1->next = null;
-
-r($testtaskTest->responseAfterRunCaseTest('fail', $preAndNext1, $run1, 1, 1)) && p() && e('error: ');
-
-$run2 = new stdclass();
-$run2->id = 2;
-$run2->task = 2;
-
-$preAndNext2 = new stdclass();
-$preAndNext2->pre = null;
-$preAndNext2->next = null;
-
-r($testtaskTest->responseAfterRunCaseTest('pass', $preAndNext2, $run2, 2, 1)) && p() && e('success');
-
-$run3 = new stdclass();
-$run3->id = 3;
-$run3->task = 3;
-
-$nextCase = new stdclass();
-$nextCase->id = 4;
-$nextCase->case = 4;
-$nextCase->version = 1;
-
-$preAndNext3 = new stdclass();
-$preAndNext3->pre = null;
-$preAndNext3->next = $nextCase;
-
-r($testtaskTest->responseAfterRunCaseTest('pass', $preAndNext3, $run3, 3, 1)) && p() && e('success');
-
-$run4 = new stdclass();
-$run4->id = 5;
-$run4->task = 4;
-
-$preAndNext4 = new stdclass();
-$preAndNext4->pre = null;
-$preAndNext4->next = $nextCase;
-
-r($testtaskTest->responseAfterRunCaseTest('blocked', $preAndNext4, $run4, 5, 1)) && p() && e('success');
-
-$run5 = new stdclass();
-$run5->id = 6;
-
-$preAndNext5 = new stdclass();
-$preAndNext5->pre = null;
-$preAndNext5->next = null;
-
-r($testtaskTest->responseAfterRunCaseTest('pass', $preAndNext5, $run5, 6, 1)) && p() && e('success');
\ 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 e988efc6af..0000000000
--- a/module/todo/test/model/daterange.php
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env php
-app->loadClass('date', true);
-
-$todo = new todoTest();
-
-r($todo->dateRangeTest('future')) && p('begin,end') && e('2030-01-01,2030-01-01');
-r($todo->dateRangeTest('20210101')) && p('begin,end') && e('2021-01-01 00:00:00,2021-01-01 23:59:59');
-r($todo->dateRangeTest('before')) && p('end') && e('2025-11-05');
-r($todo->dateRangeTest('today')) && p('begin') && e('2025-11-06');
-r($todo->dateRangeTest('yesterday')) && p('begin') && e('2025-11-05');
-r($todo->dateRangeTest('thisweek')) && p('begin') && e('2025-11-03 00:00:00');
-r($todo->dateRangeTest('lastweek')) && p('begin') && e('2025-10-27 00:00:00');
-r($todo->dateRangeTest('thismonth')) && p('begin') && e('2025-11-01 00:00:00');
-r($todo->dateRangeTest('lastmonth')) && p('begin') && e('2025-10-01 00:00:00');
-r($todo->dateRangeTest('thisseason')) && p('begin') && e('2025-10-01 00:00:00');
\ No newline at end of file
diff --git a/module/transfer/test/model/format.php b/module/transfer/test/model/format.php
deleted file mode 100755
index 77e39a67f6..0000000000
--- a/module/transfer/test/model/format.php
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env php
-id->range('1-10');
-$table->title->range('需求1,需求2,需求3,需求4,需求5,需求6,需求7,需求8,需求9,需求10');
-$table->status->range('active{5},closed{3},draft{2}');
-$table->pri->range('1{3},2{4},3{3}');
-$table->product->range('1{8},2{2}');
-$table->gen(10);
-
-// 3. 用户登录(选择合适角色)
-su('admin');
-
-// 4. 创建测试实例(变量名与模块名一致)
-$transferTest = new transferTest();
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-r($transferTest->formatTest('', '')) && p() && e('Module is empty'); // 步骤1:空模块情况
-r($transferTest->formatTest('story', '')) && p('error') && e('~~'); // 步骤2:正常模块输入
-r($transferTest->formatTest('task', '')) && p('error') && e('~~'); // 步骤3:任务模块测试
-r($transferTest->formatTest('story', 'active')) && p('error') && e('~~'); // 步骤4:带过滤条件
-r($transferTest->formatTest('bug', '')) && p('error') && e('~~'); // 步骤5:缺陷模块测试
\ No newline at end of file
diff --git a/module/user/test/zen/checkdirpermission.php b/module/user/test/zen/checkdirpermission.php
deleted file mode 100755
index e8eb009b10..0000000000
--- a/module/user/test/zen/checkdirpermission.php
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env php
-tmpRoot;
-$originalDataRoot = $app->dataRoot;
-
-// 5. 🔴 强制要求:必须包含至少5个测试步骤
-
-// 步骤1:正常情况测试 - 检查当前目录权限状态
-$result1 = $userTest->checkDirPermissionTest();
-r($result1) && p() && e('permission_denied'); // 根据实际返回调整期望
-
-// 步骤2:测试checkTmp方法 - 验证临时目录检查功能
-$result2 = $userTest->checkTmpTest();
-r($result2) && p() && e(1); // checkTmp方法实际返回1
-
-// 步骤3:模拟tmpRoot目录路径无效
-$app->tmpRoot = '/invalid/tmp/path';
-$result3 = $userTest->checkDirPermissionTest();
-r(strpos($result3, 'permission_denied') !== false ? 1 : 0) && p() && e(1); // 检查是否包含权限拒绝
-
-// 步骤4:恢复tmpRoot,模拟dataRoot目录不存在
-$app->tmpRoot = $originalTmpRoot;
-$app->dataRoot = '/invalid/data/path';
-$result4 = $userTest->checkDirPermissionTest();
-r($result4) && p() && e('permission_denied'); // 权限检查失败
-
-// 步骤5:恢复原始配置再次测试
-$app->tmpRoot = $originalTmpRoot;
-$app->dataRoot = $originalDataRoot;
-$result5 = $userTest->checkDirPermissionTest();
-r($result5) && p() && e('permission_denied'); // 权限检查仍然失败
\ No newline at end of file
diff --git a/module/user/test/zen/getuserforjson.php b/module/user/test/zen/getuserforjson.php
deleted file mode 100755
index eece698263..0000000000
--- a/module/user/test/zen/getuserforjson.php
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env php
-password @0
-- 执行$result2->deleted @0
-- 执行$result3->token) > 0 @1
-- 执行$result4属性company @禅道软件
-- 执行$result5属性account @admin
-- 执行$result5属性realname @管理员
-- 执行$result5属性email @admin@test.com
-
-*/
-
-include dirname(__FILE__, 5) . '/test/lib/init.php';
-include dirname(__FILE__, 2) . '/lib/zen.class.php';
-
-$table = zenData('user');
-$table->loadYaml('user_getuserforjson', false, 2)->gen(10);
-
-su('admin');
-
-$userTest = new userZenTest();
-
-// 创建测试用户对象
-$testUser = new stdClass();
-$testUser->id = 1;
-$testUser->account = 'admin';
-$testUser->realname = '管理员';
-$testUser->email = 'admin@test.com';
-$testUser->password = 'hashedpassword';
-$testUser->deleted = '0';
-$testUser->role = 'admin';
-
-$result1 = $userTest->getUserForJSONTest($testUser);
-$result2 = $userTest->getUserForJSONTest($testUser);
-$result3 = $userTest->getUserForJSONTest($testUser);
-$result4 = $userTest->getUserForJSONTest($testUser);
-$result5 = $userTest->getUserForJSONTest($testUser);
-
-r(isset($result1->password)) && p() && e('0');
-r(isset($result2->deleted)) && p() && e('0');
-r(strlen($result3->token) > 0) && p() && e('1');
-r($result4) && p('company') && e('禅道软件');
-r($result5) && p('account') && e('admin');
-r($result5) && p('realname') && e('管理员');
-r($result5) && p('email') && e('admin@test.com');
\ No newline at end of file
diff --git a/module/user/test/zen/parseloginmoduleandmethod.php b/module/user/test/zen/parseloginmoduleandmethod.php
deleted file mode 100755
index 857ff391e8..0000000000
--- a/module/user/test/zen/parseloginmoduleandmethod.php
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env php
-requestType = 'PATH_INFO';
-$config->requestFix = '-';
-r($userTest->parseLoginModuleAndMethodTest('/zentao/user-login.html')) && p('0') && e('user');
-
-// 测试步骤2:PATH_INFO模式解析正常URL方法名
-r($userTest->parseLoginModuleAndMethodTest('/zentao/user-login.html')) && p('1') && e('login');
-
-// 测试步骤3:查询参数模式解析正常URL模块名
-$config->requestType = 'GET';
-r($userTest->parseLoginModuleAndMethodTest('/zentao/index.php?m=user&f=login')) && p('0') && e('user');
-
-// 测试步骤4:查询参数模式解析正常URL方法名
-r($userTest->parseLoginModuleAndMethodTest('/zentao/index.php?m=user&f=login')) && p('1') && e('login');
-
-// 测试步骤5:PATH_INFO模式解析不包含requestFix的URL
-$config->requestType = 'PATH_INFO';
-$config->requestFix = '-';
-r($userTest->parseLoginModuleAndMethodTest('/zentao/userlogin.html')) && p('0') && e('');
-
-// 测试步骤6:查询参数模式解析只有模块参数的URL
-$config->requestType = 'GET';
-r($userTest->parseLoginModuleAndMethodTest('/zentao/index.php?m=user')) && p('0') && e('');
-
-// 测试步骤7:解析空URL的模块名
-r($userTest->parseLoginModuleAndMethodTest('')) && p('0') && e('');
\ No newline at end of file
diff --git a/module/user/test/zen/preparecustomfields.php b/module/user/test/zen/preparecustomfields.php
deleted file mode 100755
index 8c993d2e6d..0000000000
--- a/module/user/test/zen/preparecustomfields.php
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env php
-prepareCustomFieldsTest('batchCreate', 'create')) && p('listFields:dept') && e('部门'); // 步骤1:正常batchCreate方法测试,验证部门字段
-r($userTest->prepareCustomFieldsTest('batchEdit', 'edit')) && p('listFields:dept') && e('部门'); // 步骤2:正常batchEdit方法测试,验证部门字段
-r($userTest->prepareCustomFieldsTest('batchCreate', 'create')) && p('showFields:0') && e('dept'); // 步骤3:验证batchCreate显示字段第一个元素
-r($userTest->prepareCustomFieldsTest('batchEdit', 'edit')) && p('showFields:0') && e('dept'); // 步骤4:验证batchEdit显示字段第一个元素
-r($userTest->prepareCustomFieldsTest('batchCreate', 'create')) && p('listFields:email') && e('邮箱'); // 步骤5:验证邮箱字段正确显示
\ 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 b5504f1c9f..0000000000
--- a/module/zanode/test/zen/handlenode.php
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env php
-rawModule)) $app->rawModule = 'zanode';
-if(!isset($app->rawMethod)) $app->rawMethod = 'test';
-
-zenData('host')->gen(0);
-
-su('admin');
-
-$zanodeTest = new zanodeTest();
-
-// 准备测试数据: 创建不同状态的节点
-$host = zenData('host');
-$host->id->range('1-10');
-$host->name->range('node1,node2,node3,node4,node5,node6,node7');
-$host->extranet->range('192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7');
-$host->zap->range('8086');
-$host->tokenSN->range('token1,token2,token3,token4,token5,token6,token7');
-$host->status->range('running,running,running,restoring,creating_img,creating_snap,suspend');
-$host->type->range('node');
-$host->gen(7);
-
-r($zanodeTest->handleNodeTest(1, 'boot')) && p('result,message') && e('success,操作成功'); // 测试步骤1: 正常执行boot操作
-r($zanodeTest->handleNodeTest(2, 'destroy')) && p('result,message') && e('success,操作成功'); // 测试步骤2: 正常执行destroy操作
-r($zanodeTest->handleNodeTest(3, 'suspend')) && p('result,message') && e('success,操作成功'); // 测试步骤3: 正常执行suspend操作
-r($zanodeTest->handleNodeTest(4, 'boot')) && p('result') && e('fail'); // 测试步骤4: 节点状态为restoring时执行操作
-r($zanodeTest->handleNodeTest(5, 'boot')) && p('result') && e('fail'); // 测试步骤5: 节点状态为creating_img时执行操作
-r($zanodeTest->handleNodeTest(6, 'boot')) && p('result') && e('fail'); // 测试步骤6: 节点状态为creating_snap时执行操作
-r($zanodeTest->handleNodeTest(7, 'resume')) && p('result,message') && e('success,操作成功'); // 测试步骤7: 正常执行resume操作
\ 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 6aabdc96f1..0000000000
--- a/module/zanode/test/zen/preparecreatesnapshotextras.php
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env php
-rawModule)) $app->rawModule = 'zanode';
-if(!isset($app->rawMethod)) $app->rawMethod = 'test';
-
-zenData('host')->gen(0);
-
-su('admin');
-
-$zanodeTest = new zanodeTest();
-
-// 准备测试节点数据
-$node1 = new stdClass();
-$node1->id = 1;
-$node1->name = 'test-node-1';
-$node1->osName = 'Ubuntu 20.04';
-$node1->status = 'running';
-
-$node2 = new stdClass();
-$node2->id = 2;
-$node2->name = 'test-node-2';
-$node2->osName = 'CentOS 7';
-$node2->status = 'running';
-
-$node3 = new stdClass();
-$node3->id = 3;
-$node3->name = 'test-node-3';
-$node3->osName = 'Debian 11';
-$node3->status = 'running';
-
-// 测试步骤1: 正常创建快照,使用英文字母名称
-$app->post = new stdClass();
-$app->post->name = 'test_snapshot';
-$app->post->desc = 'Test snapshot description';
-r($zanodeTest->prepareCreateSnapshotExtrasTest($node1)) && p('host,name,status,from') && e('1,test_snapshot,creating,snapshot');
-
-// 测试步骤2: 正常创建快照,名称包含字母和数字
-$app->post = new stdClass();
-$app->post->name = 'snapshot_v1';
-$app->post->desc = 'Version 1 snapshot';
-r($zanodeTest->prepareCreateSnapshotExtrasTest($node2)) && p('name,desc,osName') && e('snapshot_v1,Version 1 snapshot,CentOS 7');
-
-// 测试步骤3: 异常场景,快照名称为纯数字
-$app->post = new stdClass();
-$app->post->name = '12345';
-$app->post->desc = 'Numeric name test';
-r($zanodeTest->prepareCreateSnapshotExtrasTest($node1)) && p('name') && e('Name validation error');
-
-// 测试步骤4: 正常创建快照,验证所有字段初始化
-$app->post = new stdClass();
-$app->post->name = 'full_snapshot';
-$app->post->desc = 'Full test';
-r($zanodeTest->prepareCreateSnapshotExtrasTest($node3)) && p('status,memory,disk,fileSize') && e('creating,0,0,0');
-
-// 测试步骤5: 正常创建快照,包含完整描述信息
-$app->post = new stdClass();
-$app->post->name = 'detailed_snapshot';
-$app->post->desc = 'This is a detailed snapshot with full description';
-r($zanodeTest->prepareCreateSnapshotExtrasTest($node1)) && p('desc,from,osName') && e('This is a detailed snapshot with full description,snapshot,Ubuntu 20.04');
\ No newline at end of file