From 7451a94358a0dc9a708780da0b883d3bf8169d7d Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 8 Jun 2018 13:04:34 +0200 Subject: [PATCH] [IMP] runbot_merge: PR source branch/label handling Remote's labels are not entirely under our control as the part before ":" is the *owner* of the source repo => introduce additional "owned" fixture to handle this case, as it may diverge from the "user" role if running the tests against an organisation. --- runbot_merge/tests/fake_github/__init__.py | 2 +- runbot_merge/tests/local.py | 4 ++++ runbot_merge/tests/test_basic.py | 14 +++++++------- runbot_merge/tests/test_multirepo.py | 9 ++++----- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/runbot_merge/tests/fake_github/__init__.py b/runbot_merge/tests/fake_github/__init__.py index a435ffc2..5ff1b331 100644 --- a/runbot_merge/tests/fake_github/__init__.py +++ b/runbot_merge/tests/fake_github/__init__.py @@ -104,7 +104,7 @@ class Repo(object): def make_pr(self, title, body, target, ctid, user, label=None): assert 'heads/%s' % target in self.refs - return PR(self, title, body, target, ctid, user=user, label=label or '{}:{}'.format(user, target)) + return PR(self, title, body, target, ctid, user=user, label='{}:{}'.format(user, label or target)) def make_ref(self, name, commit, force=False): assert isinstance(self.objects[commit], Commit) diff --git a/runbot_merge/tests/local.py b/runbot_merge/tests/local.py index 0527b5bc..da3c2f08 100644 --- a/runbot_merge/tests/local.py +++ b/runbot_merge/tests/local.py @@ -44,6 +44,10 @@ def env(registry): cr.rollback() +@pytest.fixture +def owner(): + return 'user' + @pytest.fixture(autouse=True) def users(env): env['res.partner'].create({ diff --git a/runbot_merge/tests/test_basic.py b/runbot_merge/tests/test_basic.py index fd3d8189..957b6dc0 100644 --- a/runbot_merge/tests/test_basic.py +++ b/runbot_merge/tests/test_basic.py @@ -886,7 +886,7 @@ class TestBatching(object): for i, t in enumerate(trees): tree.update(t) c = repo.make_commit(c, 'commit_{}_{:02}'.format(prefix, i), None, tree=dict(tree)) - pr = repo.make_pr('title {}'.format(prefix), 'body {}'.format(prefix), target=target, ctid=c, user=user, label='{}:{}'.format(user, prefix)) + pr = repo.make_pr('title {}'.format(prefix), 'body {}'.format(prefix), target=target, ctid=c, user=user, label=prefix) for context, result in statuses: repo.post_status(c, result, context) @@ -927,8 +927,8 @@ class TestBatching(object): pr21 = self._pr(repo, 'PR1', [{'a': 'AAA'}, {'b': 'BBB'}]) pr22 = self._pr(repo, 'PR2', [{'c': 'CCC'}, {'d': 'DDD'}]) - pr11 = self._pr(repo, 'Pressing 1', [{'x': 'x'}, {'y': 'y'}]) - pr12 = self._pr(repo, 'Pressing 2', [{'z': 'z'}, {'zz': 'zz'}]) + pr11 = self._pr(repo, 'Pressing1', [{'x': 'x'}, {'y': 'y'}]) + pr12 = self._pr(repo, 'Pressing2', [{'z': 'z'}, {'zz': 'zz'}]) pr11.post_comment('hansen priority=1', 'reviewer') pr12.post_comment('hansen priority=1', 'reviewer') @@ -952,8 +952,8 @@ class TestBatching(object): pr21 = self._pr(repo, 'PR1', [{'a': 'AAA'}, {'b': 'BBB'}]) pr22 = self._pr(repo, 'PR2', [{'c': 'CCC'}, {'d': 'DDD'}]) - pr11 = self._pr(repo, 'Pressing 1', [{'x': 'x'}, {'y': 'y'}]) - pr12 = self._pr(repo, 'Pressing 2', [{'z': 'z'}, {'zz': 'zz'}]) + pr11 = self._pr(repo, 'Pressing1', [{'x': 'x'}, {'y': 'y'}]) + pr12 = self._pr(repo, 'Pressing2', [{'z': 'z'}, {'zz': 'zz'}]) pr11.post_comment('hansen priority=1', 'reviewer') pr12.post_comment('hansen priority=1', 'reviewer') @@ -967,7 +967,7 @@ class TestBatching(object): staging_1 = p_11.staging_id # no statuses run on PR0s - pr01 = self._pr(repo, 'Urgent 1', [{'n': 'n'}, {'o': 'o'}], reviewer=None, statuses=[]) + pr01 = self._pr(repo, 'Urgent1', [{'n': 'n'}, {'o': 'o'}], reviewer=None, statuses=[]) pr01.post_comment('hansen priority=0', 'reviewer') p_01 = self._get(env, repo, pr01.number) assert p_01.state == 'opened' @@ -1025,7 +1025,7 @@ class TestBatching(object): p_21 = self._get(env, repo, pr21.number) # no statuses run on PR0s - pr01 = self._pr(repo, 'Urgent 1', [{'n': 'n'}, {'o': 'o'}], reviewer=None, statuses=[]) + pr01 = self._pr(repo, 'Urgent1', [{'n': 'n'}, {'o': 'o'}], reviewer=None, statuses=[]) pr01.post_comment('hansen priority=0', 'reviewer') p_01 = self._get(env, repo, pr01.number) p_01.state = 'error' diff --git a/runbot_merge/tests/test_multirepo.py b/runbot_merge/tests/test_multirepo.py index bea158de..b443a570 100644 --- a/runbot_merge/tests/test_multirepo.py +++ b/runbot_merge/tests/test_multirepo.py @@ -42,8 +42,7 @@ def make_pr(repo, prefix, trees, *, target='master', user='user', label=None, tree.update(t) c = repo.make_commit(c, 'commit_{}_{:02}'.format(prefix, i), None, tree=dict(tree)) - pr = repo.make_pr('title {}'.format(prefix), 'body {}'.format(prefix), target=target, - ctid=c, user=user, label=label and '{}:{}'.format(user, label)) + pr = repo.make_pr('title {}'.format(prefix), 'body {}'.format(prefix), target=target, ctid=c, user=user, label=label) for context, result in statuses: repo.post_status(c, result, context) if reviewer: @@ -221,7 +220,7 @@ def test_ff_fail(env, project, repo_a, repo_b): assert len(st) == 1 assert len(st.batch_ids.prs) == 2 -def test_one_failed(env, project, repo_a, repo_b): +def test_one_failed(env, project, repo_a, repo_b, owner): """ If the companion of a ready branch-matched PR is not ready, they should not get staged """ @@ -236,7 +235,7 @@ def test_one_failed(env, project, repo_a, repo_b): c_pr = repo_b.make_commit(c_b, 'pr', None, tree={'a': 'b_1'}) pr_b = repo_b.make_pr( 'title', 'body', target='master', ctid=c_pr, - user='user', label='user:do-a-thing', + user='user', label='do-a-thing', ) repo_b.post_status(c_pr, 'success', 'ci/runbot') repo_b.post_status(c_pr, 'success', 'legal/cla') @@ -245,7 +244,7 @@ def test_one_failed(env, project, repo_a, repo_b): pr_b = to_pr(env, pr_b) assert pr_a.state == 'ready' assert pr_b.state == 'validated' - assert pr_a.label == pr_b.label == 'user:do-a-thing' + assert pr_a.label == pr_b.label == '{}:do-a-thing'.format(owner) env['runbot_merge.project']._check_progress()