"""Lambda test module.""" import json import pytest from src import config from src import app from constants import fields @pytest.fixture def dynamo_stream_event(): """Get example event content.""" with open('tests/event.json', 'r') as myfile: return json.loads(myfile.read()) @pytest.fixture def mocked_invoke(mocker): """Mock boto3 lambda client.""" mocked_boto_client = mocker.patch('boto3.client') mocked_lambda_client = mocker.Mock() mocked_invoke_func = mocker.Mock() mocked_lambda_client.invoke = mocked_invoke_func mocked_boto_client.return_value = mocked_lambda_client return mocked_invoke_func def test_handler(mocked_invoke, dynamo_stream_event): """Test app.handler function, success case.""" app.handler(dynamo_stream_event, None) assert mocked_invoke.call_count == 1 assert mocked_invoke.call_args[1]['FunctionName'] == ( config.VO_TO_DD_SYNC_LAMBDA_NAME) insert_record = dynamo_stream_event[fields.DDB_EVENT_RECORDS][0] ddb_record = insert_record[fields.DDB_EVENT_RECORD_MAIN] new_view = ddb_record[fields.DDB_EVENT_RECORD_NEW_VALUES] new_view_json_bytes = json.dumps(new_view).encode() assert mocked_invoke.call_args[1]['Payload'] == new_view_json_bytes def test_handler_empty(mocked_invoke): """Test app.handler function, empty event.""" app.handler({}, None) app.handler(None, None) assert mocked_invoke.call_count == 0