"""Lambda test module.""" from unittest.mock import patch from botocore.exceptions import ClientError import config from src import app as index @patch('common.sentry.capture_message') @patch('src.app.s3_client') def test_no_missing_files(mock_s3_client, mock_sentry): """Test lambda when certain files are missing.""" mock_s3_client.get_object.side_effect = [ {'ContentLength': 300}, {'ContentLength': 500}, {'ContentLength': 500}, {'ContentLength': 500}, {'ContentLength': 300}, {'ContentLength': 500}, {'ContentLength': 500}, {'ContentLength': 500} ] index.handler({'event_date': '2021-03-01T11:21:34.130216+0000'}, None) mock_sentry.assert_not_called() for file_info in config.FILES.values(): file_name = file_info[0].format(date='2021-03-01') mock_s3_client.get_object.assert_any_call( Bucket='dev-orcd-podcast-chartable', Key=file_name) @patch('common.sentry.capture_message') @patch('src.app.s3_client') def test_empty_files(mock_s3_client, mock_sentry): """Test lambda when certain files are empty.""" mock_s3_client.get_object.side_effect = [ {'ContentLength': 19}, {'ContentLength': 500}, {'ContentLength': 5}, {'ContentLength': 500}, {'ContentLength': 500}, {'ContentLength': 500}, {'ContentLength': 500}, {'ContentLength': 500} ] index.handler({'event_date': '2021-03-01T11:21:34.130216+0000'}, None) mock_sentry.assert_called_once_with( 'Missing files: itunes-episodes-2021-03-01,' 'spotify-podcasts-2021-03-01' ) for file_info in config.FILES.values(): file_name = file_info[0].format(date='2021-03-01') mock_s3_client.get_object.assert_any_call( Bucket='dev-orcd-podcast-chartable', Key=file_name) @patch('common.sentry.capture_message') @patch('src.app.s3_client') def test_missing_files(mock_s3_client, mock_sentry): """Test lambda when all files are valid.""" mock_s3_client.get_object.side_effect = [ {'ContentLength': 300}, ClientError({'Error': {'Code': 'NoSuchKey'}}, 'GetObject'), {'ContentLength': 400}, {'ContentLength': 500}, {'ContentLength': 400}, {'ContentLength': 500}, {'ContentLength': 400}, {'ContentLength': 500} ] index.handler({'event_date': '2021-03-01T11:21:34.130216+0000'}, None) mock_sentry.assert_called_once_with( 'Missing files: itunes-podcasts-2021-03-01') for file_info in config.FILES.values(): file_name = file_info[0].format(date='2021-03-01') mock_s3_client.get_object.assert_any_call( Bucket='dev-orcd-podcast-chartable', Key=file_name)