def test_hook_accept_revision_request_request_notify_owner_non_existing_sender(
        accept_revision_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_review_requests_collection',
                 return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_one({
        "_id": 5763345,
        "slack": {
            "user_id": "user1ID",
            "user_name": "user2",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 5763345,
            "user_name": "user2",
            "name": "User 2 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    })

    mocker.patch('repository._get_users_collection',
                 return_value=user_collection)

    slack_response = {'ts': '111111', 'channel': 'faf3as'}
    mock_post = mocker.patch('requests.post',
                             return_value=MockResponse(
                                 200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(accept_revision_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    mock_post.assert_called_with(
        'https://slack.com/api/chat.postMessage',
        json.dumps({
            'channel': 'user1ID',
            # pylint: disable=C0301
            'text':
            'user1 approved [testrepo#2] <https://github.com/user1/testrepo/pull/2|WIP>',
            "unfurl_links": False,
            "unfurl_media": False,
            "attachments": []
        }),
        headers={
            'Authorization': f'Bearer asdfasdfae3fasfas',
            "Content-Type": "application/json"
        })
Example #2
0
def test_hook_create_comment_request(create_comment_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_review_requests_collection',
                 return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_one({
        "_id": 3452345,
        "slack": {
            "user_id": "faf3as",
            "user_name": "user1",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 3452345,
            "user_name": "user1",
            "name": "User 1 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    })

    mocker.patch('repository._get_users_collection',
                 return_value=user_collection)

    comment_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_comment_collection',
                 return_value=comment_collection)

    slack_response = {'ts': '111111', 'channel': 'faf3as'}
    mock_post = mocker.patch('requests.post',
                             return_value=MockResponse(
                                 200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(create_comment_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    mock_post.assert_not_called()
    assert comment_collection.count_documents({}) == 1

    cursor = comment_collection.find()
    assert cursor[0] == {
        '_id': '425445400:432885618',
        'comment_id': 432885618,
        'user_id': 5763345,
        'pull_request': 425445400
    }
Example #3
0
def test_hook_issue_comment_by_bot_request(issue_bot_comment_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_review_requests_collection',
                 return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_many([{
        "_id": 1234,
        "slack": {
            "user_id": "user1ID",
            "user_name": "user1",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 1234,
            "user_name": "user1",
            "name": "User 1 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }])

    mocker.patch('repository._get_users_collection',
                 return_value=user_collection)

    comment_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_comment_collection',
                 return_value=comment_collection)

    slack_response = {'ts': '111111', 'channel': 'faf3as'}
    mock_post = mocker.patch('requests.post',
                             return_value=MockResponse(
                                 200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(issue_bot_comment_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    assert comment_collection.count_documents({}) == 0

    mock_post.assert_not_called()
Example #4
0
def test_request_changes_revision_request(request_changes_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    review_requests_collection.insert_one({
        '_id': '425445400:3452345',
        'ts': '111111',
        'channel': 'faf3as',
        'message': 'user2 requested your review on [testrepo#2]',
        'user': 3452345,
        'pull_request': 425445400
    })

    mocker.patch(
        'repository._get_review_requests_collection',
        return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_one({
        "_id": 3452345,
        "slack": {
            "user_id": "faf3as",
            "user_name": "user1",
            "response_url": "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 3452345,
            "user_name": "user1",
            "name": "User 1 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    })

    mocker.patch(
        'repository._get_users_collection',
        return_value=user_collection)

    slack_response = {
        'ts': '111111',
        'channel': 'faf3as'
    }
    mock_post = mocker.patch('requests.post', return_value=MockResponse(
        200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(request_changes_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    mock_post.assert_called_with(
        'https://slack.com/api/chat.update',
        json.dumps(
            {
                'channel': 'faf3as',
                "ts": "111111",
                'text': 'user2 requested your review on [testrepo#2]',
                "unfurl_links": False,
                "unfurl_media": False,
            }),
        headers={
            'Authorization': f'Bearer asdfasdfae3fasfas',
            "Content-Type": "application/json"})
Example #5
0
def test_hook_non_existing_action_request(non_existing_event):

    ret = github_webhook.lambda_handler(non_existing_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'
Example #6
0
def test_hook_initial_request(initial_event):

    ret = github_webhook.lambda_handler(initial_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'
Example #7
0
def test_hook_issue_comment_request(issue_comment_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_review_requests_collection',
                 return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_many([{
        "_id": 1234,
        "slack": {
            "user_id": "user1ID",
            "user_name": "user1",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 1234,
            "user_name": "user1",
            "name": "User 1 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }, {
        "_id": 9876,
        "slack": {
            "user_id": "user2ID",
            "user_name": "user2",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 9876,
            "user_name": "user2",
            "name": "User 2 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }])

    mocker.patch('repository._get_users_collection',
                 return_value=user_collection)

    comment_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_comment_collection',
                 return_value=comment_collection)

    slack_response = {'ts': '111111', 'channel': 'faf3as'}
    mock_post = mocker.patch('requests.post',
                             return_value=MockResponse(
                                 200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(issue_comment_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    assert comment_collection.count_documents({}) == 0

    mock_post.assert_called_with(
        'https://slack.com/api/chat.postMessage',
        json.dumps({
            'channel':
            'user2ID',
            # pylint: disable=C0301
            'text':
            '<@user1ID> commented on [testpull#9] <https://github.com/user1/testpull/pull/9#issuecomment-640189447|Update README2.md>',
            "unfurl_links":
            False,
            "unfurl_media":
            False,
            "attachments": [{
                "color": "#355C7D",
                "text": "<@user1ID>: hello world 6"
            }]
        }),
        headers={
            'Authorization': f'Bearer asdfasdfae3fasfas',
            "Content-Type": "application/json"
        })
Example #8
0
def test_hook_create_comment_request_with_repply_and_existing_repplier(
        repply_comment_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    mocker.patch('repository._get_review_requests_collection',
                 return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_many([{
        "_id": 123433,
        "slack": {
            "user_id": "user1ID",
            "user_name": "user1",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 123433,
            "user_name": "user1",
            "name": "User 1 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }, {
        "_id": 5763345,
        "slack": {
            "user_id": "user2ID",
            "user_name": "user2",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 5763345,
            "user_name": "user2",
            "name": "User 2 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }])

    mocker.patch('repository._get_users_collection',
                 return_value=user_collection)

    comment_collection = mongomock.MongoClient().db.collection

    comment_collection.insert_one({
        '_id': '425445400:9282348923',
        'comment_id': 9282348923,
        'user_id': 123433,
        'pull_request': 425445400
    })

    mocker.patch('repository._get_comment_collection',
                 return_value=comment_collection)

    slack_response = {'ts': '111111', 'channel': 'faf3as'}
    mock_post = mocker.patch('requests.post',
                             return_value=MockResponse(
                                 200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(repply_comment_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    assert comment_collection.count_documents({}) == 2

    cursor = comment_collection.find()
    assert cursor[1] == {
        '_id': '425445400:432885618',
        'comment_id': 432885618,
        'user_id': 5763345,
        'pull_request': 425445400
    }
    mock_post.assert_called_with(
        'https://slack.com/api/chat.postMessage',
        json.dumps({
            'channel':
            'user1ID',
            # pylint: disable=C0301
            'text':
            '<@user2ID> repplied to you in [testrepo#2] <https://github.com/user1/testrepo/pull/2#xxx|WIP>',
            "unfurl_links":
            False,
            "unfurl_media":
            False,
            "attachments": [{
                "color": "#355C7D",
                "text": "<@user2ID>: aas"
            }]
        }),
        headers={
            'Authorization': f'Bearer asdfasdfae3fasfas',
            "Content-Type": "application/json"
        })
Example #9
0
def test_close_pr(close_event, mocker):
    review_requests_collection = mongomock.MongoClient().db.collection

    review_requests_collection.insert_many([{
        '_id': '123412:3452345',
        'ts': '111111',
        'channel': 'chUser1',
        'message': 'user5 requested your review on [testrepo#2]',
        'user': 3452345,
        'pull_request': 123412
    }, {
        '_id': '123412:12345',
        'ts': '22222',
        'channel': 'chUser3',
        'message': 'user5 requested your review on [testrepo#2]',
        'user': 12345,
        'pull_request': 123412
    }, {
        '_id': '123412:412341234',
        'ts': '22222',
        'channel': 'chUser2',
        'message': 'user5 requested your review on [testrepo#2]',
        'user': 412341234,
        'pull_request': 123412
    }, {
        '_id': '52345234:235234523',
        'ts': '22222',
        'channel': 'chUser2',
        'message': 'user5 requested your review on [testrepo#5]',
        'user': 235234523,
        'pull_request': 52345234
    }])

    mocker.patch('repository._get_review_requests_collection',
                 return_value=review_requests_collection)

    user_collection = mongomock.MongoClient().db.collection

    user_collection.insert_many([{
        "_id": 3452345,
        "slack": {
            "user_id": "user1id",
            "user_name": "user1",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 3452345,
            "user_name": "user1",
            "name": "User 1 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }, {
        "_id": 412341234,
        "slack": {
            "user_id": "user2id",
            "user_name": "user2",
            "response_url":
            "https://hooks.slack.com/commands/asdfasdf/asfasdf/qweqf",
            "team_domain": "test"
        },
        "github": {
            "id": 412341234,
            "user_name": "user2",
            "name": "User 2 Name",
            "access_token": "ahtawtewerg",
            "refresh_token": "anshttsetges"
        }
    }])

    mocker.patch('repository._get_users_collection',
                 return_value=user_collection)

    comments_collection = mongomock.MongoClient().db.collection
    comments_collection.insert_many([{
        '_id': '1234:123412',
        'comment_id': 1234,
        'user_id': 1234,
        'pull_request': 123412
    }, {
        '_id': '9876:123412',
        'comment_id': 9876,
        'user_id': 1234,
        'pull_request': 123412
    }, {
        '_id': '34563:1412',
        'comment_id': 34563,
        'user_id': 1234,
        'pull_request': 1412
    }])

    mocker.patch('repository._get_comment_collection',
                 return_value=comments_collection)

    slack_response = {'ts': '111111', 'channel': 'faf3as'}
    mock_post = mocker.patch('requests.post',
                             return_value=MockResponse(
                                 200, json.dumps(slack_response)))

    ret = github_webhook.lambda_handler(close_event, "")

    assert ret["statusCode"] == 200
    assert ret["body"] == 'ok'

    call2 = call('https://slack.com/api/chat.update',
                 json.dumps({
                     'channel': 'chUser2',
                     'ts': '22222',
                     'text': '~user5 requested your review on [testrepo#2]~',
                     "unfurl_links": False,
                     "unfurl_media": False
                 }),
                 headers={
                     'Authorization': f'Bearer asdfasdfae3fasfas',
                     "Content-Type": "application/json"
                 })

    call1 = call('https://slack.com/api/chat.update',
                 json.dumps({
                     'channel': 'chUser1',
                     'ts': '111111',
                     'text': '~user5 requested your review on [testrepo#2]~',
                     "unfurl_links": False,
                     "unfurl_media": False
                 }),
                 headers={
                     'Authorization': f'Bearer asdfasdfae3fasfas',
                     "Content-Type": "application/json"
                 })

    assert mock_post.call_count == 2
    mock_post.assert_has_calls([call1, call2])

    assert review_requests_collection.count_documents({}) == 1
    assert comments_collection.count_documents({}) == 1