From 02d85ad5234871e5fb7f8bf73cd1e7aa7725f110 Mon Sep 17 00:00:00 2001 From: xmo-odoo Date: Mon, 26 Aug 2019 13:41:33 +0200 Subject: [PATCH] [FIX] runbot_merge: less restrictive commands matching Fixes #167 ignores casing when matching bot name Fixes #168 ignores leading whitespace when matching commands lines --- runbot_merge/models/pull_requests.py | 4 +-- runbot_merge/tests/test_basic.py | 41 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/runbot_merge/models/pull_requests.py b/runbot_merge/models/pull_requests.py index 696036e0..540edc13 100644 --- a/runbot_merge/models/pull_requests.py +++ b/runbot_merge/models/pull_requests.py @@ -165,8 +165,8 @@ class Project(models.Model): def _find_commands(self, comment): return re.findall( - '^[@|#]?{}:? (.*)$'.format(self.github_prefix), - comment, re.MULTILINE) + '^\s*[@|#]?{}:? (.*)$'.format(self.github_prefix), + comment, re.MULTILINE | re.IGNORECASE) def _has_branch(self, name): self.env.cr.execute(""" diff --git a/runbot_merge/tests/test_basic.py b/runbot_merge/tests/test_basic.py index 49fc7050..3adbce71 100644 --- a/runbot_merge/tests/test_basic.py +++ b/runbot_merge/tests/test_basic.py @@ -2336,6 +2336,47 @@ class TestUnknownPR: (users['user'], "I'm sorry. Branch `branch` is not within my remit."), ] +class TestRecognizeCommands: + @pytest.mark.parametrize('botname', ['hansen', 'Hansen', 'HANSEN', 'HanSen', 'hAnSeN']) + def test_botname_casing(self, repo, env, botname): + """ Test that the botname is case-insensitive as people might write + bot names capitalised or titlecased or uppercased or whatever + """ + m = repo.make_commit(None, 'initial', None, tree={'m': 'm'}) + repo.make_ref('heads/master', m) + + c = repo.make_commit(m, 'first', None, tree={'m': 'c'}) + prx = repo.make_pr('title', None, target='master', ctid=c, user='user') + + pr = env['runbot_merge.pull_requests'].search([ + ('repository.name', '=', repo.name), + ('number', '=', prx.number), + ]) + assert pr.state == 'opened' + + prx.post_comment('%s r+' % botname, 'reviewer') + assert pr.state == 'approved' + + @pytest.mark.parametrize('indent', ['', '\N{SPACE}', '\N{SPACE}'*4, '\N{TAB}']) + def test_botname_indented(self, repo, env, indent): + """ matching botname should ignore leading whitespaces + """ + + m = repo.make_commit(None, 'initial', None, tree={'m': 'm'}) + repo.make_ref('heads/master', m) + + c = repo.make_commit(m, 'first', None, tree={'m': 'c'}) + prx = repo.make_pr('title', None, target='master', ctid=c, user='user') + + pr = env['runbot_merge.pull_requests'].search([ + ('repository.name', '=', repo.name), + ('number', '=', prx.number), + ]) + assert pr.state == 'opened' + + prx.post_comment('%shansen r+' % indent, 'reviewer') + assert pr.state == 'approved' + class TestRMinus: def test_rminus_approved(self, repo, env): """ approved -> r- -> opened