예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
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
예제 #5
0
파일: test_queries.py 프로젝트: wuub/kodiak
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
        ),
    ]
예제 #6
0
파일: test_queries.py 프로젝트: wuub/kodiak
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"),
    ]