+ [misc] Add unit tests for testcaseZen::buildUpdateCaseForShowImport() method

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-11-12 17:45:43 +08:00
co-authored by Claude
parent 46c8107d4b
commit 22415fc664
2 changed files with 208 additions and 0 deletions
@@ -3009,4 +3009,92 @@ class testcaseZenTest
}
}
/**
* Test buildLinkCasesSearchForm method.
*
* @param object $case
* @param int $queryID
* @param string $tab
* @access public
* @return array
*/
public function buildLinkCasesSearchFormTest(object $case, int $queryID, string $tab = 'qa'): array
{
global $tester;
// 保存原始配置和tab
$originalConfig = $tester->config->testcase->search['fields'] ?? array();
$originalTab = $tester->app->tab ?? '';
// 确保搜索字段配置存在
if (!isset($tester->config->testcase->search['fields'])) {
$tester->config->testcase->search['fields'] = array();
}
// 记录删除前的字段数量
$fieldsCountBefore = count($tester->config->testcase->search['fields']);
try {
// 设置app的tab属性
$tester->app->tab = $tab;
// 构建actionURL
$actionURL = "/testcase-linkCases-{$case->id}-bySearch-myQueryID.html";
// 设置objectID
$objectID = 0;
if($tester->app->tab == 'project') $objectID = $case->project ?? 0;
if($tester->app->tab == 'execution') $objectID = $case->execution ?? 0;
// 删除product字段
$productFieldRemoved = 0;
if(isset($tester->config->testcase->search['fields']['product'])) {
unset($tester->config->testcase->search['fields']['product']);
$productFieldRemoved = 1;
}
// 准备返回结果
$fieldsCountAfter = count($tester->config->testcase->search['fields']);
$result = array(
'actionURL' => $actionURL,
'objectID' => $objectID,
'productFieldRemoved' => $productFieldRemoved,
'tab' => $tester->app->tab,
'productID' => $case->product ?? 0,
'fieldsCountBefore' => $fieldsCountBefore,
'fieldsCountAfter' => $fieldsCountAfter,
'hasProductField' => isset($tester->config->testcase->search['fields']['product']) ? 1 : 0
);
return $result;
}
finally {
// 恢复原始配置和tab
$tester->config->testcase->search['fields'] = $originalConfig;
$tester->app->tab = $originalTab;
}
}
/**
* Test buildUpdateCaseForShowImport method.
*
* @param object $case
* @param object $oldCase
* @param array $oldStep
* @param bool $forceNotReview
* @access public
* @return array
*/
public function buildUpdateCaseForShowImportTest(object $case, object $oldCase, array $oldStep, bool $forceNotReview = false): array
{
$result = callZenMethod('testcase', 'buildUpdateCaseForShowImport', [$case, $oldCase, $oldStep, $forceNotReview]);
return array(
'result' => $result ? 1 : 0,
'version' => $case->version,
'stepChanged' => $case->stepChanged ? 1 : 0,
'status' => $case->status ?? ''
);
}
}
+120
View File
@@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
title=测试 testcaseZen::buildUpdateCaseForShowImport();
timeout=0
cid=0
- 步骤1:步骤数量变化,步骤变更,版本号+1
- 属性result @1
- 属性version @2
- 步骤2:步骤内容相同,无变更,版本号不变
- 属性result @0
- 属性version @1
- 步骤3:步骤描述变化,步骤变更,版本号+1
- 属性result @1
- 属性version @2
- 步骤4:步骤期望变化,步骤变更,版本号+1
- 属性result @1
- 属性version @2
- 步骤5:步骤类型变化,步骤变更,版本号+1
- 属性result @1
- 属性version @2
- 步骤6:步骤变更且forceNotReview=false,状态设为wait
- 属性result @1
- 属性status @wait
- 步骤7:步骤变更且forceNotReview=true,状态不变
- 属性result @1
- 属性status @~~
*/
// 1. 导入依赖(路径固定,不可修改)
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/testcasezen.unittest.class.php';
// 2. 用户登录(选择合适角色)
su('admin');
// 3. 创建测试实例(变量名与模块名一致)
$testcaseTest = new testcaseZenTest();
// 4. 准备测试数据
// 创建旧步骤数组 - 2个步骤
function createOldStep() {
$oldStep = array();
$step1 = new stdClass();
$step1->desc = '步骤1描述';
$step1->expect = '步骤1期望';
$step1->type = 'step';
$oldStep[] = $step1;
$step2 = new stdClass();
$step2->desc = '步骤2描述';
$step2->expect = '步骤2期望';
$step2->type = 'step';
$oldStep[] = $step2;
return $oldStep;
}
// 创建旧用例对象
function createOldCase() {
$oldCase = new stdClass();
$oldCase->version = 1;
return $oldCase;
}
// 5. 强制要求:必须包含至少5个测试步骤
// 步骤1:步骤数量变化(3个步骤 vs 2个步骤),步骤变更,版本号+1
$case1 = new stdClass();
$case1->desc = array('步骤1描述', '步骤2描述', '步骤3描述');
$case1->expect = array('步骤1期望', '步骤2期望', '步骤3期望');
$case1->stepType = array('step', 'step', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case1, createOldCase(), createOldStep(), false)) && p('result,version') && e('1,2'); // 步骤1:步骤数量变化,步骤变更,版本号+1
// 步骤2:步骤内容相同,无变更,版本号不变
$case2 = new stdClass();
$case2->desc = array('步骤1描述', '步骤2描述');
$case2->expect = array('步骤1期望', '步骤2期望');
$case2->stepType = array('step', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case2, createOldCase(), createOldStep(), false)) && p('result,version') && e('0,1'); // 步骤2:步骤内容相同,无变更,版本号不变
// 步骤3:步骤描述变化,步骤变更,版本号+1
$case3 = new stdClass();
$case3->desc = array('修改后步骤1描述', '步骤2描述');
$case3->expect = array('步骤1期望', '步骤2期望');
$case3->stepType = array('step', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case3, createOldCase(), createOldStep(), false)) && p('result,version') && e('1,2'); // 步骤3:步骤描述变化,步骤变更,版本号+1
// 步骤4:步骤期望变化,步骤变更,版本号+1
$case4 = new stdClass();
$case4->desc = array('步骤1描述', '步骤2描述');
$case4->expect = array('修改后步骤1期望', '步骤2期望');
$case4->stepType = array('step', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case4, createOldCase(), createOldStep(), false)) && p('result,version') && e('1,2'); // 步骤4:步骤期望变化,步骤变更,版本号+1
// 步骤5:步骤类型变化,步骤变更,版本号+1
$case5 = new stdClass();
$case5->desc = array('步骤1描述', '步骤2描述');
$case5->expect = array('步骤1期望', '步骤2期望');
$case5->stepType = array('group', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case5, createOldCase(), createOldStep(), false)) && p('result,version') && e('1,2'); // 步骤5:步骤类型变化,步骤变更,版本号+1
// 步骤6:步骤变更且forceNotReview=false,状态设为wait
$case6 = new stdClass();
$case6->desc = array('修改后步骤1描述', '步骤2描述');
$case6->expect = array('步骤1期望', '步骤2期望');
$case6->stepType = array('step', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case6, createOldCase(), createOldStep(), false)) && p('result,status') && e('1,wait'); // 步骤6:步骤变更且forceNotReview=false,状态设为wait
// 步骤7:步骤变更且forceNotReview=true,状态不变
$case7 = new stdClass();
$case7->desc = array('修改后步骤1描述', '步骤2描述');
$case7->expect = array('步骤1期望', '步骤2期望');
$case7->stepType = array('step', 'step');
r($testcaseTest->buildUpdateCaseForShowImportTest($case7, createOldCase(), createOldStep(), true)) && p('result,status') && e('1,~~'); // 步骤7:步骤变更且forceNotReview=true,状态不变