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"
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"
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
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"
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"
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'])
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', }
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."
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"
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)"}
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:_'
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
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_'
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: '
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'
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 == {}
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
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"])
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'}]
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
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'
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"}
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"]]'