def test_pull_request_with_label(self): label_name = "test label" pull_request = build(builder.pull_request().label( builder.label().name(label_name))) self.assertTrue( github_logic.pull_request_has_label(pull_request, label_name))
def test_noop_if_feature_not_enabled(self, add_pr_comment_mock, edit_pr_title_mock): pull_request = build(builder.pull_request().label(builder.label().name( github_logic.AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value))) github_logic.maybe_add_automerge_warning_comment(pull_request) add_pr_comment_mock.assert_not_called()
def test_is_pull_request_ready_for_automerge_after_tests_no_review(self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_SUCCESSFUL) ).title("blah blah [shipit]").mergeable( MergeableState.MERGEABLE).merged(False).label(builder.label().name( github_logic.AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_is_pull_request_ready_for_automerge_no_automerge_label(self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_SUCCESSFUL)).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.APPROVED)).mergeable( MergeableState.MERGEABLE).merged(False).label( builder.label().name("random label"))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_does_not_add_warning_comment_if_label_does_not_require_approval( self, add_pr_comment_mock, edit_pr_title_mock): pull_request = build(builder.pull_request().title( self.SAMPLE_PR_TITLE).label(builder.label().name( github_logic.AutomergeLabel.AFTER_TESTS.value))) github_logic.maybe_add_automerge_warning_comment(pull_request) add_pr_comment_mock.assert_not_called()
def test_is_pull_request_ready_for_automerge_immediately_conflicting(self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_FAILED)).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.CHANGES_REQUESTED)).mergeable( MergeableState.CONFLICTING).merged(False).label( builder.label().name(github_logic.AutomergeLabel. IMMEDIATELY.value))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_is_pull_request_ready_for_automerge_after_tests(self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_SUCCESSFUL)).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.CHANGES_REQUESTED)).mergeable( MergeableState.MERGEABLE).merged(False).label( builder.label().name(github_logic.AutomergeLabel. AFTER_TESTS.value))) self.assertTrue( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_is_pull_request_ready_for_automerge_build_pending(self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_PENDING)).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.APPROVED)).mergeable( MergeableState.MERGEABLE).merged(False).label( builder.label().name(github_logic.AutomergeLabel. AFTER_TESTS.value))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_false_if_feature_not_enabled(self): pull_request = build( builder.pull_request() .merged(True) .label( builder.label().name( asana_logic.AutocompleteLabel.COMPLETE_ON_MERGE.value ) ) ) self.assertFalse(asana_logic.should_autocomplete_tasks_on_merge(pull_request))
def test_true_if_should_autocomplete(self): pull_request = build( builder.pull_request() .merged(True) .label( builder.label().name( asana_logic.AutocompleteLabel.COMPLETE_ON_MERGE.value ) ) ) self.assertTrue(asana_logic.should_autocomplete_tasks_on_merge(pull_request))
def test_is_pull_request_ready_for_automerge_after_tests_mergeable_is_false( self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_SUCCESSFUL)).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.APPROVED)).mergeable( MergeableState.CONFLICTING).merged(False).label( builder.label().name(github_logic.AutomergeLabel. AFTER_TESTS.value))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_is_pull_request_ready_for_automerge_autofail_if_merged(self): pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_SUCCESSFUL)).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.APPROVED)).mergeable( MergeableState.MERGEABLE).merged(True).closed( False).label(builder.label().name( github_logic.AutomergeLabel. AFTER_TESTS_AND_APPROVAL.value))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_is_pull_request_ready_for_automerge_after_approval(self): pull_request = build( builder.pull_request().commit( builder.commit().status(Commit.BUILD_PENDING) ) # build hasn't finished, but PR is approved .review(builder.review().submitted_at( "2020-01-13T14:59:58Z").state(ReviewState.APPROVED)).mergeable( MergeableState.MERGEABLE).merged(False).label( builder.label().name( github_logic.AutomergeLabel.AFTER_APPROVAL.value))) self.assertTrue( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_does_not_add_warning_comment_if_pr_is_approved( self, add_pr_comment_mock, edit_pr_title_mock): pull_request = build(builder.pull_request().title( self.SAMPLE_PR_TITLE).label(builder.label().name( github_logic.AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value )).review( builder.review().submitted_at("2020-01-13T14:59:58Z").state( ReviewState.APPROVED))) github_logic.maybe_add_automerge_warning_comment(pull_request) add_pr_comment_mock.assert_not_called()
def test_does_not_add_warning_if_has_label_and_already_has_warning_in_comments( self, add_pr_comment_mock, edit_pr_title_mock): pull_request = build(builder.pull_request().comments([ builder.comment().author( builder.user("github_unknown_user_login")).body( github_logic.AUTOMERGE_COMMENT_WARNING) ]).label(builder.label().name( github_logic.AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value))) github_logic.maybe_add_automerge_warning_comment(pull_request) edit_pr_title_mock.assert_not_called() add_pr_comment_mock.assert_not_called()
def test_is_pull_request_ready_for_automerge_after_approval_approved_and_requested_changes( self, ): author_1 = builder.user().login("author_1") author_2 = builder.user().login("author_2") pull_request = build(builder.pull_request().commit( builder.commit().status(Commit.BUILD_SUCCESSFUL)).reviews([ builder.review().submitted_at("2020-01-11T14:59:58Z").state( ReviewState.CHANGES_REQUESTED).author(author_1), builder.review().submitted_at("2020-01-12T14:59:58Z").state( ReviewState.APPROVED).author(author_2), ]).mergeable(MergeableState.MERGEABLE).merged(False).label( builder.label().name(github_logic.AutomergeLabel. AFTER_TESTS_AND_APPROVAL.value))) self.assertFalse( github_logic._is_pull_request_ready_for_automerge(pull_request))
def test_adds_warnings_if_label_and_no_warning_in_comments( self, add_pr_comment_mock, edit_pr_title_mock): for label in [ github_logic.AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value, github_logic.AutomergeLabel.AFTER_APPROVAL.value, ]: pull_request = build(builder.pull_request().title( self.SAMPLE_PR_TITLE).label(builder.label().name(label))) github_logic.maybe_add_automerge_warning_comment(pull_request) add_pr_comment_mock.assert_called_with( pull_request.repository_owner_handle(), pull_request.repository_name(), pull_request.number(), github_logic.AUTOMERGE_COMMENT_WARNING, )