* Add gitlab unit test.

This commit is contained in:
zenggang
2023-12-20 00:22:39 +00:00
parent f78cdc9247
commit a52b9aa05a
14 changed files with 530 additions and 114 deletions
+10 -114
View File
@@ -902,9 +902,9 @@ class gitlabModel extends model
* @param int $gitlabID
* @param int $projectID
* @access public
* @return object|array|null
* @return object|array|null|false
*/
public function apiDeleteProject(int $gitlabID, int $projectID): object|array|null
public function apiDeleteProject(int $gitlabID, int $projectID): object|array|null|false
{
if(empty($projectID)) return false;
@@ -969,29 +969,6 @@ class gitlabModel extends model
return $this->projects[$gitlabID][$projectID];
}
/**
* 根据多个版本库多线程获取项目列表。
* Multi get projects by repos.
*
* @param array $repos
* @access public
* @return void
*/
public function apiMultiGetProjects(array $repos): void
{
$requests = array();
foreach($repos as $id => $repo)
{
$requests[$id]['url'] = sprintf($this->getApiRoot($repo->serviceHost, false), "/projects/{$repo->serviceProject}");
}
$this->app->loadClass('requests', true);
$results = requests::request_multiple($requests, array('timeout' => 2));
foreach($results as $id => $result)
{
$this->projects[$repos[$id]->serviceHost][$repos[$id]->serviceProject] = (!empty($result->body) and substr($result->body, 0, 1) == '{') ? json_decode($result->body) : '';
}
}
/**
* 通过api获取一个用户。
* Get single user by API.
@@ -1022,49 +999,20 @@ class gitlabModel extends model
return json_decode(commonModel::http($url));
}
/**
* 获取gitlab项目最新用户。
* Get project users.
*
* @param int $gitlabID
* @param int $projectID
* @access public
* @return object|array|null
*/
public function apiGetProjectUsers(int $gitlabID, int $projectID): object|array|null
{
$url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/users");
return json_decode(commonModel::http($url));
}
/**
* 获取gitlab项目最新成员。
* Get project all members(users and users in groups).
*
* @param int $gitlabID
* @param int $projectID
* @param int $gitlabID
* @param int $projectID
* @param int $userID
* @access public
* @return object|array|null
*/
public function apiGetProjectMembers(int $gitlabID, int $projectID): object|array|null
public function apiGetProjectMembers(int $gitlabID, int $projectID, int $userID = 0): object|array|null
{
$url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/members/all");
return json_decode(commonModel::http($url));
}
/**
* 获取gitlab项目某个成员信息。
* Get the member detail in project.
*
* @param int $gitlabID
* @param int $projectID
* @param int $userID
* @access public
* @return object|array|null
*/
public function apiGetProjectMember(int $gitlabID, int $projectID, int $userID): object|array|null
{
$url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/members/all/$userID");
$path = "/projects/{$projectID}/members/all" . ($userID ? "/{$userID}" : '');
$url = sprintf($this->getApiRoot($gitlabID), $path);
return json_decode(commonModel::http($url));
}
@@ -1084,38 +1032,6 @@ class gitlabModel extends model
return json_decode(commonModel::http($url));
}
/**
* 通过API获取项目的分叉。
* Get Forks of a project by API.
*
* @link https://docs.gitlab.com/ee/api/projects.html#list-forks-of-a-project
* @param int $gitlabID
* @param int $projectID
* @access public
* @return object|array|null
*/
public function apiGetForks(int $gitlabID, int $projectID): object|array|null
{
$url = sprintf($this->getApiRoot($gitlabID), "/projects/$projectID/forks");
return json_decode(commonModel::http($url));
}
/**
* 获取项目是否fork别的项目而来。
* Get upstream project by API.
*
* @param int $gitlabID
* @param int $projectID
* @access public
* @return string|array
*/
public function apiGetUpstream(int $gitlabID, int $projectID): string|array
{
$currentProject = $this->apiGetSingleProject($gitlabID, $projectID);
if(isset($currentProject->forked_from_project)) return $currentProject->forked_from_project;
return array();
}
/**
* 通过api获取项目 hooks。
* Get hooks.
@@ -1126,30 +1042,10 @@ class gitlabModel extends model
* @link https://docs.gitlab.com/ee/api/projects.html#list-project-hooks
* @return object|array|null
*/
public function apiGetHooks(int $gitlabID, int $projectID): object|array|null
public function apiGetHooks(int $gitlabID, int $projectID, int $hookID = 0): object|array|null
{
$apiRoot = $this->getApiRoot($gitlabID, false);
$apiPath = "/projects/{$projectID}/hooks";
$url = sprintf($apiRoot, $apiPath);
return json_decode(commonModel::http($url));
}
/**
* 通过api获取指定hook。
* Get specific hook by api.
*
* @param int $gitlabID
* @param int $projectID
* @param int $hookID
* @access public
* @link https://docs.gitlab.com/ee/api/projects.html#get-project-hook
* @return object|array|null
*/
public function apiGetHook(int $gitlabID, int $projectID, int $hookID): object|array|null
{
$apiRoot = $this->getApiRoot($gitlabID, false);
$apiPath = "/projects/$projectID/hooks/$hookID)";
$apiPath = "/projects/{$projectID}/hooks" . ($hookID ? "/{$hookID}" : '');
$url = sprintf($apiRoot, $apiPath);
return json_decode(commonModel::http($url));
+56
View File
@@ -197,6 +197,46 @@ class gitlabTest
return $this->gitlab->apiGetSingleTag($gitlabID, $projectID, $tag);
}
/**
* Api get signle branch.
*
* @param int $gitlabID
* @param int $projectID
* @param string $branch
* @access public
* @return object
*/
public function apiGetSingleBranchTest($gitlabID, $projectID, $branch)
{
return $this->gitlab->apiGetSingleBranch($gitlabID, $projectID, $branch);
}
/**
* Api get signle user.
*
* @param int $gitlabID
* @param int $userID
* @access public
* @return object|array|null
*/
public function apiGetSingleUserTest(int $gitlabID, int $userID): object|array|null
{
return $this->gitlab->apiGetSingleUser($gitlabID, $userID);
}
/**
* Api get signle group.
*
* @param int $gitlabID
* @param int $groupID
* @access public
* @return object|array|null
*/
public function apiGetSingleGroupTest(int $gitlabID, int $groupID): object|array|null
{
return $this->gitlab->apiGetSingleGroup($gitlabID, $groupID);
}
/**
* Api get signle project.
*
@@ -210,4 +250,20 @@ class gitlabTest
{
return $this->gitlab->apiGetSingleProject($gitlabID, $projectID, $useUser);
}
public function addPushWebhookTest(int $repoID, string $token, int $projectID = 0)
{
$repo = $this->tester->loadModel('repo')->getByID($repoID);
if($projectID) $repo->project = $projectID;
$result = $this->gitlab->addPushWebhook($repo, $token);
if(is_array($result)) $result = true;
return $result;
}
public function isWebhookExistsTest(int $repoID, string $url = '')
{
$repo = $this->tester->loadModel('repo')->getByID($repoID);
return $this->gitlab->isWebhookExistsTest($repo, $url);
}
}
@@ -0,0 +1,27 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/gitlab.class.php';
su('admin');
/**
title=测试 gitlabModel::isWebhookExists();
timeout=0
cid=1
- 使用repoID为1,不存在的项目id推送webhook @0
- 使用repoID为1,存在的项目id推送webhook @1
*/
zdTable('pipeline')->gen(5);
zdTable('repo')->gen(1);
$gitlab = new gitlabTest();
$repoID = 1;
$url = 'http:/api.php/v1/gitlab/webhook?repoID=1';
r($gitlab->isWebhookExistsTest($repoID, '')) && p() && e('0'); //检查url为空的webhook是否存在
r($gitlab->isWebhookExistsTest($repoID, $url)) && p() && e('1'); //用正常的url检查webhook是否存在
@@ -0,0 +1,34 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
/**
title=测试 gitlabModel::apiCreateHook();
timeout=0
cid=1
- 使用空的gitlabID,projectID,hook对象创建GitLabhook @0
- 使用空的gitlabID、projectID,正确的hook对象创建GitLabhook @0
- 使用正确的gitlabID、hook信息,错误的projectID创建hook属性message @404 Project Not Found
- 通过gitlabID,projectID,hook对象正确创建GitLabhook属性url @http://unittest.com/api.php/v1/gitlab/webhook?repoID=1
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 1;
$projectID = 2;
$emptyHook = new stdclass();
$hook = new stdclass();
$hook->url = 'http://unittest.com/api.php/v1/gitlab/webhook?repoID=1';
$hook->push_events = true;
$hook->merge_requests_events = true;
r($gitlab->apiCreateHook(0, 0, $emptyHook)) && p() && e('0'); //使用空的gitlabID,projectID,hook对象创建GitLabhook
r($gitlab->apiCreateHook(0, 0, $hook)) && p() && e('0'); //使用空的gitlabID、projectID,正确的hook对象创建GitLabhook
r($gitlab->apiCreateHook($gitlabID, 0, $hook)) && p('message') && e('404 Project Not Found'); //使用正确的gitlabID、hook信息,错误的projectID创建hook
r($gitlab->apiCreateHook($gitlabID, $projectID, $hook)) && p('url') && e('http://unittest.com/api.php/v1/gitlab/webhook?repoID=1'); //通过gitlabID,projectID,hook对象正确创建GitLabhook
@@ -0,0 +1,52 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
/**
title=测试 gitlabModel::apiDeleteGroup();
timeout=0
cid=1
- 使用空的groupID删除gitlab群组 @0
- 使用错误gitlabID删除群组 @0
- 通过gitlabID,projectID,分支对象正确删除GitLab群组属性message @202 Accepted
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 1;
/* Create group. */
$group = new stdclass();
$group->name = 'unitTestGroup17';
$group->path = 'unit_test_group17';
$group->description = 'unit_test_group desc';
$group->visibility = 'public';
$group->request_access_enabled = '1';
$group->lfs_enabled = '1';
$group->project_creation_level = 'developer';
$group->subgroup_creation_level = 'maintainer';
$gitlab->apiCreateGroup($gitlabID, $group);
/* Get groupID. */
$gitlabGroups = $gitlab->apiGetGroups($gitlabID);
foreach($gitlabGroups as $gitlabGroup)
{
if($gitlabGroup->name == 'unitTestGroup17')
{
$groupID = $gitlabGroup->id;
break;
}
}
$group = new stdclass();
$group->description = 'apiUpdatedGroup';
r($gitlab->apiDeleteGroup($gitlabID, 0)) && p() && e('0'); //使用空的groupID删除gitlab群组
r($gitlab->apiDeleteGroup(0, $groupID)) && p() && e('0'); //使用错误gitlabID删除群组
r($gitlab->apiDeleteGroup($gitlabID, $groupID)) && p('message') && e('202 Accepted'); //通过gitlabID,projectID,分支对象正确删除GitLab群组
@@ -0,0 +1,49 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
/**
title=测试 gitlabModel::apiDeleteProject();
timeout=0
cid=1
- 使用空的projectID删除项目 @0
- 使用错误gitlabID删除项目 @0
- 通过gitlabID,项目id正确删除项目属性message @202 Accepted
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 1;
/* Create project. */
$project = new stdclass();
$project->name = 'unitTestProject17';
$project->path = 'unit_test_project17';
$project->description = 'unit_test_project desc';
$project->visibility = 'public';
$project->namespace_id = '1';
$gitlab->apiCreateProject($gitlabID, $project);
/* Get projectID. */
$gitlabProjects = $gitlab->apiGetProjects($gitlabID);
foreach($gitlabProjects as $gitlabProject)
{
if($gitlabProject->path == 'unit_test_project17')
{
$projectID = $gitlabProject->id;
break;
}
}
$project = new stdclass();
$project->description = 'apiUpdatedProject';
r($gitlab->apiDeleteProject($gitlabID, 0)) && p() && e('0'); //使用空的projectID删除项目
r($gitlab->apiDeleteProject(0, $projectID)) && p() && e('0'); //使用错误gitlabID删除项目
r($gitlab->apiDeleteProject($gitlabID, $projectID)) && p('message') && e('202 Accepted'); //通过gitlabID,项目id正确删除项目
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
/**
title=PHP Deprecated: substr(): Passing null to parameter
timeout=0
cid=1
- 通过gitlabID,projectID,获取GitLab hook列表 @1
- 通过gitlabID,projectID,获取GitLab hook数量 @1
- 通过指定hookID获取hook信息 @1
- 当前项目没有hook时,获取GitLab hook列表 @0
- 当gitlabID存在,projectID不存在时,获取GitLab hook列表属性message @404 Project Not Found
- 当gitlabID,projectID都为0时,获取GitLabi hook列表 @return empty
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 1;
$projectID = 2;
$result = $gitlab->apiGetHooks($gitlabID, $projectID);
$hook = end($result);
$hookResult = $gitlab->apiGetHooks($gitlabID, $projectID, $hook->id);
r(isset($hook->url)) && p() && e('1'); //通过gitlabID,projectID,获取GitLab hook列表
r(count($result) > 0) && p() && e('1'); //通过gitlabID,projectID,获取GitLab hook数量
r(isset($hookResult->id)) && p() && e('1'); //通过指定hookID获取hook信息
$gitlabID = 1;
$projectID = 1;
r(count($gitlab->apiGetHooks($gitlabID, $projectID))) && p() && e('0'); //当前项目没有hook时,获取GitLab hook列表
$gitlabID = 1;
$result = $gitlab->apiGetHooks($gitlabID, 0);
r($gitlab->apiGetHooks($gitlabID, 0)) && p('message') && e('404 Project Not Found'); //当gitlabID存在,projectID不存在时,获取GitLab hook列表
$result = $gitlab->apiGetHooks(0, 0);
if(empty($result)) $result = 'return empty';
r($result) && p() && e('return empty'); //当gitlabID,projectID都为0时,获取GitLabi hook列表
@@ -0,0 +1,38 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
su('admin');
/**
title=测试 gitlabModel::apiGetProjectMembers();
timeout=0
cid=1
- 使用空的数据查询群组用户 @return null
- 使用空的projectID查询群组用户属性message @404 Project Not Found
- 通过gitlabID,projectID查询群组用户 @1
- 通过gitlabID,projectID,userID查询群组用户属性name @测试用户1
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 0;
$projectID = 0;
$result = $gitlab->apiGetProjectMembers($gitlabID, $projectID);
if(!$result) $result = 'return null';
r($result) && p() && e('return null'); //使用空的数据查询群组用户
$gitlabID = 1;
r($gitlab->apiGetProjectMembers($gitlabID, $projectID)) && p('message') && e('404 Project Not Found'); //使用空的projectID查询群组用户
$projectID = 2;
$result = $gitlab->apiGetProjectMembers($gitlabID, $projectID);
r($result[0]->id > 0) && p() && e('1'); //通过gitlabID,projectID查询群组用户
$userID = 4;
r($gitlab->apiGetProjectMembers($gitlabID, $projectID, $userID)) && p('name') && e('测试用户1'); //通过gitlabID,projectID,userID查询群组用户
@@ -0,0 +1,32 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/gitlab.class.php';
su('admin');
/**
title=测试gitlabModel->apiGetSingleBranch();
timeout=0
cid=1
- 查询正确的branch信息属性name @branch1
- 使用不存在的gitlabID查询branch信息 @0
- 使用不存在的projectID查询branch信息属性message @404 Project Not Found
- 使用不存在的branch名称查询branch信息属性message @404 Branch Not Found
*/
zdTable('pipeline')->gen(5);
$gitlab = new gitlabTest();
$branch1 = $gitlab->apiGetSingleBranchTest(1, 2, 'branch1');
$branch2 = $gitlab->apiGetSingleBranchTest(0, 2, 'branch1');
$branch3 = $gitlab->apiGetSingleBranchTest(1, 0, 'branch1');
$branch4 = $gitlab->apiGetSingleBranchTest(1, 2, 'branch12345');
r($branch1) && p('name') && e('branch1'); // 查询正确的branch信息
r($branch2) && p() && e('0'); // 使用不存在的gitlabID查询branch信息
r($branch3) && p('message') && e('404 Project Not Found'); // 使用不存在的projectID查询branch信息
r($branch4) && p('message') && e('404 Branch Not Found'); // 使用不存在的branch名称查询branch信息
@@ -0,0 +1,29 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/gitlab.class.php';
su('admin');
/**
title=测试gitlabModel->apiGetSingleGroup();
timeout=0
cid=1
- 查询正确的group信息属性name @testGroup
- 使用不存在的gitlabID查询group信息 @0
- 使用不存在的group名称查询group信息属性message @404 Group Not Found
*/
zdTable('pipeline')->gen(5);
$gitlab = new gitlabTest();
$group1 = $gitlab->apiGetSingleGroupTest(1, 14);
$group2 = $gitlab->apiGetSingleGroupTest(0, 2);
$group3 = $gitlab->apiGetSingleGroupTest(1, 100001);
r($group1) && p('name') && e('testGroup'); // 查询正确的group信息
r($group2) && p() && e('0'); // 使用不存在的gitlabID查询group信息
r($group3) && p('message') && e('404 Group Not Found'); // 使用不存在的group名称查询group信息
@@ -0,0 +1,29 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/gitlab.class.php';
su('admin');
/**
title=测试gitlabModel->apiGetSingleUser();
timeout=0
cid=1
- 查询正确的user信息属性name @测试用户1
- 使用不存在的gitlabID查询user信息 @0
- 使用不存在的user名称查询user信息属性message @404 User Not Found
*/
zdTable('pipeline')->gen(5);
$gitlab = new gitlabTest();
$user1 = $gitlab->apiGetSingleUserTest(1, 4);
$user2 = $gitlab->apiGetSingleUserTest(0, 2);
$user3 = $gitlab->apiGetSingleUserTest(1, 100001);
r($user1) && p('name') && e('测试用户1'); // 查询正确的user信息
r($user2) && p() && e('0'); // 使用不存在的gitlabID查询user信息
r($user3) && p('message') && e('404 User Not Found'); // 使用不存在的user名称查询user信息
@@ -0,0 +1,53 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
/**
title=测试 gitlabModel::apiUpdateGroup();
timeout=0
cid=1
- 使用空的groupID创建gitlab群组 @0
- 使用错误gitlabID创建群组 @0
- 通过gitlabID,用户对象正确更新用户名字属性description @apiUpdatedGroup
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 1;
/* Create group. */
$group = new stdclass();
$group->name = 'unitTestGroup17';
$group->path = 'unit_test_group17';
$group->description = 'unit_test_group desc';
$group->visibility = 'public';
$group->request_access_enabled = '1';
$group->lfs_enabled = '1';
$group->project_creation_level = 'developer';
$group->subgroup_creation_level = 'maintainer';
$gitlab->apiCreateGroup($gitlabID, $group);
/* Get groupID. */
$gitlabGroups = $gitlab->apiGetGroups($gitlabID);
foreach($gitlabGroups as $gitlabGroup)
{
if($gitlabGroup->name == 'unitTestGroup17')
{
$groupID = $gitlabGroup->id;
break;
}
}
$group = new stdclass();
$group->description = 'apiUpdatedGroup';
r($gitlab->apiUpdateGroup($gitlabID, $group)) && p() && e('0'); //使用空的groupID创建gitlab群组
r($gitlab->apiUpdateGroup(0, $group)) && p() && e('0'); //使用错误gitlabID创建群组
$group->id = $groupID;
r($gitlab->apiUpdateGroup($gitlabID, $group)) && p('description') && e('apiUpdatedGroup'); //通过gitlabID,用户对象正确更新用户名字
@@ -0,0 +1,50 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
/**
title=测试 gitlabModel::apiUpdateProject();
timeout=0
cid=1
- 使用空的projectID创建gitlab群组 @0
- 使用错误gitlabID创建群组 @0
- 通过gitlabID,用户对象正确更新项目描述属性description @apiUpdatedProject
*/
zdTable('pipeline')->gen(5);
$gitlab = $tester->loadModel('gitlab');
$gitlabID = 1;
/* Create project. */
$project = new stdclass();
$project->name = 'unitTestProject17';
$project->path = 'unit_test_project17';
$project->description = 'unit_test_project desc';
$project->visibility = 'public';
$project->namespace_id = '1';
$gitlab->apiCreateProject($gitlabID, $project);
/* Get projectID. */
$gitlabProjects = $gitlab->apiGetProjects($gitlabID);
foreach($gitlabProjects as $gitlabProject)
{
if($gitlabProject->path == 'unit_test_project17')
{
$projectID = $gitlabProject->id;
break;
}
}
$project = new stdclass();
$project->description = 'apiUpdatedProject';
r($gitlab->apiUpdateProject($gitlabID, $project)) && p() && e('0'); //使用空的projectID创建gitlab群组
r($gitlab->apiUpdateProject(0, $project)) && p() && e('0'); //使用错误gitlabID创建群组
$project->id = $projectID;
r($gitlab->apiUpdateProject($gitlabID, $project)) && p('description') && e('apiUpdatedProject'); //通过gitlabID,用户对象正确更新项目描述
@@ -0,0 +1,28 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/gitlab.class.php';
su('admin');
/**
title=测试 gitlabModel::addPushWebhook();
timeout=0
cid=1
- 使用repoID为1,不存在的项目id推送webhook @0
- 使用repoID为1,存在的项目id推送webhook @1
*/
zdTable('pipeline')->gen(5);
zdTable('repo')->gen(1);
$gitlab = new gitlabTest();
$repoID = 1;
$token = '';
$_SERVER['REQUEST_URI'] = 'http://unittest/';
r($gitlab->addPushWebhookTest($repoID, $token)) && p() && e('0'); //使用repoID为1,不存在的项目id推送webhook
r($gitlab->addPushWebhookTest($repoID, $token, 2)) && p() && e('1'); //使用repoID为1,存在的项目id推送webhook