def test_get_merge_body_include_coauthors_invalid_body_style() -> None: """ We only include trailers for MergeBodyStyle.pull_request_body and MergeBodyStyle.empty. Verify we don't add coauthor trailers for MergeBodyStyle.github_default. """ pull_request = create_pull_request() pull_request.body = "hello world" config = create_config() config.merge.message.include_coauthors = True config.merge.message.body = MergeBodyStyle.github_default actual = get_merge_body( config=config, pull_request=pull_request, merge_method=MergeMethod.merge, commits=[ create_commit(database_id=9023904, name="", login="******", type="User"), create_commit(database_id=590434, name="Maeve Millay", login="******", type="Bot"), ], ) expected = MergeBody(merge_method="merge", commit_message=None) assert actual == expected
def test_get_merge_body_include_coauthors_include_pr_author() -> None: """ We should include the pull request author when configured. """ pull_request = create_pull_request() pull_request.body = "hello world" config = create_config() config.merge.message.body = MergeBodyStyle.pull_request_body config.merge.message.include_coauthors = True config.merge.message.include_pull_request_author = True actual = get_merge_body( config=config, merge_method=MergeMethod.merge, pull_request=pull_request, commits=[ create_commit(database_id=9023904, name="Bernard Lowe", login="******", type="User"), # we should ignore a duplicate entry for the PR author when # include_pull_request_author is enabled. create_commit( database_id=pull_request.author.databaseId, name=pull_request.author.name, login=pull_request.author.login, type=pull_request.author.type, ), ], ) expected = MergeBody( merge_method="merge", commit_message= f"hello world\n\nCo-authored-by: {pull_request.author.name} <{pull_request.author.databaseId}+{pull_request.author.login}@users.noreply.github.com>\nCo-authored-by: Bernard Lowe <*****@*****.**>", ) assert actual == expected
async def test_mergeable_include_coauthors() -> None: """ Include coauthors should attach coauthor when `merge.message.body = "pull_request_body"` """ mergeable = create_mergeable() config = create_config() config.merge.message.include_coauthors = True for body_style, commit_message in ( ( MergeBodyStyle.pull_request_body, "# some description\n\nCo-authored-by: Barry Block <*****@*****.**>", ), ( MergeBodyStyle.empty, "Co-authored-by: Barry Block <*****@*****.**>", ), ): config.merge.message.body = body_style api = create_api() await mergeable( api=api, config=config, commits=[ create_commit( database_id=73213123, name="Barry Block", login="******", type="User", ) ], merging=True, ) assert api.set_status.call_count == 2 assert "attempting to merge PR" in api.set_status.calls[0]["msg"] assert api.set_status.calls[1]["msg"] == "merge complete 🎉" assert api.merge.call_count == 1 assert commit_message == api.merge.calls[0]["commit_message"] assert api.update_branch.call_count == 0 assert api.queue_for_merge.call_count == 0 assert api.dequeue.call_count == 0
def test_get_merge_body_include_coauthors() -> None: """ Verify we include coauthor trailers for MergeBodyStyle.pull_request_body. """ pull_request = create_pull_request() pull_request.body = "hello world" config = create_config() config.merge.message.body = MergeBodyStyle.pull_request_body config.merge.message.include_coauthors = True config.merge.message.include_pull_request_author = False actual = get_merge_body( config=config, merge_method=MergeMethod.merge, pull_request=pull_request, commits=[ create_commit(database_id=9023904, name="Bernard Lowe", login="******", type="User"), create_commit(database_id=590434, name="Maeve Millay", login="******", type="Bot"), # we default to the login when name is None. create_commit(database_id=771233, name=None, login="******", type="Bot"), # without a databaseID the commit author will be ignored. create_commit(database_id=None, name=None, login="******", type="User"), # duplicate should be ignored. create_commit(database_id=9023904, name="Bernard Lowe", login="******", type="User"), # merge commits should be ignored. merge commits will have more than # one parent. create_commit( database_id=1, name="Arnold Weber", login="******", type="User", parents=2, ), # pull request author should be ignored when # include_pull_request_author is not enabled create_commit( database_id=pull_request.author.databaseId, name="Joe PR Author", login="******", type="User", ), ], ) expected = MergeBody( merge_method="merge", commit_message= "hello world\n\nCo-authored-by: Bernard Lowe <*****@*****.**>\nCo-authored-by: Maeve Millay <590434+maeve-m[bot]@users.noreply.github.com>\nCo-authored-by: d-abernathy[bot] <771233+d-abernathy[bot]@users.noreply.github.com>", ) assert actual == expected
def test_get_commits_error_handling() -> None: """ We should handle parsing errors without raising an exception. """ pull_request_data = { "commitHistory": { "nodes": [ {"commit": {"parents": {"totalCount": 1}, "author": {"user": None}}}, {"commit": {"parents": {"totalCount": 1}, "author": None}}, { "commit": { "parents": {"totalCount": 3}, "author": { "user": { "name": None, "databaseId": 435453, "login": "******", "type": "Bot", } }, } }, { "commit": { "parents": {"totalCount": 1}, "author": { "user": { "name": "Christopher Dignam", "databaseId": 1929960, "login": "******", "type": "User", } }, } }, { "commit": { "parents": {"totalCount": 2}, "author": { "user": { "name": None, "databaseId": None, "login": "******", "type": "SomeGitActor", } }, } }, ] } } res = get_commits(pr=pull_request_data) assert res == [ Commit(parents=CommitConnection(totalCount=1), author=GitActor(user=None)), Commit(parents=CommitConnection(totalCount=1), author=None), create_commit( name=None, database_id=435453, login="******", type="Bot", parents=3 ), create_commit( name="Christopher Dignam", database_id=1929960, login="******", type="User", parents=1, ), create_commit( name=None, database_id=None, login="******", type="SomeGitActor", parents=2 ), ]
def test_get_commits() -> None: """ Verify we parse commit authors correctly. We should handle the nullability of name and databaseId. """ pull_request_data = { "commitHistory": { "nodes": [ { "commit": { "parents": {"totalCount": 1}, "author": { "user": { "name": "Christopher Dignam", "databaseId": 1929960, "login": "******", "type": "User", } }, } }, { "commit": { "parents": {"totalCount": 1}, "author": { "user": { "name": "b-lowe", "databaseId": 5345234, "login": "******", "type": "User", } }, } }, { "commit": { "parents": {"totalCount": 1}, "author": { "user": { "name": None, "databaseId": 435453, "login": "******", "type": "Bot", } }, } }, {"commit": {"parents": {"totalCount": 1}, "author": {"user": None}}}, { "commit": { "parents": {"totalCount": 1}, "author": { "user": { "name": "Christopher Dignam", "databaseId": 1929960, "login": "******", "type": "User", } }, } }, { "commit": { "parents": {"totalCount": 1}, "author": { "user": { "name": None, "databaseId": None, "login": "******", "type": "SomeGitActor", } }, } }, ] } } res = get_commits(pr=pull_request_data) assert res == [ create_commit( name="Christopher Dignam", database_id=1929960, login="******", type="User" ), create_commit(name="b-lowe", database_id=5345234, login="******", type="User"), create_commit(name=None, database_id=435453, login="******", type="Bot"), Commit(parents=CommitConnection(totalCount=1), author=GitActor(user=None)), create_commit( name="Christopher Dignam", database_id=1929960, login="******", type="User" ), create_commit(name=None, database_id=None, login="******", type="SomeGitActor"), ]