"""Test lambda app.""" import json import pytest import config from src import app as index def test_valid_message(kafka_mock, valid_message): """Test handler for valid_message.""" result = index.handler(valid_message, None) assert result.get('statusCode') == 200 assert result.get('isBase64Encoded') is False assert result.get('body') == '{"status": "SUCCESS"}' kafka_mock.assert_call_count('produce', 1) def test_exception(kafka_mock, valid_message): """Test handler for valid_message.""" valid_message['pathParameters'] = { 'vendor': {'bad': 'data type'} } result = index.handler(valid_message, None) assert result is None kafka_mock.assert_call_count('produce', 1) kafka_mock.assert_messages([{ 'topic': config.DLQ_TOPIC, 'value': json.dumps(valid_message).encode('utf-8'), 'key': valid_message.get('requestContext', {}).get('requestId', '').encode('utf-8') }]) @pytest.mark.parametrize('test_input,error_message', [ ( {'body': '{"email_address": "test@email.com"}'}, index.INVALID_REQUEST), ( {'pathParameters': {}, 'body': '{"email_address": "test@email.com"}'}, index.INVALID_REQUEST), ( {'pathParameters': {'vendor': 'unknown'}, 'body': '{"email_address": "test@email.com"}'}, index.INVALID_REQUEST), ( {'pathParameters': {'vendor': 'smf'}, 'body': '{"email_address": "test@email.com"}'}, index.INVALID_MESSAGE), ( {'pathParameters': {'vendor': 'smf'}, 'dummy': 'message', 'body': '{"email_address": "test@email.com"}'}, index.INVALID_MESSAGE), ( {'pathParameters': {'vendor': 'smf'}, 'body': '{"email_address": "test@email.com"}'}, index.INVALID_MESSAGE), ( {'pathParameters': {'vendor': 'smf'}, 'body': '{"email_address": "test@email.com"}'}, index.INVALID_MESSAGE), ( {'pathParameters': {'vendor': 'smf'}, 'body': 'foobar', 'headers': {'authorization': 'test-token'}}, index.INVALID_MESSAGE_BODY ), ( {'pathParameters': {'vendor': 'smf'}, 'body': '{"foo": "bar"}', 'headers': {'authorization': 'test-token'}}, index.MISSING_EMAIL ), ]) def test_ignored_messages(test_input, error_message, kafka_mock): """Test handler for invalid messages.""" result = index.handler(test_input, None) assert result.get('statusCode') == 400 assert result.get('isBase64Encoded') is False assert json.loads(result.get('body')) == {'status': 'IGNORED', 'message': error_message} kafka_mock.assert_call_count('produce', 0)