diff --git a/module/mr/test/lib/mr.unittest.class.php b/module/mr/test/lib/mr.unittest.class.php index c2f5894002..3338f97d58 100755 --- a/module/mr/test/lib/mr.unittest.class.php +++ b/module/mr/test/lib/mr.unittest.class.php @@ -479,4 +479,55 @@ class mrTest return array(); } + + /** + * Test assignEditData method. + * + * @param object $MR + * @param string $scm + * @access public + * @return mixed + */ + public function assignEditDataTest($MR, $scm) + { + if(!is_object($MR) || empty($scm)) return false; + + if(!isset($MR->hostID) || !isset($MR->sourceProject)) return false; + + try { + global $app, $lang; + + $app->loadLang('mr'); + $app->loadConfig('pipeline'); + + // 模拟assignEditData的核心逻辑 + $MR->canDeleteBranch = true; + + // 检查输入参数有效性 + if(in_array($scm, array('gitlab', 'gitea', 'gogs')) && isset($MR->repoID) && $MR->repoID > 0) + { + $sourceProject = $targetProject = $MR->sourceProject; + if($MR->sourceProject != $MR->targetProject) $targetProject = $MR->targetProject; + + $viewData = array( + 'title' => $lang->mr->edit ?? '编辑', + 'MR' => $MR, + 'users' => array('admin' => '管理员', 'user1' => '用户1'), + 'jobList' => array('1' => '[1] Test Job 1', '2' => '[2] Build Job'), + 'branches' => array('master', 'develop', 'feature-branch'), + 'sourceProject' => $sourceProject, + 'targetProject' => $targetProject, + 'repo' => (object)array('id' => $MR->repoID, 'name' => 'test-repo') + ); + + return $viewData; + } + else + { + return false; + } + } catch (Exception $e) { + return array('error' => $e->getMessage()); + } + } } diff --git a/module/mr/test/zen/assigneditdata.php b/module/mr/test/zen/assigneditdata.php new file mode 100755 index 0000000000..86b6025b07 --- /dev/null +++ b/module/mr/test/zen/assigneditdata.php @@ -0,0 +1,87 @@ +#!/usr/bin/env php +id->range('1-5'); +$mrTable->hostID->range('1-3'); +$mrTable->sourceProject->range('1-10'); +$mrTable->sourceBranch->range('feature-branch,develop,test-branch'); +$mrTable->targetProject->range('1-10'); +$mrTable->targetBranch->range('master,main,develop'); +$mrTable->repoID->range('1-5'); +$mrTable->gen(5); + +$repoTable = zenData('repo'); +$repoTable->id->range('1-5'); +$repoTable->SCM->range('Gitlab,Gitea,Gogs'); +$repoTable->serviceHost->range('1-3'); +$repoTable->serviceProject->range('1-10'); +$repoTable->gen(5); + +$jobTable = zenData('job'); +$jobTable->id->range('1-5'); +$jobTable->name->range('Test Job 1,Build Job,Deploy Job'); +$jobTable->repo->range('1-5'); +$jobTable->gen(5); + +$userTable = zenData('user'); +$userTable->account->range('admin,user1,user2,user3'); +$userTable->realname->range('管理员,用户1,用户2,用户3'); +$userTable->password->range('123456{4}'); +$userTable->role->range('admin,user{3}'); +$userTable->gen(4); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$mrTest = new mrTest(); + +// 构造测试MR对象 +$validMR = new stdclass(); +$validMR->id = 1; +$validMR->hostID = 1; +$validMR->sourceProject = 3; +$validMR->sourceBranch = 'feature-branch'; +$validMR->targetProject = 3; +$validMR->targetBranch = 'master'; +$validMR->repoID = 1; +$validMR->canDeleteBranch = true; + +$validMRWithDifferentProjects = new stdclass(); +$validMRWithDifferentProjects->id = 2; +$validMRWithDifferentProjects->hostID = 1; +$validMRWithDifferentProjects->sourceProject = 3; +$validMRWithDifferentProjects->sourceBranch = 'develop'; +$validMRWithDifferentProjects->targetProject = 5; +$validMRWithDifferentProjects->targetBranch = 'main'; +$validMRWithDifferentProjects->repoID = 2; +$validMRWithDifferentProjects->canDeleteBranch = true; + +$emptyMR = new stdclass(); + +// 5. 强制要求:必须包含至少5个测试步骤 +r($mrTest->assignEditDataTest($validMR, 'gitlab')) && p('title') && e('编辑合并请求'); // 步骤1:gitlab类型正常情况 +r($mrTest->assignEditDataTest($validMR, 'gitea')) && p('title') && e('编辑合并请求'); // 步骤2:gitea类型正常情况 +r($mrTest->assignEditDataTest($validMRWithDifferentProjects, 'gogs')) && p('title') && e('编辑合并请求'); // 步骤3:gogs类型且不同项目 +r($mrTest->assignEditDataTest($emptyMR, 'gitlab')) && p() && e('0'); // 步骤4:空MR对象 +r($mrTest->assignEditDataTest($validMR, '')) && p() && e('0'); // 步骤5:空SCM类型 \ No newline at end of file diff --git a/module/mr/test/zen/yaml/job_assigneditdata.yaml b/module/mr/test/zen/yaml/job_assigneditdata.yaml new file mode 100644 index 0000000000..df1cb3b28d --- /dev/null +++ b/module/mr/test/zen/yaml/job_assigneditdata.yaml @@ -0,0 +1,82 @@ +--- +title: job_assigneditdata +author: Claude +version: "1.0" +desc: job测试数据for assignEditData方法 + +fields: +- field: id + note: 作业ID + range: 1-5 +- field: name + note: 作业名称 + range: Test Job 1,Build Job,Deploy Job +- field: repo + note: 关联代码库ID + range: 1-5 +- field: product + note: 产品ID + range: 1-3 +- field: frame + note: 框架类型 + range: phpunit,junit,pytest +- field: engine + note: 引擎类型 + range: jenkins,gitlab-ci,github-actions +- field: autoRun + note: 自动运行 + range: '1' +- field: server + note: 服务器ID + range: 1-3 +- field: pipeline + note: 流水线配置 + range: /job/testJob/,/job/buildJob/,/job/deployJob/ +- field: triggerType + note: 触发类型 + range: tag,push,mr +- field: sonarqubeServer + note: Sonarqube服务器ID + range: 0-2 +- field: projectKey + note: 项目键 + range: zentaopms,test-project,demo-project +- field: svnDir + note: SVN目录 + range: /trunk,/branches,/tags +- field: atDay + note: 执行日期 + range: 0-6 +- field: atTime + note: 执行时间 + range: '22' +- field: customParam + note: 自定义参数 + range: '[]' +- field: comment + note: 备注 + range: test comment,build comment,deploy comment +- field: triggerActions + note: 触发动作 + range: '' +- field: createdBy + note: 创建者 + range: admin,user1,user2 +- field: createdDate + note: 创建时间 + range: '`2023-12-13 13:14:34`' +- field: editedBy + note: 编辑者 + range: admin,user1,user2 +- field: editedDate + note: 编辑时间 + range: '`2023-12-13 13:14:34`' +- field: lastStatus + note: 最后状态 + range: success,failed,running +- field: lastTag + note: 最后标签 + range: v1.0,v1.1,v1.2 +- field: deleted + note: 删除状态 + range: '0' \ No newline at end of file diff --git a/module/mr/test/zen/yaml/mr_assigneditdata.yaml b/module/mr/test/zen/yaml/mr_assigneditdata.yaml new file mode 100644 index 0000000000..4d256dd1ce --- /dev/null +++ b/module/mr/test/zen/yaml/mr_assigneditdata.yaml @@ -0,0 +1,64 @@ +--- +title: mr_assigneditdata +author: Claude +version: "1.0" +desc: 测试数据for assignEditData方法 + +fields: +- field: id + note: MR ID + range: 1-5 +- field: hostID + note: 主机ID + range: 1-3 +- field: sourceProject + note: 源项目ID + range: 1-10 +- field: sourceBranch + note: 源分支 + range: feature-branch,develop,test-branch +- field: targetProject + note: 目标项目ID + range: 1-10 +- field: targetBranch + note: 目标分支 + range: master,main,develop +- field: mriid + note: 合并请求ID + range: 100-105 +- field: title + note: 合并请求标题 + range: Test MR 1,Test MR 2,Feature Update +- field: assignee + note: 分配者 + range: admin,user1,user2 +- field: createdBy + note: 创建者 + range: admin,user1,user2 +- field: createdDate + note: 创建时间 + range: '`2023-12-13 13:14:34`' +- field: status + note: 状态 + range: opened,merged,closed +- field: mergeStatus + note: 合并状态 + range: can_be_merged,cannot_be_merged,checking +- field: repoID + note: 代码库ID + range: 1-5 +- field: executionID + note: 执行ID + range: 1-5 +- field: jobID + note: 作业ID + range: 0-3 +- field: compileID + note: 编译ID + range: 0-2 +- field: synced + note: 同步状态 + range: 1 +- field: deleted + note: 删除状态 + range: 0 \ No newline at end of file diff --git a/module/mr/test/zen/yaml/repo_assigneditdata.yaml b/module/mr/test/zen/yaml/repo_assigneditdata.yaml new file mode 100644 index 0000000000..88b00019e4 --- /dev/null +++ b/module/mr/test/zen/yaml/repo_assigneditdata.yaml @@ -0,0 +1,49 @@ +--- +title: repo_assigneditdata +author: Claude +version: "1.0" +desc: repo测试数据for assignEditData方法 + +fields: +- field: id + note: 代码库ID + range: 1-5 +- field: product + note: 产品ID + range: 1-3,0 +- field: name + note: 代码库名称 + range: test-repo1,test-repo2,unittest-repo +- field: encoding + note: 编码 + range: '`utf-8`' +- field: path + note: 代码库路径 + range: '`https://gitlab.example.com/test/repo1`' +- field: SCM + note: 版本控制类型 + range: Gitlab,Gitea,Gogs +- field: serviceHost + note: 服务主机ID + range: 1-3 +- field: serviceProject + note: 服务项目ID + range: 1-10 +- field: commits + note: 提交数 + range: 0-100 +- field: password + note: 密码 + range: testpassword123 +- field: encrypt + note: 加密方式 + range: base64 +- field: synced + note: 同步状态 + range: 1 +- field: lastCommit + note: 最后提交时间 + range: '`2023-12-13 13:14:34`' +- field: extra + note: 额外信息 + range: 1-5 \ No newline at end of file