diff --git a/module/zai/test/lib/zai.unittest.class.php b/module/zai/test/lib/zai.unittest.class.php index 9ddbc2b618..2dcec56125 100644 --- a/module/zai/test/lib/zai.unittest.class.php +++ b/module/zai/test/lib/zai.unittest.class.php @@ -534,6 +534,45 @@ class zaiTest return zaiModel::extractFieldValue($objectType, $field, $target); } + /** + * Test convertCaseToMarkdown static method. + * + * @param object $case + * @param array|null $langData + * @access public + * @return array + */ + public function convertCaseToMarkdownTest($case, ?array $langData = null): array + { + return zaiModel::convertCaseToMarkdown($case, $langData); + } + + /** + * Test convertIssueToMarkdown static method. + * + * @param object $issue + * @param array|null $langData + * @access public + * @return array + */ + public function convertIssueToMarkdownTest($issue, ?array $langData = null): array + { + return zaiModel::convertIssueToMarkdown($issue, $langData); + } + + /** + * Test convertRiskToMarkdown static method. + * + * @param object $risk + * @param array|null $langData + * @access public + * @return array + */ + public function convertRiskToMarkdownTest($risk, ?array $langData = null): array + { + return zaiModel::convertRiskToMarkdown($risk, $langData); + } + /** * Test searchKnowledgesInCollections method. * diff --git a/module/zai/test/model/convertcasetomarkdown.php b/module/zai/test/model/convertcasetomarkdown.php new file mode 100644 index 0000000000..1b23db2283 --- /dev/null +++ b/module/zai/test/model/convertcasetomarkdown.php @@ -0,0 +1,85 @@ +#!/usr/bin/env php + '用例', + 'sections' => array( + 'basic' => '基本信息', + 'precondition' => '前置条件', + 'steps' => '执行步骤' + ), + 'fields' => array( + 'status' => '状态', + 'pri' => '优先级', + 'module' => '模块', + 'story' => '关联需求', + 'assignedTo' => '指派人', + 'expect' => '期望', + 'execution' => '执行', + 'type' => '类型' + ) +); + +$case = new stdClass(); +$case->id = 10; +$case->title = '登录校验'; +$case->status = 'normal'; +$case->pri = '2'; +$case->module = 'login'; +$case->story = 'story1'; +$case->assignedTo = 'tester'; +$case->execution = 'exec1'; +$case->type = 'functional'; +$case->precondition = '用户已注册'; +$case->steps = array( + array('desc' => '打开登录页', 'expect' => '页面展示'), + array('desc' => '输入错误密码', 'expect' => '提示错误') +); + +$result = $zai->convertCaseToMarkdownTest($case, $langData); + +/* 生成标题包含编号 */ +$titleMatch = isset($result['title']) && $result['title'] === '用例 #10 登录校验' ? '1' : '0'; +r($titleMatch) && p() && e('1'); // 生成标题包含编号 + +/* Markdown 包含基本信息章节 */ +$hasBasicSection = strpos($result['content'], '## 基本信息') !== false ? '1' : '0'; +r($hasBasicSection) && p() && e('1'); // Markdown 包含基本信息章节 + +/* 字段列表包含状态项 */ +$hasStatusLine = strpos($result['content'], '* 状态: normal') !== false ? '1' : '0'; +r($hasStatusLine) && p() && e('1'); // 字段列表包含状态项 + +/* 属性包含状态字段 */ +$statusAttr = isset($result['attrs']['status']) ? $result['attrs']['status'] : ''; +r($statusAttr) && p() && e('normal'); // 属性包含状态字段 + +/* 追加前置条件章节 */ +$hasPrecondition = strpos($result['content'], '## 前置条件') !== false ? '1' : '0'; +r($hasPrecondition) && p() && e('1'); // 追加前置条件章节 + +/* 追加执行步骤章节 */ +$hasStepSection = strpos($result['content'], '## 执行步骤') !== false ? '1' : '0'; +r($hasStepSection) && p() && e('1'); // 追加执行步骤章节 diff --git a/module/zai/test/model/convertissuetomarkdown.php b/module/zai/test/model/convertissuetomarkdown.php new file mode 100644 index 0000000000..3e21993bef --- /dev/null +++ b/module/zai/test/model/convertissuetomarkdown.php @@ -0,0 +1,87 @@ +#!/usr/bin/env php + '问题', + 'sections' => array( + 'basic' => '基本信息', + 'desc' => '详情', + 'solution' => '解决方案' + ), + 'fields' => array( + 'status' => '状态', + 'pri' => '优先级', + 'severity' => '严重程度', + 'project' => '项目', + 'execution' => '执行', + 'assignedTo' => '指派人', + 'issueType' => '类型' + ) +); + +$issue = new stdClass(); +$issue->id = 21; +$issue->title = '接口异常'; +$issue->status = 'active'; +$issue->pri = 'high'; +$issue->severity = 'critical'; +$issue->project = 'proj1'; +$issue->execution = 'exec1'; +$issue->assignedTo = 'dev'; +$issue->issueType = 'bug'; +$issue->desc = '
接口请求失败
'; +$issue->resolutionComment = '回滚版本
'; + +$result = $zai->convertIssueToMarkdownTest($issue, $langData); + +/* 生成标题包含问题编号 */ +$titleMatch = isset($result['title']) && $result['title'] === '问题 #21 接口异常' ? '1' : '0'; +r($titleMatch) && p() && e('1'); // 生成标题包含问题编号 + +/* Markdown 包含 basic 章节 */ +$hasBasicSection = strpos($result['content'], '## 基本信息') !== false ? '1' : '0'; +r($hasBasicSection) && p() && e('1'); // Markdown 包含 basic 章节 + +/* Markdown 字段包含状态信息 */ +$hasStatusLine = strpos($result['content'], '* 状态: active') !== false ? '1' : '0'; +r($hasStatusLine) && p() && e('1'); // Markdown 字段包含状态信息 + +/* 追加描述章节内容 */ +$hasDescSection = (strpos($result['content'], '## 详情') !== false && strpos($result['content'], '接口请求失败') !== false) ? '1' : '0'; +r($hasDescSection) && p() && e('1'); // 追加描述章节内容 + +/* 追加解决方案章节内容 */ +$hasSolutionSection = (strpos($result['content'], '## 解决方案') !== false && strpos($result['content'], '回滚版本') !== false) ? '1' : '0'; +r($hasSolutionSection) && p() && e('1'); // 追加解决方案章节内容 + +/* 属性包含 issueType 字段 */ +$issueType = isset($result['attrs']['issueType']) ? $result['attrs']['issueType'] : ''; +$issueTypeMatch = $issueType === 'bug' ? '1' : '0'; +r($issueTypeMatch) && p() && e('1'); // 属性包含 issueType 字段 + +/* 属性包含状态字段 */ +$statusAttr = isset($result['attrs']['status']) ? $result['attrs']['status'] : ''; +$statusMatch = $statusAttr === 'active' ? '1' : '0'; +r($statusMatch) && p() && e('1'); // 属性包含状态字段 diff --git a/module/zai/test/model/convertrisktomarkdown.php b/module/zai/test/model/convertrisktomarkdown.php new file mode 100644 index 0000000000..845cf63b97 --- /dev/null +++ b/module/zai/test/model/convertrisktomarkdown.php @@ -0,0 +1,85 @@ +#!/usr/bin/env php + '风险', + 'sections' => array( + 'basic' => '基本信息', + 'desc' => '风险描述', + 'prevention' => '预防措施', + 'remedy' => '补救措施' + ), + 'fields' => array( + 'status' => '状态', + 'probability' => '概率', + 'impact' => '影响', + 'assignedTo' => '负责人', + 'strategy' => '策略' + ) +); + +$risk = new stdClass(); +$risk->id = 8; +$risk->name = '数据泄露'; +$risk->status = 'open'; +$risk->probability = 'high'; +$risk->impact = 'major'; +$risk->strategy = 'mitigate'; +$risk->assignedTo = 'security'; +$risk->desc = '存在泄露风险
'; +$risk->prevention = '加强审计
'; +$risk->remedy = '应急响应
'; + +$result = $zai->convertRiskToMarkdownTest($risk, $langData); + +/* 生成标题包含风险编号 */ +$titleMatch = isset($result['title']) && $result['title'] === '风险 #8 数据泄露' ? '1' : '0'; +r($titleMatch) && p() && e('1'); // 生成标题包含风险编号 + +/* Markdown 包含基本信息章节 */ +$hasBasicSection = strpos($result['content'], '## 基本信息') !== false ? '1' : '0'; +r($hasBasicSection) && p() && e('1'); // Markdown 包含基本信息章节 + +/* 字段列表包含概率项 */ +$hasProbabilityLine = strpos($result['content'], '* 概率: high') !== false ? '1' : '0'; +r($hasProbabilityLine) && p() && e('1'); // 字段列表包含概率项 + +/* 追加预防措施章节 */ +$hasPrevention = (strpos($result['content'], '## 预防措施') !== false && strpos($result['content'], '加强审计') !== false) ? '1' : '0'; +r($hasPrevention) && p() && e('1'); // 追加预防措施章节 + +/* 追加补救措施章节 */ +$hasRemedy = (strpos($result['content'], '## 补救措施') !== false && strpos($result['content'], '应急响应') !== false) ? '1' : '0'; +r($hasRemedy) && p() && e('1'); // 追加补救措施章节 + +/* 属性包含概率字段 */ +$probabilityAttr = isset($result['attrs']['probability']) ? $result['attrs']['probability'] : ''; +$probabilityMatch = $probabilityAttr === 'high' ? '1' : '0'; +r($probabilityMatch) && p() && e('1'); // 属性包含概率字段 + +/* 属性包含状态字段 */ +$statusAttr = isset($result['attrs']['status']) ? $result['attrs']['status'] : ''; +$statusMatch = $statusAttr === 'open' ? '1' : '0'; +r($statusMatch) && p() && e('1'); // 属性包含状态字段