diff --git a/tests/base.py b/tests/base.py index 1a1188c746..c9a5c9150a 100644 --- a/tests/base.py +++ b/tests/base.py @@ -553,7 +553,23 @@ class FakeGerritChange(object): "reason": ""} return event - def getChangeCommentEvent(self, patchset): + def getChangeCommentEvent(self, patchset, comment=None, + patchsetcomment=None): + if comment is None and patchsetcomment is None: + comment = "Patch Set %d:\n\nThis is a comment" % patchset + elif comment: + comment = "Patch Set %d:\n\n%s" % (patchset, comment) + else: # patchsetcomment is not None + comment = "Patch Set %d:\n\n(1 comment)" % patchset + + commentevent = {"comment": comment} + if patchsetcomment: + commentevent.update( + {'patchSetComments': + {"/PATCHSET_LEVEL": [{"message": patchsetcomment}]} + } + ) + event = {"type": "comment-added", "change": {"project": self.project, "branch": self.branch, @@ -566,8 +582,8 @@ class FakeGerritChange(object): "author": {"name": "User Name"}, "approvals": [{"type": "Code-Review", "description": "Code-Review", - "value": "0"}], - "comment": "This is a comment"} + "value": "0"}]} + event.update(commentevent) return event def getChangeMergedEvent(self): diff --git a/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml b/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml index 897bc05e24..c9c0ee6466 100644 --- a/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml +++ b/tests/fixtures/config/single-tenant/git/common-config/zuul.yaml @@ -4,6 +4,8 @@ trigger: gerrit: - event: patchset-created + - event: comment-added + comment: '^(Patch Set [0-9]+:\n\n)?(?i:recheck)$' success: gerrit: Verified: 1 diff --git a/tests/unit/test_gerrit.py b/tests/unit/test_gerrit.py index bbc8cf455b..ab090cbc01 100644 --- a/tests/unit/test_gerrit.py +++ b/tests/unit/test_gerrit.py @@ -228,6 +228,31 @@ class TestGerritWeb(ZuulTestCase): self.assertEqual([], tested_change_ids) + def test_recheck(self): + A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A') + self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1)) + self.waitUntilSettled() + self.assertEqual(3, len(self.history)) + + self.fake_gerrit.addEvent(A.getChangeCommentEvent(1)) + self.waitUntilSettled() + self.assertEqual(3, len(self.history)) + + self.fake_gerrit.addEvent(A.getChangeCommentEvent(1, + 'recheck')) + self.waitUntilSettled() + self.assertEqual(6, len(self.history)) + + self.fake_gerrit.addEvent(A.getChangeCommentEvent(1, + patchsetcomment='recheck')) + self.waitUntilSettled() + self.assertEqual(9, len(self.history)) + + self.fake_gerrit.addEvent(A.getChangeCommentEvent(1, + patchsetcomment='do not recheck')) + self.waitUntilSettled() + self.assertEqual(9, len(self.history)) + class TestFileComments(AnsibleZuulTestCase): config_file = 'zuul-gerrit-web.conf' diff --git a/zuul/driver/gerrit/gerritconnection.py b/zuul/driver/gerrit/gerritconnection.py index f5db9b37e0..277193d076 100644 --- a/zuul/driver/gerrit/gerritconnection.py +++ b/zuul/driver/gerrit/gerritconnection.py @@ -186,6 +186,13 @@ class GerritEventConnector(threading.Thread): event.ref = patchset.get('ref') event.approvals = data.get('approvals', []) event.comment = data.get('comment') + patchsetcomments = data.get('patchSetComments', {}).get( + "/PATCHSET_LEVEL") + if patchsetcomments: + event.patchsetcomments = [] + for patchsetcomment in patchsetcomments: + event.patchsetcomments.append( + patchsetcomment.get('message')) refupdate = data.get('refUpdate') if refupdate: event.project_name = refupdate.get('project') diff --git a/zuul/driver/gerrit/gerritmodel.py b/zuul/driver/gerrit/gerritmodel.py index b1ad85898e..a3d3661a2c 100644 --- a/zuul/driver/gerrit/gerritmodel.py +++ b/zuul/driver/gerrit/gerritmodel.py @@ -160,6 +160,7 @@ class GerritTriggerEvent(TriggerEvent): self.approvals = [] self.uuid = None self.scheme = None + self.patchsetcomments = None def __repr__(self): ret = '