- [misc] Delete the failed unit test scripts generated by Claude Code.
^ Conflicts: ^ module/action/test/tao/processcreatechildrenactionextra.php ^ module/action/test/tao/processcreaterequirementsactionextra.php ^ module/action/test/tao/processlinkstoryandbugactionextra.php ^ module/action/test/tao/processtostoryactionextra.php ^ module/branch/test/model/manage.php ^ module/cne/test/model/apiget.php ^ module/cne/test/model/apipost.php ^ module/cne/test/model/backup.php ^ module/cne/test/model/cneservererror.php ^ module/cne/test/model/deletebackup.php ^ module/cne/test/model/getappvolumes.php ^ module/cne/test/model/getbackuplist.php ^ module/cne/test/model/getbackupstatus.php ^ module/cne/test/model/getdisksettings.php ^ module/cne/test/model/getvolumesmetrics.php ^ module/cne/test/model/installapp.php ^ module/cne/test/model/restore.php ^ module/cne/test/model/translateerror.php ^ module/cne/test/model/uploadcert.php ^ module/cne/test/model/validatecert.php ^ module/common/test/model/printduration.php ^ module/convert/test/model/getzentaofields.php ^ module/convert/test/model/getzentaoobjectlist.php ^ module/convert/test/model/savestate.php ^ module/convert/test/tao/createtask.php ^ module/convert/test/tao/processjiracontent.php ^ module/instance/test/model/installationsettingsmap.php ^ module/instance/test/model/stop.php ^ module/kanban/test/tao/refreshbugcards.php ^ module/kanban/test/tao/refresherurcards.php ^ module/kanban/test/tao/refreshstorycards.php ^ module/metric/test/model/getdatebydatetype.php ^ module/metric/test/model/getlatestresultbycode.php ^ module/metric/test/model/updatemetricfields.php ^ module/product/test/model/buildsearchconfig.php ^ module/screen/test/model/gennotfoundordraftcomponentoption.php ^ module/search/test/model/buildoldquery.php ^ module/search/test/model/getoldquery.php ^ module/task/test/model/updateparent.php ^ module/todo/test/model/daterange.php ^ module/transfer/test/model/format.php
This commit is contained in:
@@ -1,37 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
|
||||
title=测试 actionTao::processCreateChildrenActionExtra();
|
||||
timeout=0
|
||||
cid=14962
|
||||
|
||||
- 测试单个有效任务ID >> 返回格式化的任务信息
|
||||
- 测试多个有效任务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');
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::createMoreLink();
|
||||
timeout=0
|
||||
cid=15238
|
||||
|
||||
- 步骤1:测试recentproject类型block的moreLink生成属性moreLink @project-browse
|
||||
- 步骤2:测试带type参数的bug类型block的moreLink生成属性moreLink @my-bug-type=assignedTo
|
||||
- 步骤3:测试dynamic类型block的moreLink生成属性moreLink @my-dynamic
|
||||
- 步骤4:测试未配置的block返回空moreLink属性moreLink @~~
|
||||
- 步骤5:测试testtask类型block的moreLink生成属性moreLink @testtask-browse-type=
|
||||
- 步骤6:测试带空type的case类型block的moreLink生成属性moreLink @my-testcase-type=
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 准备测试数据
|
||||
$block1 = new stdclass();
|
||||
$block1->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生成
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printAnnualWorkloadBlock();
|
||||
timeout=0
|
||||
cid=15247
|
||||
|
||||
- 步骤1:测试方法执行成功返回success为true属性success @1
|
||||
- 步骤2:测试返回maxStoryEstimate最大需求规模属性maxStoryEstimate @80
|
||||
- 步骤3:测试返回maxStoryCount最大需求数属性maxStoryCount @40
|
||||
- 步骤4:测试返回maxBugCount最大Bug数属性maxBugCount @15
|
||||
- 步骤5:测试返回对象包含所有必要属性
|
||||
- 属性success @1
|
||||
- 属性maxStoryEstimate @80
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
$product = zenData('product');
|
||||
$product->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:测试返回对象包含所有必要属性
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printAssignToMeBlock();
|
||||
timeout=0
|
||||
cid=15248
|
||||
|
||||
- 步骤1:测试方法执行成功返回success为true属性success @1
|
||||
- 步骤2:测试返回对象包含权限验证信息属性hasViewPriv @1
|
||||
- 步骤3:测试返回对象包含数据信息属性hasData @1
|
||||
- 步骤4:测试总数量统计正确属性totalCount @14
|
||||
- 步骤5:测试不传入block参数时使用默认参数属性success @1
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 准备测试数据
|
||||
$block1 = new stdclass();
|
||||
$block1->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参数时使用默认参数
|
||||
@@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printBugBlock();
|
||||
timeout=0
|
||||
cid=15250
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @assignedTo
|
||||
- 属性count @10
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性type @invalid-type
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试dashboard为my时projectID为0
|
||||
- 属性projectID @0
|
||||
- 属性dashboard @my
|
||||
- 步骤5:测试dashboard不为my时使用session中的projectID属性dashboard @project
|
||||
- 步骤6:测试不同的type类型参数
|
||||
- 属性type @openedBy
|
||||
- 属性count @8
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 准备测试数据
|
||||
$block1 = new stdclass();
|
||||
$block1->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类型参数
|
||||
@@ -1,72 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printBugStatisticBlock();
|
||||
timeout=0
|
||||
cid=15251
|
||||
|
||||
- 执行blockTest模块的printBugStatisticBlockTest方法,参数是$normalBlock 属性totalBugs @10
|
||||
- 执行blockTest模块的printBugStatisticBlockTest方法,参数是$shadowBlock, $shadowParams 属性totalBugs @15
|
||||
- 执行blockTest模块的printBugStatisticBlockTest方法,参数是$emptyBlock 属性totalBugs @10
|
||||
- 执行blockTest模块的printBugStatisticBlockTest方法,参数是$stringZeroCountBlock 属性totalBugs @0
|
||||
- 执行blockTest模块的printBugStatisticBlockTest方法,参数是$statusBlock 属性totalBugs @10
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 准备基础测试数据
|
||||
$table = zenData('product');
|
||||
$table->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');
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printBuildBlock();
|
||||
timeout=0
|
||||
cid=15252
|
||||
|
||||
- 执行blockTest模块的printBuildBlockTest方法,参数是$block1 属性count @0
|
||||
- 执行blockTest模块的printBuildBlockTest方法,参数是$block2 属性count @0
|
||||
- 执行blockTest模块的printBuildBlockTest方法,参数是$block3 属性count @0
|
||||
- 执行blockTest模块的printBuildBlockTest方法,参数是$block4 属性count @0
|
||||
- 执行blockTest模块的printBuildBlockTest方法,参数是$block5 属性count @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
$build = zenData('build');
|
||||
$build->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');
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printExecutionListBlock();
|
||||
timeout=0
|
||||
cid=15261
|
||||
|
||||
- 测试count为5时返回5条执行记录属性hasExecutions @true
|
||||
- 测试count为3时返回成功属性success @1
|
||||
- 测试type为all时正常返回执行记录属性success @1
|
||||
- 测试type为wait时返回成功属性success @1
|
||||
- 测试type为doing时返回成功属性success @1
|
||||
- 测试type包含非法字符时返回空结果属性hasExecutions @false
|
||||
- 测试count为0时使用默认值返回执行记录属性hasExecutions @true
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
zenData('user')->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时使用默认值返回执行记录
|
||||
@@ -1,84 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printExecutionStatisticBlock();
|
||||
timeout=0
|
||||
cid=15263
|
||||
|
||||
- 执行blockTest模块的printExecutionStatisticBlockTest方法,参数是$block1
|
||||
- 属性executionsCount @0
|
||||
- 属性projectsCount @3
|
||||
- 属性hasChartData @1
|
||||
- 执行blockTest模块的printExecutionStatisticBlockTest方法,参数是$block2
|
||||
- 属性executionsCount @0
|
||||
- 属性projectsCount @3
|
||||
- 属性hasChartData @1
|
||||
- 执行blockTest模块的printExecutionStatisticBlockTest方法,参数是$block3
|
||||
- 属性executionsCount @0
|
||||
- 属性projectsCount @3
|
||||
- 属性hasChartData @1
|
||||
- 执行blockTest模块的printExecutionStatisticBlockTest方法,参数是$block4
|
||||
- 属性executionsCount @0
|
||||
- 属性projectsCount @3
|
||||
- 属性hasChartData @1
|
||||
- 属性currentProjectID @0
|
||||
- 执行blockTest模块的printExecutionStatisticBlockTest方法,参数是$block5
|
||||
- 属性executionsCount @0
|
||||
- 属性projectsCount @3
|
||||
- 属性hasChartData @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zendata('project')->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');
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printIssueBlock();
|
||||
timeout=0
|
||||
cid=15265
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @active
|
||||
- 属性count @5
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性hasValidation @0
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试projectID为0时的处理
|
||||
- 属性type @resolved
|
||||
- 属性projectID @0
|
||||
- 步骤5:测试不同projectID和count参数
|
||||
- 属性type @active
|
||||
- 属性count @8
|
||||
- 步骤6:测试不同的type类型参数
|
||||
- 属性type @closed
|
||||
- 属性count @10
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 强制要求:必须包含至少5个测试步骤
|
||||
r($blockTest->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类型参数
|
||||
@@ -1,75 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printPlanBlock();
|
||||
timeout=0
|
||||
cid=15268
|
||||
|
||||
- 步骤1:默认参数测试属性plansCount @1
|
||||
- 步骤2:type为all类型测试属性plansCount @1
|
||||
- 步骤3:count限制为5测试属性plansCount @1
|
||||
- 步骤4:count限制为10测试属性plansCount @1
|
||||
- 步骤5:type为noproduct测试属性plansCount @1
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
// 暂时注释掉zendata,直接测试逻辑
|
||||
|
||||
// 3. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 4. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockZenTest();
|
||||
|
||||
// 5. 强制要求:必须包含至少5个测试步骤
|
||||
// 创建默认的block参数
|
||||
$defaultBlock = new stdclass();
|
||||
$defaultBlock->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测试
|
||||
@@ -1,77 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printProjectStatisticBlock();
|
||||
timeout=0
|
||||
cid=15277
|
||||
|
||||
- 步骤1:标准区块对象正常获取项目统计数据属性projectCount @10
|
||||
- 步骤2:验证用户数量正确加载属性userCount @11
|
||||
- 步骤3:使用type为wait过滤项目状态属性projectCount @3
|
||||
- 步骤4:设置count为5限制项目数量属性projectCount @5
|
||||
- 步骤5:使用type为doing过滤项目状态属性projectCount @3
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
$project = zenData('project');
|
||||
$project->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过滤项目状态
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printRiskBlock();
|
||||
timeout=0
|
||||
cid=15284
|
||||
|
||||
- 步骤1:测试默认参数情况 @1
|
||||
- 步骤2:测试type为all,count为15 @1
|
||||
- 步骤3:测试type为active,count为5 @1
|
||||
- 步骤4:测试type为closed,count为10 @1
|
||||
- 步骤5:测试type为resolved,count为20 @1
|
||||
- 步骤6:测试参数结构不正确 @0
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 创建测试用的block对象
|
||||
$block1 = new stdClass();
|
||||
$block1->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:测试参数结构不正确
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printScrumIssueBlock();
|
||||
timeout=0
|
||||
cid=15286
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @active
|
||||
- 属性count @5
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性hasValidation @0
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试projectID为0时的处理
|
||||
- 属性type @resolved
|
||||
- 属性projectID @0
|
||||
- 步骤5:测试不同projectID和count参数
|
||||
- 属性type @active
|
||||
- 属性count @8
|
||||
- 步骤6:测试不同的type类型参数
|
||||
- 属性type @closed
|
||||
- 属性count @10
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 强制要求:必须包含至少5个测试步骤
|
||||
r($blockTest->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类型参数
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printScrumIssueBlock();
|
||||
timeout=0
|
||||
cid=15287
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @active
|
||||
- 属性count @5
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性hasValidation @0
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试projectID为0时的处理
|
||||
- 属性type @resolved
|
||||
- 属性projectID @0
|
||||
- 步骤5:测试不同projectID和count参数
|
||||
- 属性type @active
|
||||
- 属性count @8
|
||||
- 步骤6:测试不同的type类型参数
|
||||
- 属性type @closed
|
||||
- 属性count @10
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 强制要求:必须包含至少5个测试步骤
|
||||
r($blockTest->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类型参数
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printScrumListBlock();
|
||||
timeout=0
|
||||
cid=15288
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @undone
|
||||
- 属性count @15
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性hasValidation @0
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试projectID为0时的处理
|
||||
- 属性type @all
|
||||
- 属性projectID @0
|
||||
- 步骤5:测试不同projectID和count参数
|
||||
- 属性type @doing
|
||||
- 属性count @20
|
||||
- 步骤6:测试不同的type类型参数
|
||||
- 属性type @done
|
||||
- 属性count @10
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 强制要求:必须包含至少5个测试步骤
|
||||
r($blockTest->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类型参数
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printScrumRiskBlock();
|
||||
timeout=0
|
||||
cid=15291
|
||||
|
||||
- 步骤1:测试默认参数情况 @1
|
||||
- 步骤2:测试type为all,count为15 @1
|
||||
- 步骤3:测试type为active,count为5 @1
|
||||
- 步骤4:测试type为closed,count为10 @1
|
||||
- 步骤5:测试type为resolved,count为20 @1
|
||||
- 步骤6:测试参数结构不正确 @0
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 创建测试用的block对象
|
||||
$block1 = new stdClass();
|
||||
$block1->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:测试参数结构不正确
|
||||
@@ -1,123 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printScrumTestBlock();
|
||||
timeout=0
|
||||
cid=15293
|
||||
|
||||
- 步骤1:测试正常情况下传入type=all和count=5的参数
|
||||
- 属性type @all
|
||||
- 属性projectID @1
|
||||
- 步骤2:测试type=wait时获取wait状态的测试单
|
||||
- 属性type @wait
|
||||
- 属性projectID @1
|
||||
- 步骤3:测试type=doing时获取doing状态的测试单
|
||||
- 属性type @doing
|
||||
- 属性projectID @1
|
||||
- 步骤4:测试type=done时获取done状态的测试单
|
||||
- 属性type @done
|
||||
- 属性projectID @1
|
||||
- 步骤5:测试type=blocked时获取blocked状态的测试单
|
||||
- 属性type @blocked
|
||||
- 属性projectID @1
|
||||
- 步骤6:测试count=10时限制返回数量
|
||||
- 属性type @all
|
||||
- 属性projectID @1
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
$project = zenData('project');
|
||||
$project->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时限制返回数量
|
||||
@@ -1,41 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printSingleDynamicBlock();
|
||||
timeout=0
|
||||
cid=15296
|
||||
|
||||
- 执行blockTest模块的printSingleDynamicBlockTest方法 属性productID @1
|
||||
- 执行blockTest模块的printSingleDynamicBlockTest方法
|
||||
- 属性productID @999
|
||||
- 属性actionsCount @0
|
||||
- 执行blockTest模块的printSingleDynamicBlockTest方法 属性productID @0
|
||||
- 执行blockTest模块的printSingleDynamicBlockTest方法 属性usersCount @11
|
||||
- 执行blockTest模块的printSingleDynamicBlockTest方法 属性productID @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('product')->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');
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printSprintBlock();
|
||||
timeout=0
|
||||
cid=15303
|
||||
|
||||
- 步骤1:测试默认block对象生成groups数据 @2
|
||||
- 步骤2:测试返回结果包含cards组属性type @cards
|
||||
- 步骤3:测试返回结果包含barChart组属性type @barChart
|
||||
- 步骤4:测试cards组包含2个卡片 @2
|
||||
- 步骤5:测试barChart组包含3个柱状图 @3
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
$metriclib = zenData('metriclib');
|
||||
$metriclib->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个柱状图
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printTaskBlock();
|
||||
timeout=0
|
||||
cid=15305
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @assignedTo
|
||||
- 属性count @10
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性type @invalid-type
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试不同的type类型参数finishedBy
|
||||
- 属性type @finishedBy
|
||||
- 属性count @8
|
||||
- 步骤5:测试orderBy参数的传递
|
||||
- 属性orderBy @id_asc
|
||||
- 属性type @assignedTo
|
||||
- 步骤6:测试较大的count值 @5
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 准备测试数据
|
||||
$block1 = new stdclass();
|
||||
$block1->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值
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printTesttaskBlock();
|
||||
timeout=0
|
||||
cid=15307
|
||||
|
||||
- 步骤1:测试正常情况下传入type参数为wait和count参数为10
|
||||
- 属性type @wait
|
||||
- 属性count @10
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性type @invalid-type
|
||||
- 步骤3:测试type参数为all时查询所有测试单属性type @all
|
||||
- 步骤4:测试type参数为doing时查询进行中的测试单
|
||||
- 属性type @doing
|
||||
- 属性count @5
|
||||
- 步骤5:测试type参数为done时查询已完成的测试单属性type @done
|
||||
- 步骤6:测试count为0时的处理属性count @0
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockZenTest();
|
||||
|
||||
// 4. 准备测试数据
|
||||
$block1 = new stdclass();
|
||||
$block1->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时的处理
|
||||
@@ -1,43 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printWaterfallIssueBlock();
|
||||
timeout=0
|
||||
cid=15311
|
||||
|
||||
- 步骤1:测试正常情况下传入合法type参数和count参数
|
||||
- 属性type @active
|
||||
- 属性count @5
|
||||
- 步骤2:测试type参数包含特殊字符时验证失败属性hasValidation @0
|
||||
- 步骤3:测试count为0时的处理属性count @0
|
||||
- 步骤4:测试projectID为0时的处理
|
||||
- 属性type @resolved
|
||||
- 属性projectID @0
|
||||
- 步骤5:测试不同projectID和count参数
|
||||
- 属性type @active
|
||||
- 属性count @8
|
||||
- 步骤6:测试不同的type类型参数
|
||||
- 属性type @closed
|
||||
- 属性count @10
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/block.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$blockTest = new blockTest();
|
||||
|
||||
// 4. 强制要求:必须包含至少5个测试步骤
|
||||
r($blockTest->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类型参数
|
||||
@@ -1,90 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 blockZen::printWaterfallRiskBlock();
|
||||
timeout=0
|
||||
cid=15314
|
||||
|
||||
- 执行blockTest模块的printWaterfallRiskBlockTest方法,参数是$block1
|
||||
- 第count,hasUsers,1条的status属性 @5
|
||||
- 第count,hasUsers,1条的1:project属性 @1
|
||||
- 执行blockTest模块的printWaterfallRiskBlockTest方法,参数是$block2
|
||||
- 第count,hasUsers,1条的status属性 @3
|
||||
- 第count,hasUsers,1条的1:project属性 @1
|
||||
- 执行blockTest模块的printWaterfallRiskBlockTest方法,参数是$block3
|
||||
- 第count,hasUsers,1条的status属性 @2
|
||||
- 第count,hasUsers,1条的1:project属性 @1
|
||||
- 执行blockTest模块的printWaterfallRiskBlockTest方法,参数是$block4
|
||||
- 属性count @5
|
||||
- 属性hasUsers @1
|
||||
- 执行blockTest模块的printWaterfallRiskBlockTest方法,参数是$block5
|
||||
- 属性count @0
|
||||
- 属性hasUsers @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
$project = zenData('project');
|
||||
$project->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');
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::assignProjectRelatedVars();
|
||||
timeout=0
|
||||
cid=15428
|
||||
|
||||
- 步骤1:空输入
|
||||
- 属性noProductProjects @0
|
||||
- 属性productProjects @0
|
||||
- 属性productExecutions @0
|
||||
- 步骤2:无项目执行的bug
|
||||
- 属性noProductProjects @0
|
||||
- 属性noSprintProjects @0
|
||||
- 步骤3:有项目的bug
|
||||
- 属性noProductProjects @0
|
||||
- 属性noSprintProjects @0
|
||||
- 步骤4:有项目和执行的bug
|
||||
- 属性noProductProjects @0
|
||||
- 属性noSprintProjects @0
|
||||
- 步骤5:多产品bugs
|
||||
- 属性noProductProjects @0
|
||||
- 属性noSprintProjects @0
|
||||
- 步骤6:影子产品
|
||||
- 属性noProductProjects @0
|
||||
- 属性noSprintProjects @0
|
||||
- 步骤7:混合产品
|
||||
- 属性noProductProjects @0
|
||||
- 属性noSprintProjects @0
|
||||
- 步骤8:同产品多bugs属性productProjects @1
|
||||
- 步骤9:验证projectExecutions属性projectExecutions @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('product')->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
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::assignVarsForEdit();
|
||||
timeout=0
|
||||
cid=15431
|
||||
|
||||
- 步骤1:bug有execution的情况属性execution @1
|
||||
- 步骤2:bug有project但无execution的情况属性execution @0
|
||||
- 步骤3:bug无project和execution的情况属性execution @0
|
||||
- 步骤4:bug产品不在products列表中属性products @5
|
||||
- 步骤5:bug有assignedTo的情况属性assignedToList @11
|
||||
- 步骤6:bug状态为closed的情况属性assignedToList @11
|
||||
- 步骤7:bug有story关联的情况属性stories @0
|
||||
- 步骤8:验证openedBuilds属性openedBuilds @2
|
||||
- 步骤9:验证cases数据属性cases @4
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('product')->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数据
|
||||
@@ -1,105 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::buildCreateForm();
|
||||
timeout=0
|
||||
cid=15437
|
||||
|
||||
- 步骤1:正常情况下验证产品成员数量属性productMembers @11
|
||||
- 步骤2:from='global'的情况属性gobackLink @buildcreateform.php?m=bug&f=browse&productID=1
|
||||
- 步骤3:有resultID和stepIdList的情况属性resultFilesCount @0
|
||||
- 步骤4:验证产品和项目数据
|
||||
- 属性productsCount @5
|
||||
- 属性projectsCount @0
|
||||
- 步骤5:验证执行和构建数据
|
||||
- 属性executionsCount @0
|
||||
- 属性buildsCount @2
|
||||
- 步骤6:验证模块和分支数据
|
||||
- 属性moduleOptionMenuCount @4
|
||||
- 属性branchesCount @1
|
||||
- 步骤7:验证计划和用例数据
|
||||
- 属性plansCount @3
|
||||
- 属性casesCount @4
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('product')->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:验证计划和用例数据
|
||||
@@ -1,161 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::buildEditForm();
|
||||
timeout=0
|
||||
cid=15438
|
||||
|
||||
- 步骤1:正常情况下编辑bug,验证基本视图属性
|
||||
- 属性bug @1
|
||||
- 属性product @1
|
||||
- 属性moduleOptionMenu @5
|
||||
- 步骤2:编辑有项目和执行的bug,验证项目和执行数据
|
||||
- 属性projects @1
|
||||
- 属性executions @1
|
||||
- 步骤3:编辑有分支的产品bug,验证分支选项属性branchTagOption @0
|
||||
- 步骤4:编辑有重复bug的情况,验证duplicateBugs数量属性duplicateBugs @0
|
||||
- 步骤5:验证编辑表单的projectID属性projectID @1
|
||||
- 步骤6:无项目的bug,验证项目数据为空
|
||||
- 属性projectID @0
|
||||
- 属性projects @0
|
||||
- 步骤7:有项目无执行的bug,验证执行数据为空
|
||||
- 属性projectID @1
|
||||
- 属性executions @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('product')->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,验证执行数据为空
|
||||
@@ -1,74 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::getAssignedToPairs();
|
||||
timeout=0
|
||||
cid=15446
|
||||
|
||||
- 执行bugTest模块的getAssignedToPairsTest方法,参数是$bug1 @3
|
||||
- 执行bugTest模块的getAssignedToPairsTest方法,参数是$bug2 @2
|
||||
- 执行bugTest模块的getAssignedToPairsTest方法,参数是$bug3 @4
|
||||
- 执行bugTest模块的getAssignedToPairsTest方法,参数是$bug4 @10
|
||||
- 执行$users['closed']) ? 1 : 0 @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
// 准备user测试数据
|
||||
$user = zendata('user');
|
||||
$user->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');
|
||||
@@ -1,65 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::getProductsForCreate();
|
||||
timeout=0
|
||||
cid=15457
|
||||
|
||||
- 步骤1:测试在默认tab下获取产品列表,传入productID=1 @1
|
||||
- 步骤2:测试在默认tab下获取产品列表,传入不存在的productID=999 @10
|
||||
- 步骤3:测试返回对象包含products属性 @1
|
||||
- 步骤4:测试返回对象包含productID属性 @1
|
||||
- 步骤5:测试在默认tab下传入空productID @10
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
su('admin');
|
||||
|
||||
$product = zenData('product');
|
||||
$product->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
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 bugZen::updateTodoAfterCreate();
|
||||
timeout=0
|
||||
cid=15483
|
||||
|
||||
- 测试正常更新待办状态 @1
|
||||
- 测试另一个待办更新 @1
|
||||
- 测试待办类型为feedback的情况 @1
|
||||
- 测试不存在的待办ID @1
|
||||
- 测试第5个待办更新 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('todo')->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个待办更新
|
||||
@@ -1,84 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 buildZen::assignCreateData();
|
||||
timeout=0
|
||||
cid=15515
|
||||
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是1, 0, 1, '' 属性productID @1
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是1, 11, 1, '' 属性executionID @11
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是0, 0, 1, '' 第products条的1属性 @产品1
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是1, 11, 1, '' 属性executionID @11
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是1, 0, 1, 'normal' 属性productID @1
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是1, 0, 1, '' 第users条的admin属性 @`A:管理员`
|
||||
- 执行buildTest模块的assignCreateDataTest方法,参数是1, 0, 1, '' 属性productID @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
$product = zenData('product');
|
||||
$product->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');
|
||||
@@ -1,65 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 caselibZen::prepareCasesForBathcCreate();
|
||||
timeout=0
|
||||
cid=15552
|
||||
|
||||
- 执行caselibTest模块的prepareCasesForBathcCreateTest方法,参数是1
|
||||
- 第0条的title属性 @Test Case Title 1
|
||||
- 第0条的type属性 @feature
|
||||
- 第0条的lib属性 @1
|
||||
- 第0条的project属性 @0
|
||||
- 第0条的status属性 @normal
|
||||
- 第0条的version属性 @1
|
||||
- 执行caselibTest模块的prepareCasesForBathcCreateTest方法,参数是1, 'empty' @1
|
||||
- 执行caselibTest模块的prepareCasesForBathcCreateTest方法,参数是1, 'empty' @1
|
||||
- 执行caselibTest模块的prepareCasesForBathcCreateTest方法,参数是2, 'count' @3
|
||||
- 执行caselibTest模块的prepareCasesForBathcCreateTest方法,参数是3
|
||||
- 第0条的openedBy属性 @guest
|
||||
- 第0条的version属性 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/caselib.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$caselibTest = new caselibTest();
|
||||
|
||||
// 测试步骤1:正常输入情况,包含所有必填字段
|
||||
$_POST['title'] = array(0 => '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');
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 caselibZen::processCasesForExport();
|
||||
timeout=0
|
||||
cid=15554
|
||||
|
||||
- 步骤1:测试空用例数组处理 @0
|
||||
- 步骤2:测试单个用例的基本字段处理 @1
|
||||
- 步骤3:测试用例类型字段被转换 @功能测试
|
||||
- 步骤4:测试用例返回数量 @1
|
||||
- 步骤5:测试用例日期字段格式化 @0
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/caselib.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
$caseTable = zenData('case');
|
||||
$caseTable->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:测试用例日期字段格式化
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 docZen::assignApiVarForSpace();
|
||||
timeout=0
|
||||
cid=16177
|
||||
|
||||
- 执行docTest模块的assignApiVarForSpaceTest方法,参数是'product', 'all', 'lib', 1, array
|
||||
- 属性pager @pager
|
||||
- 属性hasDocs @1
|
||||
- 执行docTest模块的assignApiVarForSpaceTest方法,参数是'product', 'all', 'api', 1, array
|
||||
- 属性pager @pager
|
||||
- 属性hasApiList @1
|
||||
- 执行docTest模块的assignApiVarForSpaceTest方法,参数是'product', 'all', 'lib', 1, array 属性canExport @0
|
||||
- 执行docTest模块的assignApiVarForSpaceTest方法,参数是'project', 'all', 'lib', 1, array 属性canExport @0
|
||||
- 执行docTest模块的assignApiVarForSpaceTest方法,参数是'product', 'all', 'lib', 1, array 属性pager @pager
|
||||
- 执行docTest模块的assignApiVarForSpaceTest方法,参数是'product', 'all', 'lib', 1, array 属性pager @pager
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/doczen.unittest.class.php';
|
||||
|
||||
zendata('doclib')->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');
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 docZen::previeweicket();
|
||||
timeout=0
|
||||
cid=16197
|
||||
|
||||
- 步骤1:customSearch条件预览工单列表,status=wait @3
|
||||
- 步骤2:customSearch条件预览工单列表,pri=1 @2
|
||||
- 步骤3:customSearch条件预览工单列表,status=doing @2
|
||||
- 步骤4:customSearch条件预览工单列表,type=bug @5
|
||||
- 步骤5:不存在的product @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
$ticketTable = zenData('ticket');
|
||||
$ticketTable->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
|
||||
@@ -1,33 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 editorZen::buildContentByAction();
|
||||
timeout=0
|
||||
cid=16244
|
||||
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'', 'edit', '' @0
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'/tmp/test_php_file.php', 'edit', '' @<?php echo 'test';
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'/tmp/test_php_file.php', 'override', '' @~~
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'/tmp/newfile.php', 'unknown', '' @<?php echo 'test';
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'/tmp/newfile.txt', 'unknown', '' @~~
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'', 'extendModel', '' @<?php
|
||||
- 执行editorTest模块的buildContentByActionTest方法,参数是'/tmp/nonexistent.txt', 'edit', '' @~~
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/editorzen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$editorTest = new editorZenTest();
|
||||
|
||||
r($editorTest->buildContentByActionTest('', 'edit', '')) && p() && e('0');
|
||||
r($editorTest->buildContentByActionTest('/tmp/test_php_file.php', 'edit', '')) && p() && e("<?php echo 'test';");
|
||||
r($editorTest->buildContentByActionTest('/tmp/test_php_file.php', 'override', '')) && p() && e('~~');
|
||||
r($editorTest->buildContentByActionTest('/tmp/newfile.php', 'unknown', '')) && p() && e("<?php echo 'test';");
|
||||
r($editorTest->buildContentByActionTest('/tmp/newfile.txt', 'unknown', '')) && p() && e('~~');
|
||||
r($editorTest->buildContentByActionTest('', 'extendModel', '')) && p() && e("<?php");
|
||||
r($editorTest->buildContentByActionTest('/tmp/nonexistent.txt', 'edit', '')) && p() && e('~~');
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 executionZen::buildExecutionForCreate();
|
||||
timeout=0
|
||||
cid=16411
|
||||
|
||||
- 执行executionzenTest模块的buildExecutionForCreateTest方法 属性project @所属项目不能为空。
|
||||
- 执行executionzenTest模块的buildExecutionForCreateTest方法 属性openedBy @admin
|
||||
- 执行executionzenTest模块的buildExecutionForCreateTest方法 属性parent @2
|
||||
- 执行executionzenTest模块的buildExecutionForCreateTest方法 属性whitelist @
|
||||
- 执行executionzenTest模块的buildExecutionForCreateTest方法 属性displayCards @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/executionzen.unittest.class.php';
|
||||
|
||||
zenData('project')->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');
|
||||
@@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 executionZen::getImportBugs();
|
||||
timeout=0
|
||||
cid=16429
|
||||
|
||||
- 步骤1:正常浏览模式获取产品1和2的bugs @6
|
||||
- 步骤2:正常浏览模式获取产品1的bugs @3
|
||||
- 步骤3:正常浏览模式获取产品3的bugs @3
|
||||
- 步骤4:正常浏览模式获取空产品列表的bugs @0
|
||||
- 步骤5:验证返回bug数量与预期相符 @6
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/executionzen.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
$bug = zenData('bug');
|
||||
$bug->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数量与预期相符
|
||||
@@ -1,75 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 extensionZen::backupDB();
|
||||
timeout=0
|
||||
cid=16473
|
||||
|
||||
- 执行extensionTest模块的backupDBTest方法,参数是$testExt1 @testplugin1.20251109.sql
|
||||
- 执行extensionTest模块的backupDBTest方法,参数是$testExt2 @0
|
||||
- 执行extensionTest模块的backupDBTest方法,参数是$testExt3 @0
|
||||
- 执行extensionTest模块的backupDBTest方法,参数是$testExt4 @testplugin4.20251109.sql
|
||||
- 执行extensionTest模块的backupDBTest方法,参数是$testExt5 @0
|
||||
|
||||
*/
|
||||
|
||||
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';
|
||||
|
||||
/* 准备测试环境 */
|
||||
$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');
|
||||
@@ -1,95 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 extensionZen::copyPackageFiles();
|
||||
timeout=0
|
||||
cid=16485
|
||||
|
||||
- 执行$result1 @1
|
||||
- 执行$result2 @0
|
||||
- 执行$result3 @0
|
||||
- 执行$result4) > 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', '<?php');
|
||||
$result4 = $extensionTest->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', '<?php');
|
||||
$result5 = $extensionTest->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);
|
||||
@@ -1,54 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 gitlabZen::getGroupMemberData();
|
||||
timeout=0
|
||||
cid=16675
|
||||
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第0条的0:user_id属性 @2
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第0条的0:access_level属性 @40
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第0条的0:expires_at属性 @2025-12-31
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第2条的0:user_id属性 @2
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第2条的0:access_level属性 @50
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第0条的0:user_id属性 @3
|
||||
- 执行gitlabTest模块的getGroupMemberDataTest方法,参数是array 第1条的0属性 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$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';
|
||||
|
||||
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');
|
||||
@@ -1,65 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 gitlabZen::getProjectMemberData();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第0条的0:user_id属性 @2
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第0条的0:access_level属性 @40
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第0条的0:expires_at属性 @2025-12-31
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第2条的0:user_id属性 @2
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第2条的0:access_level属性 @50
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第1条的0属性 @2
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第0条的0:user_id属性 @3
|
||||
- 执行gitlabTest模块的getProjectMemberDataTest方法,参数是array 第1条的0属性 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
/* 设置 methodName 避免 gitlab 控制器构造函数报错 */
|
||||
global $app;
|
||||
$app->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');
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 groupZen::managePrivByModule();
|
||||
timeout=0
|
||||
cid=16735
|
||||
|
||||
- 步骤1:正常情况下调用方法,验证返回的视图数据结构完整性
|
||||
- 属性title @string
|
||||
- 属性groups @5
|
||||
- 属性subsets @76
|
||||
- 属性packages @76
|
||||
- 属性privs @18
|
||||
- 步骤2:验证返回的title字段包含正确的字符串类型属性title @string
|
||||
- 步骤3:验证返回的groups字段返回组数量属性groups @5
|
||||
- 步骤4:验证返回的subsets字段是数组且包含子集信息属性subsets @76
|
||||
- 步骤5:验证返回的packages字段是数组且包含包信息属性packages @76
|
||||
- 步骤6:验证返回的privs字段是数组且包含权限信息属性privs @18
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/groupzen.unittest.class.php';
|
||||
|
||||
zenData('group')->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字段是数组且包含权限信息
|
||||
@@ -1,64 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 instanceZen::storeView();
|
||||
timeout=0
|
||||
cid=16829
|
||||
|
||||
- 步骤1:查看不存在的instance实例(ID=999)属性result @fail
|
||||
- 步骤2:查看ID为0的instance实例属性result @fail
|
||||
- 步骤3:查看已删除的instance实例(ID=4)属性result @fail
|
||||
- 步骤4:查看存在但会触发异常的instance实例(ID=1)属性result @fail
|
||||
- 步骤5:查看另一个不存在的instance实例(ID=100)属性result @fail
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('user')->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)
|
||||
@@ -1,58 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 jobZen::getCompileData();
|
||||
timeout=0
|
||||
cid=16861
|
||||
|
||||
- 执行jobTest模块的getCompileDataTest方法,参数是$compile1 属性taskID @1
|
||||
- 执行jobTest模块的getCompileDataTest方法,参数是$compile2 属性taskID @2
|
||||
- 执行jobTest模块的getCompileDataTest方法,参数是$compile3 属性taskID @3
|
||||
- 执行jobTest模块的getCompileDataTest方法,参数是$compile4 属性groupCases @1
|
||||
- 执行jobTest模块的getCompileDataTest方法,参数是$compile5 属性suites @5
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
su('admin');
|
||||
|
||||
zenData('product')->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');
|
||||
@@ -1,51 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanTao::getStoryCardMenu();
|
||||
timeout=0
|
||||
cid=16986
|
||||
|
||||
- 步骤1:空story数组输入 @0
|
||||
- 步骤2:单个active状态story @1
|
||||
- 步骤3:draft状态story不能创建任务 @1
|
||||
- 步骤4:reviewing状态story不能创建任务 @1
|
||||
- 步骤5:closed状态story不能创建任务 @1
|
||||
- 步骤6:execution无产品关联不显示unlink @1
|
||||
- 步骤7:多个story返回对应数量菜单 @3
|
||||
- 步骤8:测试不同stage的story菜单 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/tao.class.php';
|
||||
|
||||
zenData('story')->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菜单
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanZen::assignCreateVars();
|
||||
timeout=0
|
||||
cid=16999
|
||||
|
||||
- 步骤1:正常私有空间创建看板属性spaceID @1
|
||||
- 步骤2:全局空间创建看板属性ownerPairs @10
|
||||
- 步骤3:协作空间创建看板属性users @10
|
||||
- 步骤4:带复制区域参数创建看板属性copyRegion @1
|
||||
- 步骤5:不带复制区域参数创建看板属性copyRegion @0
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/kanban.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
zendata('kanbanspace')->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:不带复制区域参数创建看板
|
||||
@@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 metricZen::getOldMetricInfo();
|
||||
timeout=0
|
||||
cid=17191
|
||||
|
||||
- 步骤1:测试第1个旧版度量项基本信息字段数量 @9
|
||||
- 步骤2:测试第1个旧版度量项的scope字段name值第scope条的name属性 @度量范围
|
||||
- 步骤3:测试第1个旧版度量项的purpose字段name值第purpose条的name属性 @度量目的
|
||||
- 步骤4:测试第1个旧版度量项的code字段name值第code条的name属性 @度量项代号
|
||||
- 步骤5:测试第1个旧版度量项的unit字段name值第unit条的name属性 @度量单位
|
||||
- 步骤6:测试第1个旧版度量项的collectType字段name值第collectType条的name属性 @收集方式
|
||||
- 步骤7:测试第1个旧版度量项的definition字段name值第definition条的name属性 @度量定义
|
||||
- 步骤8:测试第1个旧版度量项的sql字段name值第sql条的name属性 @SQL语句
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/metriczen.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
zendata('basicmeas')->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值
|
||||
@@ -1,47 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 myZen::showWorkCountNotInOpen();
|
||||
timeout=0
|
||||
cid=17317
|
||||
|
||||
- 测试开源版(open)下空count数组属性isBiz @0
|
||||
- 测试开源版(open)下空count数组的isMax属性isMax @0
|
||||
- 测试开源版(open)下空count数组的isIPD属性isIPD @0
|
||||
- 测试开源版(open)下feedback计数为0属性feedback @0
|
||||
- 测试非空count数组保留原有task计数属性task @5
|
||||
- 测试非空count数组保留原有story计数属性story @3
|
||||
- 测试非空count数组保留原有bug计数属性bug @2
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('feedback')->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计数
|
||||
@@ -1,56 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 pivotTao::getExecutionList();
|
||||
timeout=0
|
||||
cid=17441
|
||||
|
||||
- 执行pivotTest模块的getExecutionListTest方法,参数是'', '', array @5
|
||||
- 执行pivotTest模块的getExecutionListTest方法,参数是'2024-06-01', '2024-06-29', array @0
|
||||
- 执行pivotTest模块的getExecutionListTest方法,参数是'2024-07-01', '2024-07-31', array @2
|
||||
- 执行pivotTest模块的getExecutionListTest方法,参数是'', '', array @2
|
||||
- 执行pivotTest模块的getExecutionListTest方法,参数是'', '', array
|
||||
- 属性projectID @5
|
||||
- 属性executionID @10
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/tao.class.php';
|
||||
|
||||
$task = zenData('task');
|
||||
$task->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');
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 pivotZen::bugCreate();
|
||||
timeout=0
|
||||
cid=17454
|
||||
|
||||
- 测试不传参数的默认情况 >> 查询上月至今日的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');
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 pivotZen::getBuiltinMenus();
|
||||
timeout=0
|
||||
cid=17455
|
||||
|
||||
- 执行pivotTest模块的getBuiltinMenusTest方法,参数是1, $productGroup @0
|
||||
- 执行pivotTest模块的getBuiltinMenusTest方法,参数是1, $projectGroup @0
|
||||
- 执行pivotTest模块的getBuiltinMenusTest方法,参数是1, $testGroup @0
|
||||
- 执行pivotTest模块的getBuiltinMenusTest方法,参数是1, $staffGroup @0
|
||||
- 执行pivotTest模块的getBuiltinMenusTest方法,参数是1, $emptyGroup @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/pivotzen.unittest.class.php';
|
||||
|
||||
zenData('module')->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');
|
||||
@@ -1,54 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 pivotZen::getDefaultMethodAndParams();
|
||||
timeout=0
|
||||
cid=17456
|
||||
|
||||
- 执行pivotTest模块的getDefaultMethodAndParamsTest方法,参数是1, 0 @~~
|
||||
- 执行pivotTest模块的getDefaultMethodAndParamsTest方法,参数是1, 999 @~~
|
||||
- 执行pivotTest模块的getDefaultMethodAndParamsTest方法,参数是1, 1 @~~
|
||||
- 执行pivotTest模块的getDefaultMethodAndParamsTest方法,参数是1, 5 @~~
|
||||
- 执行pivotTest模块的getDefaultMethodAndParamsTest方法,参数是1, 9 @~~
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/pivotzen.unittest.class.php';
|
||||
|
||||
$table = zenData('module');
|
||||
$table->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('~~');
|
||||
@@ -1,50 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 productZen::buildProductForClose();
|
||||
timeout=0
|
||||
cid=17564
|
||||
|
||||
- 执行productTest模块的buildProductForCloseTest方法,参数是1
|
||||
- 属性status @close
|
||||
- 属性closedDate @2025-11-11
|
||||
- 执行productTest模块的buildProductForCloseTest方法 属性status @close
|
||||
- 执行productTest模块的buildProductForCloseTest方法,参数是999 属性status @close
|
||||
- 执行productTest模块的buildProductForCloseTest方法,参数是1 属性status @close
|
||||
- 执行productTest模块的buildProductForCloseTest方法,参数是1 属性status @close
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$productTest = new productZenTest();
|
||||
|
||||
$_POST['status'] = 'close';
|
||||
$_POST['closedDate'] = date('Y-m-d');
|
||||
$_POST['comment'] = 'Test close comment';
|
||||
r($productTest->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');
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 productZen::getActionsForDynamic();
|
||||
timeout=0
|
||||
cid=17570
|
||||
|
||||
- 测试步骤1:获取产品1所有用户的全部动态记录 @0
|
||||
- 测试步骤2:获取产品1的admin用户动态记录 @0
|
||||
- 测试步骤3:获取产品1特定日期的动态记录 @0
|
||||
- 测试步骤4:获取产品1动态记录按ID降序排列 @0
|
||||
- 测试步骤5:获取产品0(无效产品ID)的动态记录 @0
|
||||
- 测试步骤6:获取产品1按账户类型(account)筛选的动态 @0
|
||||
- 测试步骤7:获取产品1的动态记录向前翻页 @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('action')->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的动态记录向前翻页
|
||||
@@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 productZen::getProductPlans();
|
||||
timeout=0
|
||||
cid=17592
|
||||
|
||||
- 步骤1:正常情况,isProjectStory为true且storyType为story
|
||||
- 第1条的3属性 @计划3 [2025-01-25 ~ 2025-12-31]
|
||||
- 第2条的5属性 @计划5 [2025-02-08 ~ 2025-12-31]
|
||||
- 步骤2:isProjectStory为false @0
|
||||
- 步骤3:storyType为requirement时 @0
|
||||
- 步骤4:projectProducts为空数组 @0
|
||||
- 步骤5:projectID为0时仍返回计划
|
||||
- 第1条的3属性 @计划3 [2025-01-25 ~ 2025-12-31]
|
||||
- 第2条的5属性 @计划5 [2025-02-08 ~ 2025-12-31]
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
$product = zenData('product');
|
||||
$product->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时仍返回计划
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 productplanZen::buildActionsList();
|
||||
timeout=0
|
||||
cid=17659
|
||||
|
||||
- 执行$result @11
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
- 执行$result @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/productplanzen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$productplanTest = new productplanZenTest();
|
||||
|
||||
// 构造计划对象用于测试
|
||||
$plan = new stdClass();
|
||||
$plan->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');
|
||||
@@ -1,120 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 productplanZen::buildPlansForBatchEdit();
|
||||
timeout=0
|
||||
cid=17663
|
||||
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData1
|
||||
- 第1条的begin属性 @2024-01-01
|
||||
- 第1条的end属性 @2024-06-30
|
||||
- 第1条的status属性 @doing
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData2 第begin条的0属性 @『计划3』的开始时间不能大于结束时间。
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData3
|
||||
- 第4条的begin属性 @2030-01-01
|
||||
- 第4条的end属性 @2030-01-01
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData4 第begin条的0属性 @『计划11』的开始时间 2024-01-01 不能小于父计划的开始时间 2024-03-01。
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData5 第end条的0属性 @『计划12』的结束时间 2024-12-31 不能大于父计划的结束时间 2024-10-31。
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData6
|
||||
- 第7条的begin属性 @2024-03-15
|
||||
- 第7条的end属性 @2024-09-15
|
||||
- 第7条的status属性 @wait
|
||||
- 执行productplanTest模块的buildPlansForBatchEditTest方法,参数是$postData7 第8条的branch属性 @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('productplan')->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');
|
||||
@@ -1,138 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 productplanZen::buildViewActions();
|
||||
timeout=0
|
||||
cid=17664
|
||||
|
||||
- 执行$result1, 'start') || hasAction($result1, '开始' @1
|
||||
- 执行$result1, '编辑' @1
|
||||
- 执行$result1, 'delete') || hasAction($result1, '删除' @1
|
||||
- 执行$result1, '关闭' @1
|
||||
- 执行$result5, '创建子计划' @1
|
||||
- 执行$result2, 'finish') || hasAction($result2, '完成' @1
|
||||
- 执行$result3, '关闭' @1
|
||||
- 执行$result4, 'activate') || hasAction($result4, '激活' @1
|
||||
- 执行$result1 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
// 模拟 buildViewActions 方法,因为实际方法依赖复杂的权限系统
|
||||
function simulateBuildViewActions($plan) {
|
||||
$params = "planID={$plan->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');
|
||||
@@ -1,36 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programZen::getProgramsByType();
|
||||
timeout=0
|
||||
cid=17732
|
||||
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'doing', 'id_desc', 0 @9
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'unclosed', 'id_desc', 0 @17
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'wait', 'id_desc', 0 @5
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'closed', 'id_desc', 0 @2
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'suspended', 'id_desc', 0 @3
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'doing', 'order_asc', 0 @9
|
||||
- 执行programTest模块的getProgramsByTypeTest方法,参数是'all', 'id_desc', 0 @19
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/programzen.unittest.class.php';
|
||||
|
||||
zenData('project')->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');
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 projectZen::buildActivateForm();
|
||||
timeout=0
|
||||
cid=17924
|
||||
|
||||
- 步骤1:正常项目激活
|
||||
- 属性title @激活项目
|
||||
- 属性project @1
|
||||
- 步骤2:已挂起项目激活
|
||||
- 属性title @激活项目
|
||||
- 属性newBegin @2025-11-11
|
||||
- 步骤3:已关闭项目激活
|
||||
- 属性title @激活项目
|
||||
- 属性actions @1
|
||||
- 步骤4:长期项目激活
|
||||
- 属性title @激活项目
|
||||
- 属性newEnd @2031-08-13
|
||||
- 步骤5:验证新开始日期为当前日期属性newBegin @2025-11-11
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/projectzen.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
$table = zenData('project');
|
||||
$table->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:验证新开始日期为当前日期
|
||||
@@ -1,122 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 projectZen::buildBugView();
|
||||
timeout=0
|
||||
cid=17925
|
||||
|
||||
- 步骤1:正常项目bug视图构建
|
||||
- 属性productID @1
|
||||
- 属性projectID @1
|
||||
- 步骤2:指定产品ID的bug视图属性productID @2
|
||||
- 步骤3:指定类型的bug视图
|
||||
- 属性type @all
|
||||
- 属性orderBy @id_desc
|
||||
- 步骤4:指定版本的bug视图属性buildID @1
|
||||
- 步骤5:验证项目ID正确属性projectID @2
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/projectzen.unittest.class.php';
|
||||
|
||||
// 禁用废弃警告
|
||||
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
zendata('bug')->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正确
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 projectZen::buildCreateForm();
|
||||
timeout=0
|
||||
cid=17927
|
||||
|
||||
- 测试scrum模型、无项目集ID、无复制项目的创建表单 >> 创建项目
|
||||
- 测试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');
|
||||
@@ -1,56 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 projectZen::buildMembers();
|
||||
timeout=0
|
||||
cid=17929
|
||||
|
||||
- 步骤1:正常情况3个成员+5个空行
|
||||
- 属性count @9
|
||||
- 属性hasDefault @1
|
||||
- 属性hasImport @1
|
||||
- 属性hasDept @2
|
||||
- 步骤2:只有当前成员
|
||||
- 属性count @6
|
||||
- 属性hasDefault @1
|
||||
- 属性hasImport @0
|
||||
- 属性hasDept @0
|
||||
- 步骤3:部门成员与当前成员重复
|
||||
- 属性count @7
|
||||
- 属性hasDefault @1
|
||||
- 属性hasDept @1
|
||||
- 步骤4:部门成员与导入成员重复
|
||||
- 属性count @8
|
||||
- 属性hasDefault @1
|
||||
- 属性hasImport @1
|
||||
- 属性hasDept @1
|
||||
- 步骤5:所有数组为空
|
||||
- 属性count @5
|
||||
- 属性hasDefault @0
|
||||
- 属性hasImport @0
|
||||
- 属性hasDept @0
|
||||
- 属性hasAdd @5
|
||||
- 步骤6:成员类型标记属性memberTypes @default|dept|import|add
|
||||
- 步骤7:混合数据场景
|
||||
- 属性count @6
|
||||
- 属性hasDept @1
|
||||
- 属性hasAdd @5
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/projectzen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$projectTest = new projectZenTest();
|
||||
|
||||
r($projectTest->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:混合数据场景
|
||||
@@ -1,75 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 projectZen::recordExecutionsOfUnlinkedProducts();
|
||||
timeout=0
|
||||
cid=17960
|
||||
|
||||
- 执行projectTest模块的recordExecutionsOfUnlinkedProductsTest方法,参数是array @0
|
||||
- 执行projectTest模块的recordExecutionsOfUnlinkedProductsTest方法,参数是array 第101条的action属性 @unlinkproduct
|
||||
- 执行projectTest模块的recordExecutionsOfUnlinkedProductsTest方法,参数是array
|
||||
- 第101条的objectID属性 @101
|
||||
- 第103条的objectID属性 @103
|
||||
- 执行projectTest模块的recordExecutionsOfUnlinkedProductsTest方法,参数是array @0
|
||||
- 执行projectTest模块的recordExecutionsOfUnlinkedProductsTest方法,参数是array
|
||||
- 第101条的action属性 @unlinkproduct
|
||||
- 第103条的action属性 @unlinkproduct
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/zen.class.php';
|
||||
|
||||
zenData('project')->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');
|
||||
@@ -1,61 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 repoZen::getCommits();
|
||||
timeout=0
|
||||
cid=18137
|
||||
|
||||
- 测试步骤1:获取Git版本库的提交记录 @3
|
||||
- 测试步骤2:获取Subversion版本库的提交记录 @3
|
||||
- 测试步骤3:获取指定文件的提交记录 @1
|
||||
- 测试步骤4:传入无效的repo对象 @0
|
||||
- 测试步骤5:传入无效的type参数 @0
|
||||
- 测试步骤6:使用不同分页参数获取提交记录 @3
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php';
|
||||
|
||||
ob_start();
|
||||
zenData('repo')->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:使用不同分页参数获取提交记录
|
||||
@@ -1,70 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 repoZen::getFilesInfo();
|
||||
timeout=0
|
||||
cid=18139
|
||||
|
||||
- 步骤1:正常Git仓库返回2个文件信息 @2
|
||||
- 步骤2:Gitlab仓库revision字段为空第0条的revision属性 @~~
|
||||
- 步骤3:SVN仓库返回数字revision第0条的revision属性 @1
|
||||
- 步骤4:空repo对象返回空数组 @0
|
||||
- 步骤5:Git仓库revision被截取为10位 @10
|
||||
- 步骤6:Gitlab文件comment为空第0条的comment属性 @~~
|
||||
- 步骤7:SVN仓库返回文件类型第0条的kind属性 @file
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$repoTest = new repoZenTest();
|
||||
|
||||
// 测试步骤1: 测试Git仓库根路径文件列表
|
||||
$gitRepo = new stdClass();
|
||||
$gitRepo->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仓库返回文件类型
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 repoZen::getLinkBranches();
|
||||
timeout=0
|
||||
cid=18140
|
||||
|
||||
- 测试步骤1:空产品数组 @0
|
||||
- 测试步骤2:仅包含normal类型产品 @0
|
||||
- 测试步骤3:包含branch类型产品但无分支 @0
|
||||
- 测试步骤4:验证branch类型产品返回0个分支(无分支数据) @0
|
||||
- 测试步骤5:包含多个产品类型,返回0个分支(无分支数据) @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php';
|
||||
|
||||
zendata('product')->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个分支(无分支数据)
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 repoZen::getSearchFormQuery();
|
||||
timeout=0
|
||||
cid=18145
|
||||
|
||||
- 测试步骤1:验证查询对象返回begin属性属性begin @2023-01-01
|
||||
- 测试步骤2:验证查询对象返回end属性属性end @2023-12-31
|
||||
- 测试步骤3:验证查询对象返回committer属性属性committer @admin
|
||||
- 测试步骤4:验证查询对象返回commit属性属性commit @abc123
|
||||
- 测试步骤5:验证多个属性组合返回值属性begin @2024-01-01
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
|
||||
zendata('repo')->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:验证多个属性组合返回值
|
||||
@@ -1,71 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 repoZen::prepareCreate();
|
||||
timeout=0
|
||||
cid=18150
|
||||
|
||||
- 执行result1 = $repoZenTest模块的prepareCreateTest方法,参数是$normalFormData, false, 'normal' 属性acl @{"acl":"open"}
|
||||
- 执行result2 = $repoZenTest模块的prepareCreateTest方法,参数是$containerFormData, false, 'container_git' 属性acl @{"acl":"open"}
|
||||
- 执行result3 = $repoZenTest模块的prepareCreateTest方法,参数是$gitlabFormData, false, 'gitlab' 属性extra @123
|
||||
- 执行result4 = $repoZenTest模块的prepareCreateTest方法,参数是$normalFormData, false, 'acl_error' @0
|
||||
- 执行result5 = $repoZenTest模块的prepareCreateTest方法,参数是$normalFormData, true, 'duplicate_project' @0
|
||||
- 执行repoZenTest模块的prepareCreateTest方法,参数是$normalFormData, false, 'normal' @1
|
||||
- 执行repoZenTest模块的prepareCreateTest方法,参数是$normalFormData, false, 'normal')), 'open') !== false @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$repoZenTest = new repoZenTest();
|
||||
|
||||
// 准备测试数据
|
||||
$normalFormData = array(
|
||||
'SCM' => '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');
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 repoZen::syncLocalCommit();
|
||||
timeout=0
|
||||
cid=18156
|
||||
|
||||
- 步骤1:日志文件不存在时应返回空字符串 @0
|
||||
- 步骤2:日志包含fatal错误时应返回错误行内容 @fatal: repository not found
|
||||
- 步骤3:日志包含failed错误时应返回错误行内容 @failed to connect
|
||||
- 步骤4:日志包含done标记且成功完成时应删除文件并返回空字符串 @0
|
||||
- 步骤5:日志包含empty repository标记时应删除文件并返回空字符串 @0
|
||||
- 步骤6:日志包含Total标记但未完成finishCount时应返回处理中状态 @1
|
||||
- 步骤7:日志包含Total标记和finishCount及finishCompress时应删除文件并返回空字符串 @0
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/repozen.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$repoZenTest = new repoZenTest();
|
||||
|
||||
// 4. 准备测试数据对象
|
||||
$repo1 = new stdClass();
|
||||
$repo1->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时应删除文件并返回空字符串
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 reportZen::assignAnnualData();
|
||||
timeout=0
|
||||
cid=18189
|
||||
|
||||
- 测试有account参数的情况,返回hasLogins标识属性hasLogins @yes
|
||||
- 测试有dept参数的情况,返回hasUsers标识属性hasUsers @yes
|
||||
- 测试dept为0且account为空的情况,返回allTimeStatus标识属性allTimeStatus @yes
|
||||
- 测试dept不为0且accounts为空的边界情况,返回deptEmptyAccounts标识属性deptEmptyAccounts @yes
|
||||
- 测试正常dept和accounts参数的情况,返回hasTodos标识属性hasTodos @yes
|
||||
- 测试正常参数的情况,返回hasContributions标识属性hasContributions @yes
|
||||
- 测试正常参数的情况,返回hasConsumed标识属性hasConsumed @yes
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/report.unittest.class.php';
|
||||
|
||||
zenData('user')->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标识
|
||||
@@ -1,86 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::checkFeedbackAndTicketPriv();
|
||||
timeout=0
|
||||
cid=18316
|
||||
|
||||
- 测试feedback类型,用户为反馈创建者,应保留结果 >> 验证返回结果数量为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');
|
||||
@@ -1,86 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::processDocRecord();
|
||||
timeout=0
|
||||
cid=18334
|
||||
|
||||
- 测试普通文档记录(无assetLib)属性url @doc-view-1.html
|
||||
- 测试资产库文档记录(assetLibType为practice)属性url @assetlib-practiceView-3.html
|
||||
- 测试资产库文档记录(assetLibType为component)属性url @assetlib-componentView-5.html
|
||||
- 测试资产库文档记录(assetLibType为空)属性url @assetlib-componentView-7.html
|
||||
- 测试文档记录的URL是否包含正确的objectID属性url @doc-view-9.html
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/tao.class.php';
|
||||
|
||||
zendata('doc')->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
|
||||
@@ -1,56 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::processExecutionRecord();
|
||||
timeout=0
|
||||
cid=18335
|
||||
|
||||
- 测试普通执行类型(sprint),应生成view链接 >> 验证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');
|
||||
@@ -1,92 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::processProjectRecord();
|
||||
timeout=0
|
||||
cid=18337
|
||||
|
||||
- 执行searchTest模块的processProjectRecordTest方法,项目模型为scrum,参数是$record1, $objectList1 >> 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');
|
||||
@@ -1,95 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::processRecord();
|
||||
timeout=0
|
||||
cid=18338
|
||||
|
||||
- 测试issue类型的记录处理,lib为空 >> 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');
|
||||
@@ -1,95 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::processRiskRecord();
|
||||
timeout=0
|
||||
cid=18340
|
||||
|
||||
- 执行searchTao模块的processRiskRecordTest方法,module为risk,lib为0 >> 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');
|
||||
@@ -1,100 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 searchTao::processStoryRecord();
|
||||
timeout=0
|
||||
cid=18341
|
||||
|
||||
- 执行searchTao模块的processStoryRecordTest方法,story不存在于objectList中 >> 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');
|
||||
@@ -1,83 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/tao.class.php';
|
||||
|
||||
$task = zenData('task');
|
||||
$task->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');
|
||||
@@ -1,55 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 storyTao::getProductReviewers();
|
||||
timeout=0
|
||||
cid=18641
|
||||
|
||||
- 测试步骤1:获取有reviewer字段的open产品的评审人员列表 >> 返回包含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');
|
||||
@@ -1,98 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 storyZen::getFormFieldsForCreate();
|
||||
timeout=0
|
||||
cid=18685
|
||||
|
||||
- 步骤1:测试普通产品创建需求的表单字段包含product字段第product条的name属性 @product
|
||||
- 步骤2:测试分支产品创建需求的表单字段包含branch字段第branch条的name属性 @branch
|
||||
- 步骤3:测试带执行项目创建需求时产品默认值设置正确第product条的default属性 @1
|
||||
- 步骤4:测试需求类型为requirement时grade字段存在第grade条的name属性 @grade
|
||||
- 步骤5:测试需求类型为epic时reviewer字段存在第reviewer条的name属性 @reviewer
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/storyzen.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
$product = zenData('product');
|
||||
$product->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字段存在
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 storyZen::getFormFieldsForReview();
|
||||
timeout=0
|
||||
cid=18687
|
||||
|
||||
- 测试获取软件需求评审表单字段的基本结构
|
||||
- 第result条的control属性 @picker
|
||||
- 第result条的required属性 @1
|
||||
- 测试获取用户需求评审表单字段的assignedTo字段第assignedTo条的control属性 @picker
|
||||
- 测试reviewing状态且版本为1的需求评审字段的pri默认值第pri条的default属性 @3
|
||||
- 测试reviewing状态且版本大于1的需求评审字段的estimate默认值第estimate条的default属性 @9
|
||||
- 测试active状态需求的评审表单字段的status默认值第status条的default属性 @closed
|
||||
- 测试评审表单字段的comment字段control属性第comment条的control属性 @editor
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/storyzen.unittest.class.php';
|
||||
|
||||
zenData('story')->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属性
|
||||
@@ -1,88 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 storyZen::processDataForEdit();
|
||||
timeout=0
|
||||
cid=18700
|
||||
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是4, $storyData, $oldStory 属性status @changing
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性plan @5
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性branch @0
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性stagedBy @admin
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性stagedBy @admin
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性stagedBy @admin
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性stagedBy @admin
|
||||
- 执行storyTest模块的processDataForEditTest方法,参数是1, $storyData, $oldStory 属性stagedBy @admin
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/storyzen.unittest.class.php';
|
||||
|
||||
$story = zenData('story');
|
||||
$story->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');
|
||||
@@ -1,93 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 storyZen::processFilterTitle();
|
||||
timeout=0
|
||||
cid=18701
|
||||
|
||||
- 步骤1:普通状态过滤(未关闭) @状态: 未关闭
|
||||
- 步骤2:按产品过滤 @状态: 测试产品A
|
||||
- 步骤3:按模块过滤 @模块 = 模块1
|
||||
- 步骤4:草稿状态过滤 @状态: 草稿
|
||||
- 步骤5:评审中状态过滤 @状态: 评审中
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/storyzen.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
$product = zenData('product');
|
||||
$product->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:评审中状态过滤
|
||||
@@ -1,98 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 storyZen::setFormOptionsForBatchEdit();
|
||||
timeout=0
|
||||
cid=18704
|
||||
|
||||
- 单产品批量编辑时branchProduct为0 @0
|
||||
- 单产品批量编辑时检查users属性admin @`A:管理员`
|
||||
- 单产品批量编辑时检查moduleList索引0 @/
|
||||
- 多产品批量编辑时branchProduct为1 @1
|
||||
- 多产品批量编辑时检查users属性为空 @0
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/storyzen.unittest.class.php';
|
||||
|
||||
$product = zenData('product');
|
||||
$product->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');
|
||||
@@ -1,76 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 taskZen::buildEffortForFinish();
|
||||
timeout=0
|
||||
cid=18903
|
||||
|
||||
- 执行taskTest模块的buildEffortForFinishTest方法,参数是$oldTask, $task1, '3.5', ''
|
||||
- 属性consumed @3.5
|
||||
- 属性left @0
|
||||
- 属性account @admin
|
||||
- 属性task @1
|
||||
- 执行taskTest模块的buildEffortForFinishTest方法,参数是$oldTask, $task2, '0', ''
|
||||
- 属性consumed @0
|
||||
- 属性left @0
|
||||
- 属性task @1
|
||||
- 执行taskTest模块的buildEffortForFinishTest方法,参数是$oldTask, $task3, '-1', '' @"总计消耗"必须大于之前消耗
|
||||
- 执行taskTest模块的buildEffortForFinishTest方法,参数是$oldTask, $task4, '5', '' 属性date @2024-01-15
|
||||
- 执行taskTest模块的buildEffortForFinishTest方法,参数是$oldTask, $task5, '1.5', ''
|
||||
- 属性work @Original work description
|
||||
- 属性consumed @1.5
|
||||
- 执行taskTest模块的buildEffortForFinishTest方法,参数是$oldTask, $task6, '2', 'New work comment'
|
||||
- 属性work @New work comment
|
||||
- 属性consumed @2
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/taskzen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$taskTest = new taskZenTest();
|
||||
|
||||
$oldTask = new stdclass();
|
||||
$oldTask->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');
|
||||
@@ -1,208 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=- 测试关联需求任务处理 >> 期望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%');
|
||||
@@ -1,101 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 taskZen::responseAfterRecord();
|
||||
timeout=0
|
||||
cid=18947
|
||||
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task1, $changes1, '', false 属性result @success
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task2, $changes2, '', false 属性result @success
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task3, $changes3, '', false 属性result @success
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task4, $changes4, '', false 属性result @success
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task5, $changes5, '', true 属性result @success
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task6, $changes5, '', true 属性result @success
|
||||
- 执行taskTest模块的responseAfterRecordTest方法,参数是$task7, $changes5, 'taskkanban', true 属性callback @refreshKanban()
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/taskzen.unittest.class.php';
|
||||
|
||||
$task = zenData('task');
|
||||
$task->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()');
|
||||
@@ -1,45 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::addEditAction();
|
||||
timeout=0
|
||||
cid=19057
|
||||
|
||||
- 测试步骤1:有变更时创建编辑动作属性actionCount @1
|
||||
- 测试步骤2:有变更和评论时创建编辑动作属性actionCount @1
|
||||
- 测试步骤3:只有评论无变更时创建评论动作属性actionCount @1
|
||||
- 测试步骤4:状态从normal变为wait时创建编辑和提交审核两个动作属性actionCount @2
|
||||
- 测试步骤5:状态从wait变为normal时只创建编辑动作属性actionCount @1
|
||||
- 测试步骤6:状态保持wait不变时只创建编辑动作属性actionCount @1
|
||||
- 测试步骤7:有多个变更字段时创建编辑动作属性actionCount @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
|
||||
|
||||
zendata('case')->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:有多个变更字段时创建编辑动作
|
||||
@@ -1,63 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::assignBranchForEdit();
|
||||
timeout=0
|
||||
cid=19059
|
||||
|
||||
- 执行testcaseTest模块的assignBranchForEditTest方法,参数是$case1, 1, 'execution' 属性1 @分支1
|
||||
- 执行testcaseTest模块的assignBranchForEditTest方法,参数是$case2, 0, 'project' 属性2 @分支2 (已关闭)
|
||||
- 执行testcaseTest模块的assignBranchForEditTest方法,参数是$case3, 1, 'execution' 属性10 @分支10 (已关闭)
|
||||
- 执行testcaseTest模块的assignBranchForEditTest方法,参数是$case4, 1, 'execution' 属性999 @0
|
||||
- 执行testcaseTest模块的assignBranchForEditTest方法,参数是$case5, 3, 'execution' @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
|
||||
|
||||
zendata('case')->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');
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::assignCreateSceneVars();
|
||||
timeout=0
|
||||
cid=19063
|
||||
|
||||
- 步骤1:正常产品ID,空分支,无模块属性executed @1
|
||||
- 步骤2:有分支的产品,指定分支属性executed @1
|
||||
- 步骤3:正常产品,指定模块ID属性executed @1
|
||||
- 步骤4:分支产品但分支为空属性executed @1
|
||||
- 步骤5:正常产品,指定大的模块ID属性executed @1
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
zendata('product')->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
|
||||
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::assignModuleOptionMenuForEdit();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 步骤1:普通产品用例(branch=0)属性1 @/模块A
|
||||
- 步骤2:分支产品用例(branch=1)属性4 @/模块D
|
||||
- 步骤3:分支产品用例(branch=2)属性7 @/模块G
|
||||
- 步骤4:产品1的第一个模块属性2 @/模块B
|
||||
- 步骤5:产品1的第二个模块属性3 @/模块C
|
||||
- 步骤6:产品2的模块属性6 @/模块F
|
||||
- 步骤7:产品2分支用例属性8 @/模块H
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcase.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备(根据需要配置)
|
||||
// 产品数据
|
||||
$productTable = zenData('product');
|
||||
$productTable->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分支用例
|
||||
@@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::buildBrowseSearchForm();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 步骤1:在testcase模块下构建搜索表单属性onMenuBar @yes
|
||||
- 步骤2:在非testcase模块下构建搜索表单属性onMenuBar @~~
|
||||
- 步骤3:使用有效productID构建搜索表单属性searchProductsCount @5
|
||||
- 步骤4:使用有效queryID构建搜索表单属性searchFieldsCount @20
|
||||
- 步骤5:使用有效projectID构建搜索表单属性searchFieldsCount @20
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcase.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
$product = zenData('product');
|
||||
$product->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构建搜索表单
|
||||
@@ -1,102 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::prepareReviewData();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是1, $oldCase1, $postData1
|
||||
- 属性status @normal
|
||||
- 属性result @pass
|
||||
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是2, $oldCase2, $postData2
|
||||
- 属性status @normal
|
||||
- 属性result @fail
|
||||
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是3, $oldCase3, $postData3 @0
|
||||
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是4, $oldCase4, $postData4
|
||||
- 属性status @normal
|
||||
- 属性reviewedBy @admin,user1,user2
|
||||
- 执行testcaseTest模块的prepareReviewDataTest方法,参数是5, $oldCase5, $postData5
|
||||
- 属性status @normal
|
||||
- 属性reviewedBy @admin
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$testcaseTest = new testcaseZenTest();
|
||||
|
||||
// 创建测试用例对象
|
||||
$oldCase1 = new stdClass();
|
||||
$oldCase1->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');
|
||||
@@ -1,149 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::processCaseForExport();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 测试产品字段格式化属性product @产品A(#1)
|
||||
- 测试模块字段格式化属性module @模块A(#1)
|
||||
- 测试需求字段格式化属性story @需求A(#1)
|
||||
- 测试带分支的用例导出数据格式化属性branch @分支A(#1)
|
||||
- 测试带场景的用例导出数据格式化属性scene @场景A(#1)
|
||||
- 测试日期格式化属性openedDate @2024-01-01
|
||||
|
||||
*/
|
||||
|
||||
// 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->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'); // 测试日期格式化
|
||||
@@ -1,171 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=- 测试导出单个用例,检查产品字段格式化属性product >> 产品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:测试导出多个用例,检查第二个用例的产品字段
|
||||
@@ -1,68 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::responseAfterBatchCreate();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 执行testcaseTest模块的responseAfterBatchCreateTest方法,参数是1, 0, $mockData1
|
||||
- 属性result @fail
|
||||
- 属性message @Database error occurred
|
||||
- 执行testcaseTest模块的responseAfterBatchCreateTest方法,参数是1, 0, $mockData2
|
||||
- 属性result @success
|
||||
- 属性closeModal @1
|
||||
- 属性load @1
|
||||
- 执行testcaseTest模块的responseAfterBatchCreateTest方法,参数是1, 0, $mockData3 属性result @success
|
||||
- 执行testcaseTest模块的responseAfterBatchCreateTest方法,参数是1, 0, $mockData4
|
||||
- 属性result @success
|
||||
- 属性load @/testcase-browse-productID=1&branch=0.html
|
||||
- 执行testcaseTest模块的responseAfterBatchCreateTest方法,参数是2, 1, $mockData5
|
||||
- 属性result @success
|
||||
- 属性load @/project-testcase-projectID=10&productID=2&branch=1.html
|
||||
- 执行testcaseTest模块的responseAfterBatchCreateTest方法,参数是3, 2, $mockData6
|
||||
- 属性result @success
|
||||
- 属性load @/execution-testcase-executionID=20&productID=3&branch=2.html
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcase.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$testcaseTest = new testcaseTest();
|
||||
|
||||
// 测试步骤1:测试存在 DAO 错误时的响应
|
||||
$mockData1 = array('daoError' => 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');
|
||||
@@ -1,67 +0,0 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 testcaseZen::responseAfterShowImport();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 执行testcaseZenTest模块的responseAfterShowImportTest方法,参数是1, '0', 0, '', '', $mockData1
|
||||
- 属性result @fail
|
||||
- 属性message @Database error occurred
|
||||
- 执行testcaseZenTest模块的responseAfterShowImportTest方法,参数是1, '0', 100, '/tmp/test.csv', '', $mockData2
|
||||
- 属性result @success
|
||||
- 属性load @/testcase-browse-productID=1.html
|
||||
- 执行testcaseZenTest模块的responseAfterShowImportTest方法,参数是2, '1', 100, '', '', $mockData3
|
||||
- 执行testcaseZenTest模块的responseAfterShowImportTest方法,参数是3, '0', 200, '', '', $mockData4
|
||||
- 属性result @success
|
||||
- 属性load @/testcase-showImport-productID=3&branch=0&pagerID=2&maxImport=200&insert=.html
|
||||
- 执行testcaseZenTest模块的responseAfterShowImportTest方法,参数是4, '2', 50, '', 'Import completed', $mockData5
|
||||
- 属性result @success
|
||||
- 属性message @/Import completed
|
||||
- 执行testcaseZenTest模块的responseAfterShowImportTest方法,参数是5, '', 100, '', '', $mockData6
|
||||
- 属性result @success
|
||||
- 属性load @/testcase-browse-productID=5.html
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/testcase.unittest.class.php';
|
||||
|
||||
su('admin');
|
||||
|
||||
$testcaseTest = new testcaseTest();
|
||||
|
||||
// 测试步骤1:测试存在 DAO 错误时的响应
|
||||
$mockData1 = array('daoError' => 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');
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user