Merge "[gitlab] approvals: fix error with community edition"
This commit is contained in:
commit
b3e9130e55
|
@ -1628,6 +1628,12 @@ class FakeGitlabConnection(gitlabconnection.GitlabConnection):
|
||||||
}
|
}
|
||||||
return (name, data)
|
return (name, data)
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def enable_community_edition(self):
|
||||||
|
self.gl_client.community_edition = True
|
||||||
|
yield
|
||||||
|
self.gl_client.community_edition = False
|
||||||
|
|
||||||
|
|
||||||
class FakeGitlabAPIClient(gitlabconnection.GitlabAPIClient):
|
class FakeGitlabAPIClient(gitlabconnection.GitlabAPIClient):
|
||||||
log = logging.getLogger("zuul.test.FakeGitlabAPIClient")
|
log = logging.getLogger("zuul.test.FakeGitlabAPIClient")
|
||||||
|
@ -1635,6 +1641,7 @@ class FakeGitlabAPIClient(gitlabconnection.GitlabAPIClient):
|
||||||
def __init__(self, baseurl, api_token, merge_requests_db={}):
|
def __init__(self, baseurl, api_token, merge_requests_db={}):
|
||||||
super(FakeGitlabAPIClient, self).__init__(baseurl, api_token)
|
super(FakeGitlabAPIClient, self).__init__(baseurl, api_token)
|
||||||
self.merge_requests = merge_requests_db
|
self.merge_requests = merge_requests_db
|
||||||
|
self.community_edition = False
|
||||||
|
|
||||||
def gen_error(self, verb):
|
def gen_error(self, verb):
|
||||||
return {
|
return {
|
||||||
|
@ -1676,9 +1683,14 @@ class FakeGitlabAPIClient(gitlabconnection.GitlabAPIClient):
|
||||||
r'.+/projects/(.+)/merge_requests/(\d+)/approvals$', url)
|
r'.+/projects/(.+)/merge_requests/(\d+)/approvals$', url)
|
||||||
if match:
|
if match:
|
||||||
mr = self._get_mr(match)
|
mr = self._get_mr(match)
|
||||||
return {
|
if not self.community_edition:
|
||||||
'approvals_left': 0 if mr.approved else 1,
|
return {
|
||||||
}, 200, "", "GET"
|
'approvals_left': 0 if mr.approved else 1,
|
||||||
|
}, 200, "", "GET"
|
||||||
|
else:
|
||||||
|
return {
|
||||||
|
'approved': mr.approved,
|
||||||
|
}, 200, "", "GET"
|
||||||
|
|
||||||
def post(self, url, params=None, zuul_event_id=None):
|
def post(self, url, params=None, zuul_event_id=None):
|
||||||
|
|
||||||
|
|
|
@ -559,6 +559,29 @@ class TestGitlabDriver(ZuulTestCase):
|
||||||
self.waitUntilSettled()
|
self.waitUntilSettled()
|
||||||
self.assertEqual(1, len(self.history))
|
self.assertEqual(1, len(self.history))
|
||||||
|
|
||||||
|
@simple_layout('layouts/requirements-gitlab.yaml', driver='gitlab')
|
||||||
|
def test_approval_require_community_edition(self):
|
||||||
|
|
||||||
|
with self.fake_gitlab.enable_community_edition():
|
||||||
|
A = self.fake_gitlab.openFakeMergeRequest(
|
||||||
|
'org/project2', 'master', 'A')
|
||||||
|
|
||||||
|
self.fake_gitlab.emitEvent(A.getMergeRequestOpenedEvent())
|
||||||
|
self.waitUntilSettled()
|
||||||
|
self.assertEqual(0, len(self.history))
|
||||||
|
|
||||||
|
A.approved = True
|
||||||
|
|
||||||
|
self.fake_gitlab.emitEvent(A.getMergeRequestUpdatedEvent())
|
||||||
|
self.waitUntilSettled()
|
||||||
|
self.assertEqual(1, len(self.history))
|
||||||
|
|
||||||
|
A.approved = False
|
||||||
|
|
||||||
|
self.fake_gitlab.emitEvent(A.getMergeRequestUpdatedEvent())
|
||||||
|
self.waitUntilSettled()
|
||||||
|
self.assertEqual(1, len(self.history))
|
||||||
|
|
||||||
@simple_layout('layouts/requirements-gitlab.yaml', driver='gitlab')
|
@simple_layout('layouts/requirements-gitlab.yaml', driver='gitlab')
|
||||||
def test_label_require(self):
|
def test_label_require(self):
|
||||||
|
|
||||||
|
|
|
@ -554,7 +554,12 @@ class GitlabConnection(BaseConnection):
|
||||||
mr_approval_status = self.gl_client.get_mr_approvals_status(
|
mr_approval_status = self.gl_client.get_mr_approvals_status(
|
||||||
project_name, number, zuul_event_id=event)
|
project_name, number, zuul_event_id=event)
|
||||||
log.info('Got MR approval status %s#%s', project_name, number)
|
log.info('Got MR approval status %s#%s', project_name, number)
|
||||||
mr['approved'] = mr_approval_status['approvals_left'] == 0
|
if 'approvals_left' in mr_approval_status:
|
||||||
|
# 'approvals_left' is not present when 'Required Merge Request
|
||||||
|
# Approvals' feature isn't available
|
||||||
|
mr['approved'] = mr_approval_status['approvals_left'] == 0
|
||||||
|
else:
|
||||||
|
mr['approved'] = mr_approval_status['approved']
|
||||||
return mr
|
return mr
|
||||||
|
|
||||||
def commentMR(self, project_name, number, message, event=None):
|
def commentMR(self, project_name, number, message, event=None):
|
||||||
|
|
Loading…
Reference in New Issue