diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 2cdec44ed7..da780bea3f 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -1540,8 +1540,8 @@ class gitlabModel extends model $oldObject = $this->dao->findById($issue->objectID)->from($tableName)->fetch(); if(!$oldObject) return false; - $changes = common::createChanges($oldObject, $data); - $actionID = $this->loadModel('action')->create($issue->objectType, $issue->objectID, 'Assigned', "Assigned by webhook by gitlab issue : {$issue->issue->url}", $data->assignedTo); + $changes = common::createChanges($oldObject, $data); + $actionID = $this->loadModel('action')->create($issue->objectType, $issue->objectID, 'Assigned', "Assigned by webhook by gitlab issue : {$issue->issue->url}", $data->assignedTo); $this->action->logHistory($actionID, $changes); return true; @@ -1563,15 +1563,17 @@ class gitlabModel extends model $data = $issue->object; $data->assignedTo = 'closed'; $data->status = 'closed'; - $data->closedBy = $issue->object->lastEditedBy; - $data->closedDate = $issue->object->lastEditedDate; + $data->closedBy = zget($data, 'lastEditedBy', ''); + $data->closedDate = zget($data, 'lastEditedDate', helper::now()); $this->dao->update($tableName)->data($data)->where('id')->eq($issue->objectID)->exec(); if(dao::isError()) return false; $oldObject = $this->dao->findById($issue->objectID)->from($tableName)->fetch(); - $changes = common::createChanges($oldObject, $data); - $actionID = $this->loadModel('action')->create($issue->objectType, $issue->objectID, 'Closed', "Closed by gitlab issue: {$issue->issue->url}."); + if(!$oldObject) return false; + + $changes = common::createChanges($oldObject, $data); + $actionID = $this->loadModel('action')->create($issue->objectType, $issue->objectID, 'Closed', "Closed by gitlab issue: {$issue->issue->url}."); $this->action->logHistory($actionID, $changes); return true; } diff --git a/module/gitlab/test/gitlab.class.php b/module/gitlab/test/gitlab.class.php index 68233f22fd..c0bb71e003 100644 --- a/module/gitlab/test/gitlab.class.php +++ b/module/gitlab/test/gitlab.class.php @@ -474,4 +474,18 @@ class gitlabTest if(dao::isError()) return dao::getError(); return $result ? $this->gitlab->loadModel($issue->objectType)->getByID($issue->objectID) : false; } + + /** + * Test webhookCloseIssue method. + * + * @param object $issue + * @access public + * @return array|object|false + */ + public function webhookCloseIssueTest(object $issue): array|object|false + { + $result = $this->gitlab->webhookCloseIssue($issue); + if(dao::isError()) return dao::getError(); + return $result ? $this->gitlab->loadModel($issue->objectType)->getByID($issue->objectID) : false; + } } diff --git a/module/gitlab/test/model/webhookcloseissue.php b/module/gitlab/test/model/webhookcloseissue.php new file mode 100755 index 0000000000..7494c96389 --- /dev/null +++ b/module/gitlab/test/model/webhookcloseissue.php @@ -0,0 +1,46 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +$gitlab = new gitlabTest(); + +$issue = new stdclass(); +$issue->object = new stdclass(); +$issue->objectID = 0; +$issue->objectType = ''; + +r($gitlab->webhookCloseIssueTest($issue)) && p() && e('0'); // 对象类型为空 + +$issue->objectType = 'project'; +r($gitlab->webhookCloseIssueTest($issue)) && p() && e('0'); // 对象类型错误 + +$issue->objectType = 'story'; +r($gitlab->webhookCloseIssueTest($issue)) && p() && e('0'); // 对象ID为空 + +r($gitlab->webhookCloseIssueTest($issue)) && p() && e('0'); // 对象ID错误 + +$issue->objectID = 1; +r($gitlab->webhookCloseIssueTest($issue)) && p('lastEditedBy') && e('~~'); // 对象ID正确 + +$issue->object->lastEditedBy = 'user1'; +r($gitlab->webhookCloseIssueTest($issue)) && p('lastEditedBy') && e('user1'); // 对象ID正确,更新最后编辑人 \ No newline at end of file