Merge "gitlab - add the merge request updated test"

This commit is contained in:
Zuul 2020-07-28 19:40:11 +00:00 committed by Gerrit Code Review
commit 4dcab054a3
5 changed files with 76 additions and 17 deletions

View File

@ -1649,7 +1649,7 @@ class FakeGitlabAPIClient(gitlabconnection.GitlabAPIClient):
'state': mr.state,
'description': mr.description,
'updated_at': mr.updated_at.strftime('%Y-%m-%dT%H:%M:%S.%fZ'),
'sha': mr.patch_number,
'sha': mr.sha,
'labels': mr.labels,
'merged_at': mr.merged_at,
'merge_status': mr.merge_status,
@ -1694,13 +1694,11 @@ class FakeGitlabMergeRequest(object):
self.created_at = datetime.datetime.now()
self.updated_at = self.created_at
self.merged_at = None
self.patch_number = None
self.sha = None
self.state = 'opened'
self.merge_status = 'can_be_merged'
self.uuid = uuid.uuid4().hex
self.labels = []
self.notes = []
self.upstream_root = upstream_root
self.url = "https://%s/%s/merge_requests/%s" % (
self.gitlab.server, urllib.parse.quote_plus(
self.project), self.number)
@ -1750,10 +1748,10 @@ class FakeGitlabMergeRequest(object):
f.write(content)
repo.index.add([fn])
self.patch_number = repo.index.commit(msg).hexsha
self.sha = repo.index.commit(msg).hexsha
repo.create_head(self.getMRReference(), self.patch_number, force=True)
self.mr_ref.set_commit(self.patch_number)
repo.create_head(self.getMRReference(), self.sha, force=True)
self.mr_ref.set_commit(self.sha)
repo.head.reference = 'master'
repo.git.clean('-x', '-f', '-d')
repo.heads['master'].checkout()
@ -1776,13 +1774,16 @@ class FakeGitlabMergeRequest(object):
'%Y-%m-%d %H:%M:%S UTC'),
'iid': self.number,
'target_branch': self.branch,
'last_commit': {
'id': self.patch_number,
}
'last_commit': {'id': self.sha}
},
}
return (name, data)
def getMergeRequestUpdatedEvent(self):
self._addCommitInMR()
self._updateTimeStamp()
return self.getMergeRequestOpenedEvent()
def getMergeRequestCommentedEvent(self, note):
self.addNote(note)
note_date = self.notes[-1]['created_at'].strftime(
@ -1797,9 +1798,7 @@ class FakeGitlabMergeRequest(object):
'title': self.title,
'iid': self.number,
'target_branch': self.branch,
'last_commit': {
'id': self.patch_number,
},
'last_commit': {'id': self.sha}
},
'object_attributes': {
'created_at': note_date,

View File

@ -9,6 +9,7 @@
- event: gl_merge_request
action:
- opened
- changed
start:
gitlab:
comment: True

View File

@ -96,7 +96,7 @@ class TestGitlabDriver(ZuulTestCase):
job = self.getJobFromHistory('project-test2')
zuulvars = job.parameters['zuul']
self.assertEqual(str(A.number), zuulvars['change'])
self.assertEqual(str(A.patch_number), zuulvars['patchset'])
self.assertEqual(str(A.sha), zuulvars['patchset'])
self.assertEqual('master', zuulvars['branch'])
self.assertEquals('https://gitlab/org/project/merge_requests/1',
zuulvars['items'][0]['change_url'])
@ -112,6 +112,64 @@ class TestGitlabDriver(ZuulTestCase):
A.notes[1]['body'],
MatchesRegex(r'.*project-test2.*SUCCESS.*', re.DOTALL))
@simple_layout('layouts/basic-gitlab.yaml', driver='gitlab')
def test_merge_request_updated(self):
A = self.fake_gitlab.openFakeMergeRequest('org/project', 'master', 'A')
mr_tip1_sha = A.sha
self.fake_gitlab.emitEvent(A.getMergeRequestOpenedEvent())
self.waitUntilSettled()
self.assertEqual(2, len(self.history))
self.assertHistory(
[
{'name': 'project-test1', 'changes': '1,%s' % mr_tip1_sha},
{'name': 'project-test2', 'changes': '1,%s' % mr_tip1_sha},
], ordered=False
)
self.fake_gitlab.emitEvent(A.getMergeRequestUpdatedEvent())
mr_tip2_sha = A.sha
self.waitUntilSettled()
self.assertEqual(4, len(self.history))
self.assertHistory(
[
{'name': 'project-test1', 'changes': '1,%s' % mr_tip1_sha},
{'name': 'project-test2', 'changes': '1,%s' % mr_tip1_sha},
{'name': 'project-test1', 'changes': '1,%s' % mr_tip2_sha},
{'name': 'project-test2', 'changes': '1,%s' % mr_tip2_sha}
], ordered=False
)
@simple_layout('layouts/basic-gitlab.yaml', driver='gitlab')
def test_merge_request_updated_builds_aborted(self):
A = self.fake_gitlab.openFakeMergeRequest('org/project', 'master', 'A')
mr_tip1_sha = A.sha
self.executor_server.hold_jobs_in_build = True
self.fake_gitlab.emitEvent(A.getMergeRequestOpenedEvent())
self.waitUntilSettled()
self.fake_gitlab.emitEvent(A.getMergeRequestUpdatedEvent())
mr_tip2_sha = A.sha
self.waitUntilSettled()
self.executor_server.hold_jobs_in_build = False
self.executor_server.release()
self.waitUntilSettled()
self.assertHistory(
[
{'name': 'project-test1', 'result': 'ABORTED',
'changes': '1,%s' % mr_tip1_sha},
{'name': 'project-test2', 'result': 'ABORTED',
'changes': '1,%s' % mr_tip1_sha},
{'name': 'project-test1', 'changes': '1,%s' % mr_tip2_sha},
{'name': 'project-test2', 'changes': '1,%s' % mr_tip2_sha}
], ordered=False
)
@simple_layout('layouts/basic-gitlab.yaml', driver='gitlab')
def test_merge_request_commented(self):

View File

@ -195,7 +195,7 @@ class GitlabEventConnector(threading.Thread):
project = self.connection.source.getProject(event.project_name)
self.connection._getChange(project,
event.change_number,
event.patch_number,
patchset=event.patch_number,
refresh=True,
url=event.change_url,
event=event)
@ -383,7 +383,7 @@ class GitlabConnection(BaseConnection):
self.log.info("Getting change for %s#%s" % (
project, event.change_number))
change = self._getChange(
project, event.change_number, event.patch_number,
project, event.change_number, patchset=event.patch_number,
refresh=refresh, event=event)
change.source_event = event
change.is_current_patchset = (change.patchset ==

View File

@ -20,6 +20,7 @@ EMPTY_GIT_REF = '0' * 40 # git sha of all zeros, used during creates/deletes
class MergeRequest(Change):
def __init__(self, project):
super(MergeRequest, self).__init__(project)
self.updated_at = None
@ -67,7 +68,7 @@ class GitlabTriggerEvent(TriggerEvent):
return ' '.join(r)
def isPatchsetCreated(self):
if self.type == 'gl_pull_request':
if self.type == 'gl_merge_request':
return self.action in ['opened', 'changed']
return False