From 99fa080b9c8d5644cfe676c5efbf373db0ee862a Mon Sep 17 00:00:00 2001 From: caoyanyi Date: Tue, 19 Dec 2023 16:07:51 +0800 Subject: [PATCH] + Add unit test case for mr->apiDeleteMR. --- module/mr/model.php | 14 ++++----- module/mr/test/model/apideletemr.php | 47 ++++++++++++++++++++++++++++ module/mr/test/mr.class.php | 17 ++++++++++ 3 files changed, 71 insertions(+), 7 deletions(-) create mode 100755 module/mr/test/model/apideletemr.php diff --git a/module/mr/model.php b/module/mr/model.php index 748e4730be..a553a67e93 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -708,19 +708,19 @@ class mrModel extends model public function apiDeleteMR(int $hostID, string $projectID, int $MRID): object|null { $host = $this->loadModel('pipeline')->getByID($hostID); + if(!$host) return null; + if($host->type == 'gitlab') { $url = sprintf($this->loadModel('gitlab')->getApiRoot($hostID), "/projects/$projectID/merge_requests/$MRID"); return json_decode(commonModel::http($url, null, array(CURLOPT_CUSTOMREQUEST => 'DELETE'))); } - else + + $rowMR = $this->apiGetSingleMR($hostID, $projectID, $MRID); + if($rowMR->state == 'opened') { - $rowMR = $this->apiGetSingleMR($hostID, $projectID, $MRID); - if($rowMR->state == 'opened') - { - $url = sprintf($this->loadModel($host->type)->getApiRoot($hostID), "/repos/$projectID/pulls/$MRID"); - return json_decode(commonModel::http($url, array('state' => 'closed'), array(), array(), 'json', 'PATCH')); - } + $url = sprintf($this->loadModel($host->type)->getApiRoot($hostID), "/repos/$projectID/pulls/$MRID"); + return json_decode(commonModel::http($url, array('state' => 'closed'), array(), array(), 'json', 'PATCH')); } return null; diff --git a/module/mr/test/model/apideletemr.php b/module/mr/test/model/apideletemr.php new file mode 100755 index 0000000000..6309db0ab2 --- /dev/null +++ b/module/mr/test/model/apideletemr.php @@ -0,0 +1,47 @@ +#!/usr/bin/env php +gen(5); + +$mrModel = new mrTest(); + +$gitlabID = 1; +$giteaID = 4; +$gogsID = 5; + +$gitlabProjectID = 3; +$giteaProjectID = 'gitea/unittest'; +$gogsProjectID = 'easycorp/unittest'; + +$params = new stdClass(); +$params->title = 'test'; +$params->sourceBranch = 'test'; +$params->targetBranch = 'master'; +$params->targetProject = $gitlabProjectID; +$params->description = 'This is a test merge request'; +$params->assignee = 'user1'; +$params->removeSourceBranch = 0; +$params->squash = 0; + +r($mrModel->apiDeleteMrTester($gitlabID, $gitlabProjectID, $params)) && p('message') && e('404 Not found'); // 正确的数据创建并删除Gitlab合并请求 +r($mrModel->apiDeleteMrTester($giteaID, $giteaProjectID, $params)) && p('title,state') && e('test,closed'); // 正确的数据创建并删除Gitea合并请求 +r($mrModel->apiDeleteMrTester($gogsID, $gogsProjectID, $params)) && p('title,state') && e('test,closed'); // 正确的数据创建并删除Gogs合并请求 \ No newline at end of file diff --git a/module/mr/test/mr.class.php b/module/mr/test/mr.class.php index 50c659e856..8745941ec7 100644 --- a/module/mr/test/mr.class.php +++ b/module/mr/test/mr.class.php @@ -227,4 +227,21 @@ class mrTest $result->oldTitle = $oldMR->title; return $result; } + + /** + * Test apiDeleteMR method. + * + * @param int $hostID + * @param string $project + * @param object $params + * @access public + * @return array|object + */ + public function apiDeleteMrTester(int $hostID, string $project, object $params): array|object + { + $result = $this->objectModel->apiCreateMR($hostID, $project, $params); + $mrID = empty($result->iid) ? $result->id : $result->iid; + $this->objectModel->apiDeleteMR($hostID, $project, $mrID); + return $this->objectModel->apiGetSingleMR($hostID, $project, $mrID); + } }