"""Generate fake lambda event containing SQS events.""" import pytest from moto import mock_aws @pytest.fixture def fixture_getstream_test_event(): """Test message from GetStream.""" return { 'messageId': '2c8a18b9-9e80-4a7e-b1df-8c500a300715', 'receiptHandle': 'AQEBbNVocRCaSAO4dsmxG1jQYL/iT9TFOstFEnudcXleQYIj...', 'body': '[{"deleted": [], "new": [{"actor": "1", "verb": "tweet", "object": "1", "target": null, "time": "2016-12-15T17:20:37.258", "foreign_id": null, "id": "af781804-847e-11e4-8080-80012fb97b9e", "tweet": "Hello world"}], "published_at": "2014-12-15T17:20:37.263518+00:00", "feed": "user:2"}, {"deleted": ["38f81366-847f-11e4-9c94-0cc47a024be0"], "new": [], "published_at": "2014-12-15T17:20:37.263518+00:00", "feed": "timeline:1"}]', # noqa:E501 'attributes': { 'ApproximateReceiveCount': '4', 'SentTimestamp': '1587409565985', 'SequenceNumber': '18853120922601713408', 'SenderId': 'getstream-sender-id', 'ApproximateFirstReceiveTimestamp': '1587409575989' }, 'messageAttributes': {}, 'md5OfBody': '110e7cd96ca1e3e1a876e3557ccc908b', 'eventSource': 'aws:sqs', 'eventSourceARN': 'queue-arn', 'awsRegion': 'us-east-1' } @pytest.fixture def fixture_event(): """SQS message.""" return { 'messageId': '11d6ee51-4cc7-4302-9e22-7cd8afdaadf5', 'receiptHandle': 'AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...', 'body': 'W3sibmV3IjogW3siYWN0b3IiOiAiMDlhYjlmYTEtNTBlOS00MjI5LWJkNGMtZmVjYWY1NDZkZTE1IiwgImZvcmVpZ25faWQiOiAidGVzdC1mayIsICJncm91cCI6ICJzdHJlYW0tcmVhbHRpbWUiLCAiaWQiOiAiZDE2OTUyNzItNjg4Zi0xMWVhLWEyZDUtMTIzMWQ1MTE2N2I0IiwgIm9iamVjdCI6ICJ7XCJuYW1lXCI6IFwiVGhlIE9uZXMgYW5kIFplcm9zXCIsIFwibmV3X2ZvbGxvd2Vyc1wiOiAxMDAsIFwiYWN0aXZpdHlfc291cmNlc1wiOiBbXCJwYXJ0aWNpcGFudFwiXX0iLCAib3JpZ2luIjogImxhYmVsX3NwaWtlX2RldGVjdG9yOkluc2lnaHRzUHJvZmlsZV8xOSIsICJ0YXJnZXQiOiAiIiwgInRpbWUiOiAiMjAyMC0wMy0xN1QyMDo0MjoyOS4xMTc0MDAiLCAidmVyYiI6ICJzb2NpYWxfc3Bpa2VfdHdpdHRlciJ9XSwgImRlbGV0ZWQiOiBbXSwgImRlbGV0ZWRfZm9yZWlnbl9pZHMiOiBbXSwgImZlZWQiOiAidXNlcl9tb2JpbGVfbm90aWZpY2F0aW9uczpJbnNpZ2h0c1Byb2ZpbGVfMTIxMzQiLCAiYXBwX2lkIjogMzc2MTYsICJwdWJsaXNoZWRfYXQiOiAiMjAyMC0wMy0xN1QyMDo0MjoyOS4xMzBaIn1d', # noqa:E501 'attributes': { 'ApproximateReceiveCount': '1', 'SentTimestamp': '1573251510774', 'SequenceNumber': '18849496460467696128', 'SenderId': 'getstream-sender-id', 'ApproximateFirstReceiveTimestamp': '1573251510774' }, 'messageAttributes': {}, 'md5OfBody': 'e4e68fb7bd0e697a0ae8f1bb342846b3', 'eventSource': 'aws:sqs', 'eventSourceARN': 'queue-arn', 'awsRegion': 'us-east-2' } @pytest.fixture def fixture_batch_events(fixture_event): """Batch SQS events.""" return {'Records': [fixture_event for i in range(10)]} @pytest.fixture def fixture_event_empty_items(): """SQS message with empty 'new' items.""" return { 'messageId': '11d6ee51-4cc7-4302-9e22-7cd8afdaadf5', 'receiptHandle': 'AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...', 'body': 'W3sibmV3IjpbXSwiZGVsZXRlZCI6W10sImRlbGV0ZWRfZm9yZWlnbl9pZHMiOltdLCJmZWVkIjoidXNlcl9tb2JpbGVfcHVzaDpBcnRpc3RQcm9maWxlXzExOCIsImFwcF9pZCI6Mzk0MDAsInB1Ymxpc2hlZF9hdCI6IjIwMjAtMDQtMzBUMTg6MjA6MDYuNTgzWiJ9XQ==', # noqa 'attributes': { 'ApproximateReceiveCount': '1', 'SentTimestamp': '1573251510774', 'SequenceNumber': '18849496460467696128', 'SenderId': 'getstream-sender-id', 'ApproximateFirstReceiveTimestamp': '1573251510774' }, 'messageAttributes': {}, 'md5OfBody': 'e4e68fb7bd0e697a0ae8f1bb342846b3', 'eventSource': 'aws:sqs', 'eventSourceARN': 'queue-arn', 'awsRegion': 'us-east-2' } @pytest.fixture def fixture_batch_unagg_events(fixture_unagg_event): """Batch SQS events.""" return {'Records': [fixture_unagg_event for i in range(10)]} @pytest.fixture def fixture_unagg_event(): """Test message from SQS.""" return { 'messageId': '3bf27954-27b0-470c-85a5-813427ca3c78', 'receiptHandle': 'AQEBjrLt/cF0Q0ww9HpTyDje6q1ueakldmdbT7US6asES7g84UWE9QpoM+LderBJ/OCzQq4w1d3pf2DVZMafl+F0+8Jul7K4UYlh+rsircQVjJK2YeZPBbIA11NSsVtvlEjYdSSmxl3o+fjWD0A9J6rBKdrxHF0bSmABuA/57aUqEk6n+CpHGw/CamHM3Kl4RyqSiogOucGYnblYHTQMGWKCDn0M7yzKkRDJBWRB+iCXXzwSiL4zN7AjtiN2eYtHq44btXTMJ3jcz7CZhFoqzPZ093Ao4fWn4eNQVbXiYsExipYjNMmcMEzqGJDieEFoR69N', # noqa:E501 'body': 'W3siYXBwX2lkIjogMzcwNzksICJkZWxldGVkIjogW10sICJkZWxldGVkX2ZvcmVpZ25faWRzIjogW10sICJmZWVkIjogInVzZXJfbW9iaWxlX3B1c2g6TGFiZWxQcm9maWxlXzU1NTMwIiwgIm5ldyI6IFt7ImFjdG9yIjogImYyMTViYTYwLWMwNGEtNDFkMC1iOTNhLTJmOWYwZjJjOTUzMCIsICJmb3JlaWduX2lkIjogInBsYXlsaXN0X3BsYWNlbWVudHM6cGwuYjEwZDc0OGZlYTBhNGU0NjlhZTg0ODE3NDUwMjFmYzQ6aXR1bmVzL2FwcGxlOmYyMTViYTYwLWMwNGEtNDFkMC1iOTNhLTJmOWYwZjJjOTUzMDpMYWJlbFByb2ZpbGVfNTU1MzAiLCAiaWQiOiAiNTMyMTJmODAtZWMzZi0xMWVhLTgwODAtODAwMTA1ZDU4OTMxIiwgIm9iamVjdCI6ICJ7XCJwbGF5bGlzdFwiOiB7XCJkc3BcIjogXCJpdHVuZXMvYXBwbGVcIiwgXCJpZFwiOiBcInBsLmIxMGQ3NDhmZWEwYTRlNDY5YWU4NDgxNzQ1MDIxZmM0XCIsIFwibmFtZVwiOiBcIkxhIFBsdW1hIGRlIEVzcGlub3phIFBhelwiLCBcInJhbmtcIjogMTMxMTZ9LCBcInNvdW5kX3JlY29yZGluZ1wiOiB7XCJpZFwiOiBcImYyMTViYTYwLWMwNGEtNDFkMC1iOTNhLTJmOWYwZjJjOTUzMFwiLCBcImlzcmNcIjogXCJVU1VHMTA5MTI0MTZcIiwgXCJuYW1lXCI6IFwiTm8gTGxlZ2EgRWwgT2x2aWRvXCJ9LCBcImFjdGl2aXR5X3NvdXJjZXNcIjogW1wicGFydGljaXBhbnRcIl19IiwgIm9yaWdpbiI6IG51bGwsICJ0YXJnZXQiOiAiIiwgInRpbWUiOiAiMjAyMC0wOS0wMVQxMDozODo1MS4wMDAwMDAiLCAidmVyYiI6ICJwbGF5bGlzdF9wbGFjZW1lbnRzIn1dLCAicHVibGlzaGVkX2F0IjogIjIwMjAtMDktMDFUMTk6NTQ6MDUuMTA4WiJ9XQ==', # noqa:E501 'attributes': { 'ApproximateReceiveCount': '1', 'SentTimestamp': '1596031025784', 'SequenceNumber': '18855328016310257664', 'SenderId': 'getstream-sender-id', 'ApproximateFirstReceiveTimestamp': '1596031036528' }, 'messageAttributes': {}, 'md5OfBody': 'fafaeba2d81d4e05d2debe4064fbf75d', 'eventSource': 'aws:sqs', 'eventSourceARN': 'queue-arn', 'awsRegion': 'us-east-1' } @pytest.fixture def test_buffered_events(): """Test events from buffer table.""" event_1 = {'actor': '68e7dc87-5774-4279-960e-53f206fe3a08', 'foreign_id': 'playlist_placements:pl.42b3fe9c75a947ab84a80019e7bcd704:itunes/apple:68e7dc87-5774-4279-960e-53f206fe3a08:LabelProfile_80429', 'origin': None, 'verb': 'playlist_placements', 'id': '05263c00-eda5-11ea-8080-800018dc1b99', 'time': '2020-09-03T05:19:20.000000', 'object': {'activity_sources': ['participant'], 'playlist': {'dsp': 'itunes/apple', 'store_id': 1, 'id': 'pl.42b3fe9c75a947ab84a80019e7bcd704', 'name': 'Top 100', 'rank': 64061}, 'sound_recording': {'id': '68e7dc87-5774-4279-960e-53f206fe3a08', 'isrc': 'US23A1500056', 'label_id': 25323, 'name': 'great song'}}, 'target': ''} # noqa:E501 event_2 = {'actor': 'd19964b4-878d-4d0a-b959-e363333cec3d', 'foreign_id': 'playlist_placements:37i9dQZF1DWUv0cTKdT8jJ:spotify:d19964b4-878d-4d0a-b959-e363333cec3d:InsightsProfile_1624', 'id': 'd89c9d00-08d9-11eb-8080-80005f88734c', 'object': {'activity_sources': ['participant'], 'playlist': {'dsp': 'spotify', 'store_id': 286, 'id': '37i9dQZF1DWUv0cTKdT8jJ', 'name': 'Volume', 'rank': 4576}, 'sound_recording': {'id': 'd19964b4-878d-4d0a-b959-e363333cec3d', 'isrc': 'CAB391802328', 'name': 'I Feel the Transition'}}, 'origin': None, 'target': '', 'time': '2020-10-07T20:15:30.000000', 'verb': 'playlist_placements'} # noqa:E501 event_3 = {'actor': 'd19964b4-878d-4d0a-b959-e363333cec3d', 'foreign_id': 'playlist_placements:37i9dQZF1DWUv0cTKdT8jJ:spotify:d19964b4-878d-4d0a-b959-e363333cec3d:InsightsProfile_1624', 'id': 'd89c9d00-08d9-11eb-8080-80005f88734c', 'object': {'activity_sources': ['participant'], 'playlist': {'dsp': 'spotify', 'store_id': 286, 'id': '37jJ', 'name': 'Other Playlist', 'rank': 8576}, 'sound_recording': {'id': 'd19964b4-878d-4d0a-b959-e363333cec3d', 'isrc': 'CAB391802328', 'name': 'I Feel the Transition'}}, 'origin': None, 'target': '', 'time': '2020-10-07T20:15:30.000000', 'verb': 'playlist_placements'} # noqa:E501 event_4 = {'actor': 'd19964b4-878d-4d0a-b959-e363333cec3d', 'foreign_id': 'playlist_placements:37i9dQZF1DWUv0cTKdT8jJ:spotify:d19964b4-878d-4d0a-b959-e363333cec3d:InsightsProfile_1624', 'id': 'd89c9d00-08d9-11eb-8080-80005f88734c', 'object': {'activity_sources': ['participant'], 'playlist': {'dsp': 'spotify', 'store_id': 286, 'id': '29', 'name': 'Another Playlist', 'rank': 76}, 'sound_recording': {'id': 'd19964b4-878d-4d0a-b959-e363333cec3d', 'isrc': 'CAB391802328', 'name': 'I Feel the Transition'}}, 'origin': None, 'target': '', 'time': '2020-10-07T20:15:30.000000', 'verb': 'playlist_placements'} # noqa:E501 return [event_1, event_2, event_3, event_4] def trending_track_message( region, dsp, track_id, percent_diff, activity_sources=['participant']): """Create fake trending_track message.""" details = { 'activity_sources': activity_sources, 'day_streams': 15000, 'dsp': dsp, 'percent_diff': percent_diff, 'region': region, 'track': { 'id': track_id, 'isrc': f'ISRC-{track_id}', 'name': f'Track Number {track_id}', 'subaccount_id': None, 'vendor_id': 987 } } return { 'actor': track_id, 'foreign_id': 'getstream-foreign-id', 'id': '096c4000-0ce7-11eb-8080-80016e1cd4c3', 'object': details, 'origin': None, 'target': '', 'time': '2019-06-15T00:00:00.000000', 'verb': 'trending_tracks' } @pytest.fixture(scope='function') def mocked_aws(): """ Mock all AWS interactions. Requires you to create your own boto3 clients """ with mock_aws(): yield