"""Shared test fixtures.""" import base64 import json import pytest def serialize_kinesis_data(data): """Serialize messages to Kinesis binary. Args: data (dict): Data to serialize. Returns: str: Serialized data. """ return base64.b64encode(json.dumps(data).encode("utf-8")) def kinesis_single_record_item(data): """Wrap pure data with all required Kinesis message fields. Args: data (dict): Data to wrap. Returns: dict: Kinesis format message item. """ return { "kinesis": { "kinesisSchemaVersion": "1.0", "partitionKey": "partition_key", "sequenceNumber": "123456789012345678901234567890", "data": serialize_kinesis_data(data), "approximateArrivalTimestamp": 1562084067.922, }, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000000:1234567890", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123:role/service-role/" "kinesis-test-role-1234567890", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123:stream/test-stream", } @pytest.fixture def fixture_maxwell_project_table_insert(): """Fixture for project insert event.""" return { "database": "art_relations", "table": "project", "type": "insert", "ts": 1562084068, "xid": 2235, "commit": True, "data": { "project_id": 100, "project_code": 543, "vendor_id": 12321, "subaccount_id": 0, "project_name": "project_100", "created_date_utc": "2016-11-04 16:43:52.000000", "updated_date_utc": "2016-11-04 16:43:52.000000", "correlation_id": "", "artist_id": 54345, "description": "project_100_description", }, } @pytest.fixture def fixture_maxwell_project_table_update(fixture_maxwell_project_table_insert): """Fixture for project update event.""" return { "database": "art_relations", "table": "project", "type": "update", "ts": 1562084068, "xid": 2235, "commit": True, "data": fixture_maxwell_project_table_insert["data"].copy(), "old": { "description": "project_101_old_description", "updated_date_utc": "2016-11-04 16:43:52.000000", }, } @pytest.fixture def fixture_maxwell_project_table_delete(fixture_maxwell_project_table_insert): """Fixture for project insert event.""" copy = fixture_maxwell_project_table_insert.copy() copy["type"] = "delete" return copy @pytest.fixture def fixture_maxwell_project_table_events( fixture_maxwell_project_table_insert, fixture_maxwell_project_table_update, fixture_maxwell_project_table_delete, ): """Fixtures for project events.""" return { "insert": fixture_maxwell_project_table_insert, "update": fixture_maxwell_project_table_update, "delete": fixture_maxwell_project_table_delete, } @pytest.fixture def fixture_maxwell_fake_table_update(): """Fixture for non used table event.""" return { "database": "art_relations", "table": "fake", "type": "update", "ts": 1562084068, "xid": 2235, "commit": True, "data": { "fake_id": 101, "fake_field_1": "fake_field_1_new_value", "fake_field_2": "fake_field_2_new_value", }, "old": { "fake_field_1": "fake_field_1_old_value", "fake_field_2": "fake_field_2_old_value", }, } @pytest.fixture def single_product(): """Messages for product events.""" return { "database": "art_relations", "table": "release_localized_metadata", "type": "insert", "ts": 1573731354, "xid": 8820237, "commit": True, "data": { "id": 41220, "release_id": 99999, "language_id": 1, "release_name": "Optimizer Max", }, } @pytest.fixture def product_update_stream(): """Messages for product events.""" return [ { "database": "art_relations", "table": "release_localized_metadata", "type": "insert", "ts": 1573731354, "xid": 8820237, "commit": True, "data": { "id": 41220, "release_id": 2736313, "language_id": 1, "release_name": "Rainy Forest", }, }, { "database": "art_relations", "table": "release_artist", "type": "insert", "ts": 1574329223, "xid": 346680, "xoffset": 1, "data": { "release_artist_id": 5870914, "upc": 886447642191, "role": "performer", "release_id": 2742523, "artist_name": "ScHoolboy Q", "url": None, "artist_info_id": 1708480, "label_participant_id": None, }, }, { "database": "art_relations", "table": "product_physical", "type": "insert", "ts": 1574334333, "xid": 638731, "xoffset": 1, "data": { "id": 82649, "release_id": 2742530, "packaging_id": 3, "exclusive_for": None, "initial_stock": 1111, "box_lot": 11, "pricing": None, "end_date": None, "embargo_date": None, "discount": None, "individual": "Y", "explicit": "N", "exportable": None, "manufacturing_obligation": None, "units_per_set": 1, "wholesale_price": None, "pline": "2019 asdads", "meeting_notes": None, "hmv_notes": None, "production_notes": None, "display_configuration": '1 x 7" Vinyl EP', "japan_distribution": None, "edition": None, }, }, { "database": "art_relations", "table": "product_video", "type": "insert", "ts": 1574282912, "xid": 5309002, "commit": True, "data": { "id": 32149, "release_id": 2736862, "type_of_video": None, "language_of_video_title": None, "video_title": None, "description": None, "version": None, "product_code": None, "upc": None, "isrc": None, "imprint": None, "parental_advisory": None, "language_of_video_content": None, "lyrics": None, "c_line_year": None, "c_line_copyright_holder": None, "p_line_year": None, "p_line_copyright_holder": None, "new_release": 1, "original_release_date": None, "release_date": None, "special_instructions": None, "deliver_to_all": 1, "genre_id": None, "subgenre_id": None, "contributors": None, "keywords": None, "primary_artist_id": 780747, "latest_pipeline_run_id": None, "preview_start_time": 0, "thumbnail_path": None, "channel_selection": None, "not_for_distribution": "N", "vevo_controlled": None, "updated_at": None, "created_at": "2019-11-20 15:48:32", "submitted_at": None, "youtube_only": None, "ingest_filename": None, "custom_thumbnail_path": None, "migrated_metadata_at": None, "migrated_asset_at": None, "associated_track_id": None, "prores_path": None, "h264_path": None, }, }, ] @pytest.fixture def track_update_stream(): """Messages for track events.""" return [ { "database": "art_relations", "table": "track_artist", "type": "insert", "ts": 1574431774, "xid": 1408251, "xoffset": 1, "data": { "id": 87648645, "track_id": 30993692, "type": "featuring", "name": "f111", "artist_info_id": None, "label_participant_id": None, }, }, { "database": "art_relations", "table": "track_publisher", "type": "insert", "ts": 1574436906, "xid": 1864705, "commit": True, "data": { "track_publisher_id": 33043811, "publisher_name": "Yoshimoto Publishing", "ownership": None, "upc": 193483706238, "cd": 1, "track_id": 3, "unique_track_id": 29982748, }, }, { "database": "art_relations", "table": "track_localized_metadata", "type": "insert", "ts": 1573823728, "xid": 11966224, "commit": True, "data": { "id": 101466, "track_id": 30949614, "language_id": 3, "track_name": "trtrtr", "version": "", }, }, { "database": "art_relations", "table": "track_writer", "type": "insert", "ts": 1574499110, "xid": 426523, "commit": True, "data": { "track_writer_id": 59760324, "writer_name": "John Ashton", "upc": 5099702595018, "cd": 1, "track_id": 5, "unique_track_id": 30998257, "artist_info_id": 1715481, "label_participant_id": None, }, }, ] @pytest.fixture def track_and_product_update_event(): """Messages for track and product event.""" return { "database": "art_relations", "table": "track", "type": "insert", "ts": 1574334731, "xid": 671865, "xoffset": 0, "data": { "track_name": "track1", "upc": 194491665685, "cd": 1, "track_id": 1, "orchdmclip": None, "sample": "N", "dmclips": None, "isrc": "USTFD0600055", "id": 30989075, "length_minute": None, "length_seconds": None, "writer": None, "credit": "orig_comp", "mechanical": "no", "publisher": None, "publish_company": None, "dpd_license": "no", "explicit_lyrics": "C", "version": "In the Style of Evanescence (Karaoke Version)", "purchasable": "Y", "download_price": None, "p_line": "2010 State One Music", "hidden": None, "offer_type": "all", "dig_distribution_type": "digital_mobile", "third_party_publisher": "Y", "royalty_collection": "Y", "publishing_admin": "N", "sync_admin": "Y", "additional_id": None, "track_type": "music", "mp3_url": None, "stereo_or_mono": None, "bonus": "N", "recommended": "N", "youtube_matches": "Monetize", "youtube_uploads": None, "preorder_only": "N", "original_file_name": "USTFD0600055.wav", "release_id": 2742535, "last_updated": "2019-11-21 11:12:11", "meta_language": "ENG", "preview_start_time": None, "closed_caption_exists": None, "closed_caption_reason_id": None, "vendor_track_identifier": None, "recording_country": None, "recording_year": None, "original_track_id": None, "us_publishing_obligation": None, }, } @pytest.fixture def track_artist_localized_metadata_event(): """Fixture for track_artist_localized_metadata.""" return { "database": "art_relations", "table": "track_artist_localized_metadata", "type": "insert", "ts": 1573737592, "xid": 9059033, "xoffset": 1, "data": { "id": 475636, "track_artist_id": 87577716, "language_id": 12, "artist_name": "artist name", }, } @pytest.fixture def release_artist_localized_metadata_event(): """Fixture for track_artist_localized_metadata.""" return { "database": "art_relations", "table": "release_artist_localized_metadata", "type": "insert", "ts": 1573731354, "xid": 8820246, "commit": True, "data": { "id": 82552, "release_artist_id": 5858681, "language_id": 1, "artist_name": "NL", }, } @pytest.fixture def product_update_with_project_id(): """Fixture for product update with project_id.""" return { "database": "art_relations", "table": "releases", "type": "insert", "ts": 1573731354, "xid": 8820237, "commit": True, "data": { "release_id": 999999, "language_id": 1, "release_name": "NotForDistribution", "not_for_distribution": "N", "display_upc": "UPC1", "project_id": 12345, }, } @pytest.fixture def product_update_stream_distribution(): """Messages for product events.""" return [ { "database": "art_relations", "table": "releases", "type": "insert", "ts": 1573731354, "xid": 8820237, "commit": True, "data": { "release_id": 999999, "language_id": 1, "release_name": "NotForDistribution", "not_for_distribution": "N", "display_upc": "UPC1", }, }, { "database": "art_relations", "table": "releases", "type": "insert", "ts": 1573731354, "xid": 8820237, "commit": True, "data": { "release_id": 888888, "language_id": 1, "release_name": "YesForDistribution", "not_for_distribution": "Y", "display_upc": "UPC2", }, }, ]