Пример #1
0
def test_payload_content_create_ticket(slack_url_encoded):

    # https://api.slack.com/interactivity/shortcuts/using#message_shortcuts
    # - message short-cuts

    CREATE_TICKET_PAYLOAD = "payload=%7B%22type%22%3A%22message_action%22%2C%22token%22%3A%22abIXST3MY2dOo9KyqrPyY0l9%22%2C%22action_ts%22%3A%221591302360.305165%22%2C%22team%22%3A%7B%22id%22%3A%22T04HY6K21%22%2C%22domain%22%3A%22compeat%22%7D%2C%22user%22%3A%7B%22id%22%3A%22UPG49L0TH%22%2C%22name%22%3A%22douglas.norment%22%2C%22username%22%3A%22douglas.norment%22%2C%22team_id%22%3A%22T04HY6K21%22%7D%2C%22channel%22%3A%7B%22id%22%3A%22D014R1SRSSZ%22%2C%22name%22%3A%22directmessage%22%7D%2C%22callback_id%22%3A%22create-ticket-from-slack-msg%22%2C%22trigger_id%22%3A%221178280893905.4610223069.9aafb644573a581f3251c8f1cff8008d%22%2C%22message_ts%22%3A%221591301772.000200%22%2C%22message%22%3A%7B%22client_msg_id%22%3A%22b56103b9-ab45-4e89-a1bf-fac88a76ad90%22%2C%22type%22%3A%22message%22%2C%22text%22%3A%22Some+message...%22%2C%22user%22%3A%22UPG49L0TH%22%2C%22ts%22%3A%221591301772.000200%22%2C%22team%22%3A%22T04HY6K21%22%2C%22blocks%22%3A%5B%7B%22type%22%3A%22rich_text%22%2C%22block_id%22%3A%22l%5C%2F6sd%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22rich_text_section%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22text%22%2C%22text%22%3A%22Some+message...%22%7D%5D%7D%5D%7D%5D%7D%2C%22response_url%22%3A%22https%3A%5C%2F%5C%2Fhooks.slack.com%5C%2Fapp%5C%2FT04HY6K21%5C%2F1189494145200%5C%2FFbkBAWKd2u10BV0bx2Rxknfg%22%7D"

    # test payload
    slack_url_encoded['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_B64_STUB, F_SKIP_THREAD_SPAWN])
    slack_url_encoded['body'] = CREATE_TICKET_PAYLOAD

    ret = app.lambda_handler(slack_url_encoded, "")
    assert ret['statusCode'] == 200

    body_dict = decode_b64_json_if_present(ret['body'])

    payload = body_dict['payload']
    assert body_dict['slack_event_type'] == "shortcut"

    assert len(payload) == 1
    assert payload[0]['type'] == "message_action"
    assert payload[0]['token'] == "abIXST3MY2dOo9KyqrPyY0l9"
    assert payload[0]['channel'] == {
        "id": "D014R1SRSSZ",
        "name": "directmessage"
    }
    assert payload[0]['callback_id'] == "create-ticket-from-slack-msg"
    assert payload[0][
        'response_url'] == "https://hooks.slack.com/app/T04HY6K21/1189494145200/FbkBAWKd2u10BV0bx2Rxknfg"
def test_lambda_handler_no_start_time():
    event = {
        "share_prices": [10, 20]
    }

    response = app.lambda_handler(event, "")
    assert response["error"] == "Event should have start_time and share_prices"
Пример #3
0
def test_url_encoded_content(slack_url_encoded):

    # https://api.slack.com/interactivity/slash-commands
    # sends Content-type: application/x-www-form-urlencoded in POST "body"

    # test payload
    slack_url_encoded['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_B64_STUB, F_SKIP_THREAD_SPAWN])
    ret = app.lambda_handler(slack_url_encoded, "")
    assert ret['statusCode'] == 200

    body_dict = decode_b64_json_if_present(ret['body'])

    assert body_dict == {
        'channel_name': ['directmessage'],
        'command': ['/it-list-test'],
        'response_url': [
            'https://hooks.slack.com/commands/T04HY6K21/1163195318885/Vp4f4yPdOGF1dXe96A9E2i5U'
        ],
        'slack_event_type':
        'slash-command',
        'team_domain': ['compeat'],
        'token': ['abIXST3MY2dOo9KyqrPyY0l9'],
        'user_id': ['UPG49L0TH']
    }
def test_lambda_handler_no_share_prices():
    event = {
        "start_time": "some_time"
    }

    response = app.lambda_handler(event, "")
    assert response["error"] == "Event should have start_time and share_prices"
Пример #5
0
def test_lambda_handler(snsSingleAlarmEvent, mocker, requests_mock):
    try:
        # clean up modules cache
        del sys.modules["src.app"]
    except KeyError:
        pass
    mocker.patch.dict('os.environ', {'TopicTable': 'tablename'})
    mock_table = Mock()
    mock_table.get_item.return_value = {
        'Item': {
            'id': "ALARM: \"sample-event-UnHealthyHostCount\" in EU (Milan)",
            'webhookURL': 'mock://myURL',
        }
    }
    mock_bootstrap = Mock()
    mock_bootstrap.topic_table = mock_table
    mocker.patch('src.app.Bootstrap.make', return_value=mock_bootstrap)
    from src import app
    requests_mock.register_uri('POST', 'mock://myURL', json={
        'ok': True,
    })
    ret = app.lambda_handler(snsSingleAlarmEvent, "")
    print(f'{mock_table.get_item.call_args_list=}')
    print(f'{mock_bootstrap.call_args_list=}')
    print(f'{ret=}')
    assert ret['succeeded'] == 1
    assert mock_table.get_item.call_count == 1
Пример #6
0
def test_lambda_handler(apigw_event, mocker):
    ret = app.lambda_handler(apigw_event, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 200
    assert "message" in ret["body"]
    assert data["message"] == "hello world"
Пример #7
0
def test_lambda_challenge(apigw_slack_challenge_event):

    # test challenge - must return with no special header flags
    ret = app.lambda_handler(apigw_slack_challenge_event, "")
    assert ret['statusCode'] == 200

    data = json.loads(ret['body'])
    assert data == {'challenge': 'somerandomdigits'}
def test_input_change_multiple(apigw_event_replace_multiple, mocker):

    ret = app.lambda_handler(apigw_event_replace_multiple, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 200
    assert "output" in ret["body"]
    assert data["output"] == "Hello Googlee Amazon©!"
def test_no_change(apigw_event_no_replace, mocker):

    ret = app.lambda_handler(apigw_event_no_replace, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 200
    assert "output" in ret["body"]
    assert data["output"] == "hello world"
def test_error(apigw_error, mocker):

    ret = app.lambda_handler(apigw_error, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 400
    assert not "output" in ret["body"]
    assert data == "Error processing input"
Пример #11
0
 def test_reponse(self):
     event = {"queryStringParameters": {"personId": '1234'}}
     print('testing response')
     result = app.lambda_handler(event, None)
     print(result)
     self.assertEqual(result['statusCode'], 200)
     self.assertIn(
         event['queryStringParameters']['personId'] + ' from Lambda',
         result['body'])
Пример #12
0
def test_event_body(slack_event_json):

    # https://api.slack.com/events-api
    # - event:: Content-type: application/json: { ...  "event": { "type": "name_of_event" } }

    slack_event_json['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_B64_STUB, F_SKIP_THREAD_SPAWN])

    ret = app.lambda_handler(slack_event_json, "")
    assert ret['statusCode'] == 200

    body_dict = decode_b64_json_if_present(ret['body'])

    assert body_dict == {
        'api_app_id': 'A015G0J57UY',
        'authed_users': ['U014BLFS3CP'],
        'event': {
            'blocks': [{
                'block_id':
                'IMJ',
                'elements': [{
                    'elements': [{
                        'text': 'Will you process this message now?',
                        'type': 'text'
                    }],
                    'type':
                    'rich_text_section'
                }],
                'type':
                'rich_text'
            }],
            'channel':
            'D014R1SRSSZ',
            'channel_type':
            'im',
            'client_msg_id':
            'b0cf9965-0a77-4a12-929c-b748c5ac6c37',
            'event_ts':
            '1591356390.000300',
            'team':
            'T04HY6K21',
            'text':
            'Will you process this message now?',
            'ts':
            '1591356390.000300',
            'type':
            'message',
            'user':
            '******'
        },
        'event_id': 'Ev014X2TSWDR',
        'event_time': 1591356390,
        'slack_event_type': 'json-string',
        'team_id': 'T04HY6K21',
        'token': 'abIXST3MY2dOo9KyqrPyY0l9',
        'type': 'event_callback',
    }
Пример #13
0
def test_lambda_handler(apigw_event, mocker):

    ret = app.lambda_handler(apigw_event, "")
    data = json.loads(ret)

    assert data["statusCode"] == 200
    assert "message" in data["body"]
    assert data["body"]["message"] == "ok"
    assert 'ap-northeast-1' in data["body"]["regions"], \
        "not exist ap-northeast-1 in regions."
Пример #14
0
def test_lambda_handler(schedule_event, mocker):

    ret = app.lambda_handler(schedule_event, "")
    data = json.loads(ret)

    assert "message" in data
    assert data["message"] == "hello world"

    assert "event_input" in data
    assert data["event_input"] == "something"
Пример #15
0
def test_unknown_content_type(slack_unknown_content):

    # test unknown content
    slack_unknown_content['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_PASSTHRU, F_SKIP_THREAD_SPAWN])
    ret = app.lambda_handler(slack_unknown_content, "")
    assert ret['statusCode'] == 415

    data = json.loads(ret['body'])
    assert data == {"Error": "Unexpected Content-Type (null)"}
Пример #16
0
 def test_set_house_no_text_found_handler(self):
     event = TestDumbledorePoints.get_slack_command('dumbledore',
                                                    'dumbledore',
                                                    'set+house')
     ret = app.lambda_handler(event, "")
     data = json.loads(ret['body'])
     assert ret["statusCode"] == 200
     assert 'text' in ret['body']
     assert data['text'] == '_Are you a *muggle* or what? Spell the house name correctly: *gryffindor, ' \
                            'slytherin, ravenclaw, hufflepuff* or :sorting-hat:_'
Пример #17
0
def test_lambda_handler(apigw_event, mocker):

    ret = app.lambda_handler(apigw_event, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 200
    assert "message" in ret["body"]
    assert data["title"] == "Test Item"
    assert data["price"] == 159.89
    assert data["quantity"] == 12
Пример #18
0
 def test_display_house_leaderboard_handler_user_not_exists(self):
     event = TestDumbledorePoints.get_slack_command('dumbledore',
                                                    'dumbledore',
                                                    'leaderboard')
     ret = app.lambda_handler(event, "")
     data = json.loads(ret['body'])
     assert ret["statusCode"] == 200
     assert 'text' in ret['body']
     assert data[
         'text'] == '_Wizard *dumbledore* does not have priviledges yet, please enroll_'
Пример #19
0
 def test_display_instructions_handler(self):
     event = TestDumbledorePoints.get_slack_command('dumbledore',
                                                    'dumbledore', '')
     print("EVENT ", event)
     ret = app.lambda_handler(event, "")
     data = json.loads(ret['body'])
     assert ret["statusCode"] == 200
     assert 'text' in ret['body']
     assert data['text'] == 'First add yourself to your favorite house :european_castle:,  then you can start ' \
                            'giving or taking points right away :male_mage::skin-tone-2:  :deathly-hallows: '
Пример #20
0
def test_immediate_slack_response(caplog, slack_url_encoded):

    slack_url_encoded['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_B64_STUB, F_SKIP_THREAD_SPAWN])
    # Test initial (non-respwaned) call
    del slack_url_encoded['headers'][THREADED_LAMBDA_HEADER]
    ret = app.lambda_handler(slack_url_encoded, "")
    assert ret['statusCode'] == 200

    # Use log to determine if immediate redirection spawn would have occurred
    assert 'Returning 200 OK to slack' in caplog.text, 'Immediate return not made'
Пример #21
0
def test_url_encoded_content_passthru(slack_url_encoded):

    # ensure no errors
    slack_url_encoded['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_PASSTHRU, F_SKIP_THREAD_SPAWN])

    ret = app.lambda_handler(slack_url_encoded, "")
    assert ret['statusCode'] == 200

    data = json.loads(ret['body'])
    assert data == {}
Пример #22
0
def test_event_body_passthru(slack_event_json):
    """ ensure the code can execute all the way through without error """

    slack_event_json['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_PASSTHRU, F_SKIP_THREAD_SPAWN])

    ret = app.lambda_handler(slack_event_json, "")
    assert ret['statusCode'] == 200

    body_dict = decode_b64_json_if_present(ret['body'])

    assert body_dict == {}  # or 'CUTOFF ERROR' in body_dict
Пример #23
0
def test_event_body_sample_msg(slack_event_json):

    slack_event_json['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_B64_RESP, F_SKIP_THREAD_SPAWN])
    slack_event_json[
        'body'] = "{\"token\":\"abIXST3MY2dOo9KyqrPyY0l9\",\"team_id\":\"T04HY6K21\",\"api_app_id\":\"A015G0J57UY\",\"event\":{\"client_msg_id\":\"b0cf9965-0a77-4a12-929c-b748c5ac6c37\",\"type\":\"message\",\"text\":\"Will you process this message now?\",\"user\":\"UPG49L0TH\",\"ts\":\"1591356390.000300\",\"team\":\"T04HY6K21\",\"blocks\":[{\"type\":\"rich_text\",\"block_id\":\"IMJ\",\"elements\":[{\"type\":\"rich_text_section\",\"elements\":[{\"type\":\"text\",\"text\":\"Will you process this message now?\"}]}]}],\"channel\":\"D014R1SRSSZ\",\"event_ts\":\"1591356390.000300\",\"channel_type\":\"im\"},\"type\":\"event_callback\",\"event_id\":\"Ev014X2TSWDR\",\"event_time\":1591356390,\"authed_users\":[\"U014BLFS3CP\"]}"

    ret = app.lambda_handler(slack_event_json, "")
    assert ret['statusCode'] == 200

    body_dict = decode_b64_json_if_present(ret['body'])

    assert body_dict == {}  # or 'CUTOFF ERROR' in body_dict
def test_lambda_handler(mocker):
    event = {
        "start_time": "2021-04-26 10:00:00",
        "share_prices": [10, 7, 11, 5, 8]
    }
    expected = {
        "max_profit": 4
    }
    get_max_profit_mock = mocker.patch('src.app.SharePriceAnalysis.get_max_profit')
    get_max_profit_mock.return_value = expected
    response = app.lambda_handler(event, "")
    assert response == expected
    get_max_profit_mock.assert_called_once_with(event["start_time"], event["share_prices"])
Пример #25
0
 def test_display_house_leaderboard_handler_user_exists(self, use_moto):
     use_moto()
     event = TestDumbledorePoints.get_slack_command('dumbledore',
                                                    'dumbledore',
                                                    'gryffindor')
     TestDumbledorePoints.load_items_into_mock_db()
     ret = app.lambda_handler(event, "")
     data = json.loads(ret['body'])
     assert ret["statusCode"] == 200
     assert 'text' in ret['body']
     assert data['text'] == '_*gryffindor* has *20* points_'
     assert 'attachments' in ret['body']
     assert data['attachments'] == [{'text': '_dumbledore_: 20\n'}]
Пример #26
0
def test_url_encoded_content_passthru(slack_url_encoded):

    CREATE_TICKET_PAYLOAD = "payload=%7B%22type%22%3A%22message_action%22%2C%22token%22%3A%22abIXST3MY2dOo9KyqrPyY0l9%22%2C%22action_ts%22%3A%221591302360.305165%22%2C%22team%22%3A%7B%22id%22%3A%22T04HY6K21%22%2C%22domain%22%3A%22compeat%22%7D%2C%22user%22%3A%7B%22id%22%3A%22UPG49L0TH%22%2C%22name%22%3A%22douglas.norment%22%2C%22username%22%3A%22douglas.norment%22%2C%22team_id%22%3A%22T04HY6K21%22%7D%2C%22channel%22%3A%7B%22id%22%3A%22D014R1SRSSZ%22%2C%22name%22%3A%22directmessage%22%7D%2C%22callback_id%22%3A%22create-ticket-from-slack-msg%22%2C%22trigger_id%22%3A%221178280893905.4610223069.9aafb644573a581f3251c8f1cff8008d%22%2C%22message_ts%22%3A%221591301772.000200%22%2C%22message%22%3A%7B%22client_msg_id%22%3A%22b56103b9-ab45-4e89-a1bf-fac88a76ad90%22%2C%22type%22%3A%22message%22%2C%22text%22%3A%22Some+message...%22%2C%22user%22%3A%22UPG49L0TH%22%2C%22ts%22%3A%221591301772.000200%22%2C%22team%22%3A%22T04HY6K21%22%2C%22blocks%22%3A%5B%7B%22type%22%3A%22rich_text%22%2C%22block_id%22%3A%22l%5C%2F6sd%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22rich_text_section%22%2C%22elements%22%3A%5B%7B%22type%22%3A%22text%22%2C%22text%22%3A%22Some+message...%22%7D%5D%7D%5D%7D%5D%7D%2C%22response_url%22%3A%22https%3A%5C%2F%5C%2Fhooks.slack.com%5C%2Fapp%5C%2FT04HY6K21%5C%2F1189494145200%5C%2FFbkBAWKd2u10BV0bx2Rxknfg%22%7D"

    # ensure no errors
    slack_url_encoded['headers'][UNIT_TEST_HEADER_FLAGS] = ' '.join(
        [F_PASSTHRU, F_SKIP_THREAD_SPAWN])
    slack_url_encoded['body'] = CREATE_TICKET_PAYLOAD

    ret = app.lambda_handler(slack_url_encoded, "")
    assert ret['statusCode'] == 200

    data = json.loads(ret['body'])
    assert data == {} or 'CUTOFF ERROR' in data
Пример #27
0
def test_lambda_handler():
    for e in apigw_event():
        res = app.lambda_handler(e, '')
        data = json.loads(res['body'])
        if e['httpMethod'] == 'GET':
            assert res['statusCode'] == '200'
            assert data['message']['id'] == 'id_01'
            assert data['message']['user_id'] == 'user_01'
            assert data['message']['body'] == 'message_01'
        elif e['httpMethod'] == 'POST':
            assert res['statusCode'] == '201'
        elif e['httpMethod'] == 'DELETE':
            assert res["statusCode"] == '200'
            assert data['message']['id'] == 'id_02'
            assert data['message']['user_id'] == 'user_02'
            assert data['message']['body'] == 'message_02'
Пример #28
0
def test_lambda_handler(apigw_event, mocker):
    ret = app.lambda_handler(apigw_event, "")
    assert ret["statusCode"] == 200
def test_lambda_handler(apigw_slack_challenge_event):
    ret = app.lambda_handler(apigw_slack_challenge_event, "")
    assert ret['statusCode'] == 200

    data = json.loads(ret['body'])
    assert data == {"challenge": "somerandomdigits"}
Пример #30
0
def test_lambda_handler(sfn_event, mocker):

    ret = app.lambda_handler(sfn_event, "")

    assert ret["status"] == "success"
    assert ret["result"] == '[[1, "Axel"], [2, "Mr. Foo"], [3, "Ms. Bar"]]'