From fe8a806da7508d81b6bb5f49da07aeae477f5949 Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 23 Sep 2025 16:14:58 +0800 Subject: [PATCH] * [misc] Enhance unit tests for sonarqubeModel::createProject() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../test/lib/sonarqube.unittest.class.php | 53 +++++++++++++++---- module/sonarqube/test/model/createproject.php | 32 +++++++---- 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/module/sonarqube/test/lib/sonarqube.unittest.class.php b/module/sonarqube/test/lib/sonarqube.unittest.class.php index 6ac343eca4..274b477fda 100644 --- a/module/sonarqube/test/lib/sonarqube.unittest.class.php +++ b/module/sonarqube/test/lib/sonarqube.unittest.class.php @@ -52,20 +52,40 @@ class sonarqubeTest public function createProjectTest($sonarqubeID, $post) { + dao::$errors = array(); // 清空错误信息 $result = $this->objectModel->createProject($sonarqubeID, (object)$post); $errors = dao::getError(); - if($errors) + + if($errors && is_array($errors)) { - if(current($errors['name']) == "项目标识的格式不正确。允许的字符为字母、数字、'-'、''、'.'和“:”,至少有一个非数字。") return 'return error'; - if(current($errors['name']) == false) return 'return false'; - if(current($errors['name']) == 'Could not create Project with key: "' . $post['projectKey'] . '". A similar key already exists: "' . $post['projectKey'] . '"') return true; + // 检查项目名称长度错误 + if(isset($errors['projectName']) && is_array($errors['projectName'])) + { + $nameError = current($errors['projectName']); + if(strpos($nameError, '项目名称') !== false && strpos($nameError, '255') !== false) return 'return false'; + } + + // 检查项目键长度错误 + if(isset($errors['projectKey']) && is_array($errors['projectKey'])) + { + $keyError = current($errors['projectKey']); + if(strpos($keyError, '项目键') !== false && strpos($keyError, '400') !== false) return 'return false'; + } + + // 检查API返回的格式错误 + if(isset($errors['name']) && is_array($errors['name'])) + { + $apiError = current($errors['name']); + if(strpos($apiError, '项目标识的格式不正确') !== false) return 'return error'; + if($apiError == false) return 'return false'; + if(strpos($apiError, 'Could not create Project') !== false) return true; + } + return $errors; } - else - { - if(empty($result)) $result = 'return false'; - return $result; - } + + if(empty($result)) return 'return false'; + return $result; } /** @@ -356,4 +376,19 @@ class sonarqubeTest return $result; } + + /** + * Test convertApiError method. + * + * @param array|string $message + * @access public + * @return string + */ + public function convertApiErrorTest($message) + { + $result = $this->objectModel->convertApiError($message); + if(dao::isError()) return dao::getError(); + + return $result; + } } diff --git a/module/sonarqube/test/model/createproject.php b/module/sonarqube/test/model/createproject.php index 52fb621266..12b720a916 100755 --- a/module/sonarqube/test/model/createproject.php +++ b/module/sonarqube/test/model/createproject.php @@ -4,11 +4,16 @@ /** title=测试 sonarqubeModel::createProject(); +timeout=0 cid=0 -- 使用错误项目数据,正确的sonarqubeID创建Sonarqube项目 @return error -- 使用正确的项目数据,空的sonarqubeID创建Sonarqube项目 @return false -- 使用正确的sonarqubeID和Sonarqube项目信息创建Sonarqube项目 @1 +- 步骤1:正常数据创建项目 @1 +- 步骤2:无效sonarqubeID创建项目 @return false +- 步骤3:项目键格式错误创建项目 @return error +- 步骤4:项目名称长度超限创建项目 @return false +- 步骤5:项目键长度超限创建项目第projectKey条的0属性 @『项目标识』长度应当不超过『400』 +- 步骤6:空项目名称创建项目第name条的0属性 @The 'name' parameter is missing +- 步骤7:空项目键创建项目第name条的0属性 @The 'project' parameter is missing */ include dirname(__FILE__, 5) . '/test/lib/init.php'; @@ -19,11 +24,20 @@ zenData('pipeline')->loadYaml('pipeline')->gen(5); $sonarqubeID = 2; -$empty_post = array('projectName' => '', 'projectKey' => ''); -$error_post = array('projectName' => 'unit_test', 'projectKey' => '@#'); -$true_post = array('projectName' => 'unit_test17', 'projectKey' => 'unittest17'); +// 测试数据准备 +$validProject = array('projectName' => 'unit_test_project', 'projectKey' => 'unittest_project'); +$invalidKeyProject = array('projectName' => 'unit_test', 'projectKey' => '@#$invalid'); +$longNameProject = array('projectName' => str_repeat('a', 256), 'projectKey' => 'valid_key'); +$longKeyProject = array('projectName' => 'valid_name', 'projectKey' => str_repeat('a', 401)); +$emptyNameProject = array('projectName' => '', 'projectKey' => 'valid_key'); +$emptyKeyProject = array('projectName' => 'valid_name', 'projectKey' => ''); $sonarqube = new sonarqubeTest(); -r($sonarqube->createProjectTest($sonarqubeID, $error_post)) && p() && e("return error"); //使用错误项目数据,正确的sonarqubeID创建Sonarqube项目 -r($sonarqube->createProjectTest(0, $true_post)) && p() && e('return false'); //使用正确的项目数据,空的sonarqubeID创建Sonarqube项目 -r($sonarqube->createProjectTest($sonarqubeID, $true_post)) && p() && e(1); //使用正确的sonarqubeID和Sonarqube项目信息创建Sonarqube项目 + +r($sonarqube->createProjectTest($sonarqubeID, $validProject)) && p() && e(1); // 步骤1:正常数据创建项目 +r($sonarqube->createProjectTest(0, $validProject)) && p() && e('return false'); // 步骤2:无效sonarqubeID创建项目 +r($sonarqube->createProjectTest($sonarqubeID, $invalidKeyProject)) && p() && e('return error'); // 步骤3:项目键格式错误创建项目 +r($sonarqube->createProjectTest($sonarqubeID, $longNameProject)) && p() && e('return false'); // 步骤4:项目名称长度超限创建项目 +r($sonarqube->createProjectTest($sonarqubeID, $longKeyProject)) && p('projectKey:0') && e('『项目标识』长度应当不超过『400』'); // 步骤5:项目键长度超限创建项目 +r($sonarqube->createProjectTest($sonarqubeID, $emptyNameProject)) && p('name:0') && e("The 'name' parameter is missing"); // 步骤6:空项目名称创建项目 +r($sonarqube->createProjectTest($sonarqubeID, $emptyKeyProject)) && p('name:0') && e("The 'project' parameter is missing"); // 步骤7:空项目键创建项目 \ No newline at end of file