Example #1
0
def do_merge_pull_request(pr, build_number, config):
    """The given pull build passed and needs to be merged.

    """
    github_info = GithubInfo(
        config['github.owner'],
        config['github.project'],
        config['github.username'],
        config['github.token'],
    )
    jenkins_info = JenkinsInfo(
        config['jenkins.merge.url'],
        config['jenkins.merge.job'],
        config['jenkins.merge.token'],
    )

    build_url = generate_build_url(build_number, jenkins_info)
    try:
        result = merge_pull_request(pr, build_url, github_info)
        if result['merged']:
            return result['message']
        else:
            raise GithubError('Failed to merge: {0}'.format(result['message']))
    except GithubError as exc:
        return 'Failed to add comment: {0}'.format(exc)
    def test_merge_pull_request_fails(self):
        merge_response = load_data('github-merge-failed.json')
        pulls = load_data('github-open-pulls.json', load_json=True)
        pull_request = pulls[0]

        responses.add(
            responses.GET,
            'https://api.github.com/repos/CanonicalJS/juju-gui/pulls/4',
            body=json.dumps(pull_request),
            status=200,
            content_type='application/json'
        )

        responses.add(
            responses.PUT,
            'https://api.github.com/repos/CanonicalJS/juju-gui/pulls/4/merge',
            body=merge_response,
            status=405,
            content_type='application/json'
        )

        info = GithubInfo('CanonicalJS', 'juju-gui', 'jujugui', None)
        result = merge_pull_request(
            4,
            'http://jenkins.com/job/gui/12',
            info
        )

        self.assertEqual(False, result['merged'])
        self.assertEqual("Failure reason", result['message'])