* [misc] Enhance unit tests for convertTao::processJiraIssueContent() method

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-09-25 09:16:55 +08:00
co-authored by Claude
parent 62db7f0ba0
commit ada33b23b0
@@ -7,7 +7,7 @@ title=测试 convertTao::processJiraIssueContent();
timeout=0
cid=0
- 期望正常处理空数组并返回true @1
- 执行convertTest模块的processJiraIssueContentTest方法,参数是array @1
*/
@@ -16,46 +16,46 @@ include dirname(__FILE__, 2) . '/lib/convert.unittest.class.php';
// 准备测试文件数据 - 涵盖各种对象类型和文件类型
$fileTable = zenData('file');
$fileTable->id->range('1-20');
$fileTable->id->range('1-30');
$fileTable->title->range('screenshot.png,document.pdf,attachment.txt,design.jpg,readme.md,video.mp4,archive.zip,spreadsheet.xlsx,presentation.pptx,database.sql');
$fileTable->extension->range('png,pdf,txt,jpg,md,mp4,zip,xlsx,pptx,sql');
$fileTable->objectType->range('story{6},bug{6},task{4},feedback{2},epic{1},requirement{1}');
$fileTable->objectID->range('1-3');
$fileTable->gen(20);
$fileTable->objectType->range('story{8},bug{8},task{6},feedback{3},ticket{3},customflow{2}');
$fileTable->objectID->range('1-4');
$fileTable->gen(30);
// 准备story测试数据 - 包含各种Jira内容格式
$storyTable = zenData('story');
$storyTable->id->range('1-6');
$storyTable->title->range('Story with Jira content,Empty story,Story without files,Complex story,Epic story,Requirement story');
$storyTable->gen(6);
$storyTable->id->range('1-8');
$storyTable->title->range('Story with Jira content,Empty story,Story without files,Complex story,Epic story,Requirement story,Multiple attachments story,Single attachment story');
$storyTable->gen(8);
$storySpecTable = zenData('storyspec');
$storySpecTable->story->range('1-6');
$storySpecTable->story->range('1-8');
$storySpecTable->version->range('1');
$storySpecTable->title->range('Spec1,Spec2,Spec3,Spec4,Spec5,Spec6');
$storySpecTable->spec->range('Story with !screenshot.png|thumbnail! and !document.pdf|attachment! files,,,Story with !design.jpg|image! design,Epic with !video.mp4|media! demo,Requirement with !readme.md|doc! specification');
$storySpecTable->gen(6);
$storySpecTable->title->range('Spec1,Spec2,Spec3,Spec4,Spec5,Spec6,Spec7,Spec8');
$storySpecTable->spec->range('Story with !screenshot.png|thumbnail! and !document.pdf|attachment! files,,,Story with !design.jpg|image! design,Epic with !video.mp4|media! demo,Requirement with !readme.md|doc! specification,Complex story with !archive.zip|file! !presentation.pptx|file! !database.sql|file! attachments,Single story with !attachment.txt|file! only');
$storySpecTable->gen(8);
// 准备bug测试数据 - 包含Jira格式的步骤描述
$bugTable = zenData('bug');
$bugTable->id->range('1-6');
$bugTable->title->range('Bug with screenshot,Empty bug,Simple bug,Complex bug,Critical bug,Fixed bug');
$bugTable->steps->range('Reproduce with !screenshot.png|image! evidence,,,Bug with !attachment.txt|file! log file,Critical issue with !database.sql|file! backup,Fixed with !presentation.pptx|file! analysis');
$bugTable->gen(6);
$bugTable->id->range('1-8');
$bugTable->title->range('Bug with screenshot,Empty bug,Simple bug,Complex bug,Critical bug,Fixed bug,Multi-attachment bug,Media bug');
$bugTable->steps->range('Reproduce with !screenshot.png|image! evidence,,,Bug with !attachment.txt|file! log file,Critical issue with !database.sql|file! backup,Fixed with !presentation.pptx|file! analysis,Multiple attachments: !screenshot.png|image! !document.pdf|file! !design.jpg|image!,Video bug with !video.mp4|media! reproduction');
$bugTable->gen(8);
// 准备task测试数据 - 包含Jira格式的任务描述
$taskTable = zenData('task');
$taskTable->id->range('1-4');
$taskTable->name->range('Development task,Empty task,Documentation task,Review task');
$taskTable->desc->range('Task with !archive.zip|file! resources,,,Documentation with !readme.md|doc! guide,Review with !spreadsheet.xlsx|file! data');
$taskTable->gen(4);
$taskTable->id->range('1-6');
$taskTable->name->range('Development task,Empty task,Documentation task,Review task,Complex task,Media task');
$taskTable->desc->range('Task with !archive.zip|file! resources,,,Documentation with !readme.md|doc! guide,Review with !spreadsheet.xlsx|file! data,Complex task with !screenshot.png|image! !document.pdf|file! attachments,Media task with !video.mp4|media! demo');
$taskTable->gen(6);
// 准备feedback测试数据 - 包含Jira格式的反馈描述
$feedbackTable = zenData('feedback');
$feedbackTable->id->range('1-2');
$feedbackTable->title->range('User feedback,Bug report');
$feedbackTable->desc->range('Feedback with !screenshot.png|image! screenshot,Report with !document.pdf|attachment! details');
$feedbackTable->gen(2);
$feedbackTable->id->range('1-3');
$feedbackTable->title->range('User feedback,Bug report,Feature request');
$feedbackTable->desc->range('Feedback with !screenshot.png|image! screenshot,Report with !document.pdf|attachment! details,Feature request with !design.jpg|image! mockup');
$feedbackTable->gen(3);
// 准备testcase测试数据 - 验证跳过逻辑
$testcaseTable = zenData('case');
@@ -64,46 +64,74 @@ $testcaseTable->title->range('Test case 1,Test case 2');
$testcaseTable->precondition->range('Prerequisites,Setup with attachments');
$testcaseTable->gen(2);
// 跳过ticket测试数据生成,因为日期字段格式问题
// 准备action测试数据 - 包含Jira格式的评论
$actionTable = zenData('action');
$actionTable->id->range('1-10');
$actionTable->objectType->range('story{3},bug{3},task{2},feedback{2}');
$actionTable->objectID->range('1-4');
$actionTable->action->range('commented,updated');
$actionTable->comment->range('Comment with !screenshot.png|image! reference,Updated with !document.pdf|file! attachment,Review comment with !design.jpg|image! feedback,,Action with !video.mp4|media! demonstration,Bug comment with !attachment.txt|file! log,,Feedback with !spreadsheet.xlsx|file! analysis,,Task comment with !archive.zip|file! resource');
$actionTable->gen(10);
// 准备自定义流程对象测试数据 - 手动创建表和数据
global $tester;
$tester->dao->exec("DROP TABLE IF EXISTS `zt_flow_customflow`");
$tester->dao->exec("CREATE TABLE IF NOT EXISTS `zt_flow_customflow` (`id` int(11) NOT NULL AUTO_INCREMENT, `customflowdesc` text, PRIMARY KEY (`id`))");
$tester->dao->exec("INSERT INTO `zt_flow_customflow` (`id`, `customflowdesc`) VALUES (1, 'Custom flow with !screenshot.png|image! attachment'), (2, 'Custom flow with !document.pdf|file! reference')");
su('admin');
$convertTest = new convertTest();
// 测试步骤1:处理包含Jira格式内容的story对象
// 测试步骤1:处理包含Jira附件引用的story对象内容转换
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'astory', 'BID' => 1)
))) && p() && e('1'); // 期望成功转换story中的Jira文件引用并返回true
))) && p() && e('1');
// 测试步骤2:处理包含Jira格式内容的bug对象
// 测试步骤2:处理包含Jira附件引用的bug对象步骤描述转换
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'abug', 'BID' => 1)
))) && p() && e('1'); // 期望成功转换bug步骤中的Jira文件引用并返回true
))) && p() && e('1');
// 测试步骤3:处理包含Jira格式内容的task对象
// 测试步骤3:处理包含Jira附件引用的task对象描述转换
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'atask', 'BID' => 1)
))) && p() && e('1'); // 期望成功转换task描述中的Jira文件引用并返回true
))) && p() && e('1');
// 测试步骤4:处理包含Jira格式内容的feedback对象
// 测试步骤4:处理包含Jira附件引用的feedback对象描述转换
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'afeedback', 'BID' => 1)
))) && p() && e('1'); // 期望成功转换feedback描述中的Jira文件引用并返回true
))) && p() && e('1');
// 测试步骤5:处理testcase类型对象的跳过逻辑
// 测试步骤5:处理多个不同类型对象的复合测试
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'astory', 'BID' => 7),
(object)array('BType' => 'abug', 'BID' => 7)
))) && p() && e('1');
// 测试步骤6:处理包含Jira附件引用的action评论内容转换
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'astory', 'BID' => 1),
(object)array('BType' => 'abug', 'BID' => 2)
))) && p() && e('1');
// 测试步骤7:处理自定义流程对象的Jira内容转换
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'acustomflow', 'BID' => 1)
))) && p() && e('1');
// 测试步骤8:验证testcase类型对象的跳过处理逻辑
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'atestcase', 'BID' => 1)
))) && p() && e('1'); // 期望跳过testcase类型处理并返回true
))) && p() && e('1');
// 测试步骤6:处理空输入数组的边界情况
r($convertTest->processJiraIssueContentTest(array())) && p() && e('1'); // 期望正常处理空数组并返回true
// 测试步骤9:处理空输入数组的边界情况
r($convertTest->processJiraIssueContentTest(array())) && p() && e('1');
// 测试步骤7:处理无效BType参数的异常情况
// 测试步骤10:处理无关联文件的对象的异常情况
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'ainvalid', 'BID' => 1),
(object)array('BType' => '', 'BID' => 1)
))) && p() && e('1'); // 期望正常处理无效的对象类型并返回true
// 测试步骤8:处理不存在对象ID的异常情况
r($convertTest->processJiraIssueContentTest(array(
(object)array('BType' => 'astory', 'BID' => 999),
(object)array('BType' => 'abug', 'BID' => 888)
))) && p() && e('1'); // 期望正常处理不存在的对象ID并返回true
(object)array('BType' => 'astory', 'BID' => 2),
(object)array('BType' => 'abug', 'BID' => 3)
))) && p() && e('1');