def test_bless_pr(): mq = MergeQueue(FakeGHRepo()) mq.ask_pr(12) mq.bless_pr(12) assert mq.queue[0].blessed with pytest.raises(MergeQueueException): mq.bless_pr(13)
def test_bump_pr(): mq = MergeQueue(FakeGHRepo()) mq.ask_pr(12) mq.ask_pr(13) assert mq.queue[0].nb == 12 with pytest.raises(MergeQueueException): mq.bump_pr(13) mq.bless_pr(13) mq.bump_pr(13) assert mq.queue[0].nb == 13 assert mq.queue[1].nb == 12 assert mq.pulled_prs[0] == 13 with pytest.raises(MergeQueueException): mq.bump_pr(14)
def test_check_merged_by_errbot(): pr_14 = FakeGHPullRequest(14, reviews=[FakeGHReview('user1', APPROVED)]) repo = FakeGHRepo(injected_prs=[pr_14]) mq = MergeQueue(repo) mq.ask_pr(14) transitions = list(mq.check()) assert len(transitions) == 0 # nothing changed so nothing should happen pr_14.mergeable_state = CLEAN pr_14.mergeable = True transitions = list(mq.check()) assert len(transitions) == 1 pr, [(transition, params)] = transitions[0] assert transition == PRTransition.NOW_MERGEABLE # PR is not blessed so nothing else should happen mq.bless_pr(14) transitions = list(mq.check()) assert len(transitions) == 1 assert pr_14.asked_to_be_merged pr, [(transition, params)] = transitions[0] assert transition == PRTransition.MERGING
def test_reviews(): pr_1 = FakeGHPullRequest(1, reviews=[FakeGHReview('user1', APPROVED)], mergeable_state=CLEAN) repo = FakeGHRepo(injected_prs=[pr_1]) mq = MergeQueue(repo, max_pulled_prs=2) mq.ask_pr(1) mq.bless_pr(1) transitions = list(mq.check()) assert len(transitions) == 0 pr_1.add_review(FakeGHReview('user1', COMMENTED)) transitions = list(mq.check()) assert len(transitions) == 0 pr_1.add_review(FakeGHReview('user1', REQUEST_CHANGES)) transitions = list(mq.check()) assert len(transitions) == 1 pr, review_transitions = transitions[0] assert review_transitions[0] == (PRTransition.GOT_POSITIVE, 0) assert review_transitions[1] == (PRTransition.GOT_NEGATIVE, 1)
def test_check_queue_depth(): pr_14 = FakeGHPullRequest(14, reviews=[FakeGHReview('user1', APPROVED)], mergeable_state=BEHIND) pr_15 = FakeGHPullRequest(15, reviews=[FakeGHReview('user2', APPROVED)], mergeable_state=BEHIND) pr_16 = FakeGHPullRequest(16, reviews=[FakeGHReview('user2', APPROVED)], mergeable_state=BEHIND) repo = FakeGHRepo(injected_prs=[pr_15, pr_14, pr_16]) mq = MergeQueue(repo, max_pulled_prs=2) mq.ask_pr(14) mq.ask_pr(15) mq.ask_pr(16) transitions = list(mq.check()) assert len(transitions) == 0 # nothing changed so nothing should happen mq.bless_pr(14) mq.bless_pr(15) mq.bless_pr(16) # It should pull the base branch only on 14 and 15 transitions = list(mq.check()) assert len(transitions) == 2 for pr, trs in transitions: assert trs[0][0] == PRTransition.PULLED assert trs[1][0] == PRTransition.PULLED_SUCCESS # Lets say the first one worked pr_14.mergeable_state = CLEAN pr_14.mergeable = True # Second time around it merge the one mergeable. transitions = list(mq.check()) assert len(transitions) == 2 for pr, trs in transitions: if pr.nb == 14: assert trs[0][0] == PRTransition.NOW_MERGEABLE and trs[1][ 0] == PRTransition.MERGING assert pr_14.asked_to_be_merged pr_14.merged = True # PR has been merged pr_15.mergeable_state = BLOCKED # CI still catching up # Third time around as a slot has been freed up, it should pull the last one. transitions = list(mq.check()) assert len(transitions) == 2 for pr, trs in transitions: if pr.nb == 14: assert trs[0][0] == PRTransition.MERGED elif pr.nb == 16: assert trs[0][0] == PRTransition.PULLED and trs[1][ 0] == PRTransition.PULLED_SUCCESS assert len(mq.pulled_prs) == 2 pr_15.mergeable_state = DIRTY transitions = list(mq.check()) assert len(transitions) == 1 assert len(mq.pulled_prs) == 1