From aa1a826ea92bc5a0ca8c56085cb481371e9329d5 Mon Sep 17 00:00:00 2001 From: liugang Date: Mon, 8 Sep 2025 13:34:02 +0800 Subject: [PATCH] + [misc] Add unit tests for gitlabModel::apiCreateTag() 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 --- .../gitlab/test/lib/gitlab.unittest.class.php | 17 +++++ module/gitlab/test/model/apicreatetag.php | 72 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100755 module/gitlab/test/model/apicreatetag.php diff --git a/module/gitlab/test/lib/gitlab.unittest.class.php b/module/gitlab/test/lib/gitlab.unittest.class.php index 3babe34355..bced7a75a1 100755 --- a/module/gitlab/test/lib/gitlab.unittest.class.php +++ b/module/gitlab/test/lib/gitlab.unittest.class.php @@ -509,4 +509,21 @@ class gitlabTest if(dao::isError()) return dao::getError(); return $result ? $this->gitlab->loadModel($issue->objectType)->getByID($issue->objectID) : false; } + + /** + * Test apiCreateTag method. + * + * @param int $gitlabID + * @param int $projectID + * @param object $tag + * @access public + * @return mixed + */ + public function apiCreateTagTest(int $gitlabID, int $projectID, object $tag): mixed + { + $result = $this->gitlab->apiCreateTag($gitlabID, $projectID, $tag); + if(dao::isError()) return dao::getError(); + + return $result; + } } diff --git a/module/gitlab/test/model/apicreatetag.php b/module/gitlab/test/model/apicreatetag.php new file mode 100755 index 0000000000..243c5b573e --- /dev/null +++ b/module/gitlab/test/model/apicreatetag.php @@ -0,0 +1,72 @@ +#!/usr/bin/env php +type->range('gitlab{3}'); +$table->name->range('Test GitLab{3}'); +$table->url->range('https://gitlab.example.com{3}'); +$table->token->range('test-token{3}'); +$table->gen(3); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$gitlabTest = new gitlabTest(); + +// 5. 强制要求:必须包含至少5个测试步骤 +// 测试步骤1:使用有效参数创建标签(由于没有真实GitLab连接,期望返回null) +$validTag = new stdClass(); +$validTag->tag_name = 'v1.0.0'; +$validTag->ref = 'main'; +$validTag->message = 'Release version 1.0.0'; +$result = $gitlabTest->apiCreateTagTest(1, 1, $validTag); +if(empty($result)) $result = 'return empty'; +r($result) && p() && e('return empty'); + +// 测试步骤2:使用空的tag_name参数 +$emptyTagName = new stdClass(); +$emptyTagName->tag_name = ''; +$emptyTagName->ref = 'main'; +r($gitlabTest->apiCreateTagTest(1, 1, $emptyTagName)) && p() && e('0'); + +// 测试步骤3:使用空的ref参数 +$emptyRef = new stdClass(); +$emptyRef->tag_name = 'v1.0.1'; +$emptyRef->ref = ''; +r($gitlabTest->apiCreateTagTest(1, 1, $emptyRef)) && p() && e('0'); + +// 测试步骤4:使用无效的gitlabID参数(getApiRoot返回空字符串) +$validTag2 = new stdClass(); +$validTag2->tag_name = 'v1.0.2'; +$validTag2->ref = 'main'; +$result2 = $gitlabTest->apiCreateTagTest(999, 1, $validTag2); +if(empty($result2)) $result2 = 'return empty'; +r($result2) && p() && e('return empty'); + +// 测试步骤5:使用无效的projectID参数(API调用会失败) +$validTag3 = new stdClass(); +$validTag3->tag_name = 'v1.0.3'; +$validTag3->ref = 'main'; +$result3 = $gitlabTest->apiCreateTagTest(1, 999, $validTag3); +if(empty($result3)) $result3 = 'return empty'; +r($result3) && p() && e('return empty'); \ No newline at end of file