"""Configuration file for pytest. This file gets picked up when running py.test tests: http://pytest.org/latest/writing_plugins.html#conftest """ from copy import deepcopy import json from unittest import mock import pytest from switchboard_consumer.kafka_message import KafkaMessage # Useful constants. SONY = 'SONY' ORCHARD = 'ORCHARD' correlation_id = 'abc123' PRODUCT = 'PRODUCT' PARTICIPANT = 'PARTICIPANT' METADATA_UPDATE = 'METADATA_UPDATE' @pytest.fixture def mock_logger(): """Mock logger.""" return mock.MagicMock() @pytest.fixture def swb_client(): """Mock SWB client.""" return mock.MagicMock() @pytest.fixture def orchard_client(): """Mock Orchard client.""" return mock.MagicMock() @pytest.fixture def create_product_message(): """Create sample Kafka message.""" message = { 'entityType': PRODUCT, 'messageType': METADATA_UPDATE, 'sendingSystem': 'SONY', 'ids': [ { 'localId': '1022869', 'system': SONY, 'businessKey': '09876543210987', 'businessKeyType': 'UPC' }], 'correlationId': correlation_id } return KafkaMessage(json.dumps(message)) @pytest.fixture def create_sme_enricher_message(): """Create sample Kafka message from SME Enricher.""" message = { 'entityType': PRODUCT, 'messageType': METADATA_UPDATE, 'sendingSystem': 'SONY', 'ids': [ { 'localId': '1022869', 'system': SONY, 'businessKey': '09876543210987', 'businessKeyType': 'UPC' }], 'correlationId': correlation_id, 'smeAnalyticsIngest': True, 'labelAccountId': 123456, 'subAccountId': 987654 } return KafkaMessage(json.dumps(message)) @pytest.fixture def switchboard_track_item_1(track_publishers): """Example of switchboard productTrack.""" return { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'D1631147620131205:' } ], 'isrc': 'USSM11307800', 'grid': None, 'displayTitle': 'TrackdDsplayTitle1', 'formalTitle': { 'titleText': 'TrackFormalTitle1', 'subTitle': 'Used for Track version' }, 'displayArtists': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'DisplayPerformer 1', 'members': [] }, 'role': 'Primary' } ], 'contributors': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '1', 'system': 'SONY', } ], 'name': 'Performer1 feat. Performer2', 'members': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '2', 'system': 'SONY', } ], 'name': 'Performer1' }, 'role': 'Performer' }, { 'sequenceNumber': 2, 'participant': { 'ids': [ { 'localId': '3', 'system': 'SONY', } ], 'name': 'Performer2' }, 'role': 'Featuring' } ] }, 'role': 'Performer' }, { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '4', 'system': 'SONY', } ], 'name': 'Producer1', 'members': [] }, 'role': 'Producer' }, { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '5', 'system': 'SONY', } ], 'name': 'Composer1', 'members': [] }, 'role': 'Composer' } ], 'metaLanguage': 'en', 'lyrics': 'Lyrics track 1', 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'masterOwnershipType': 'DISTRIBUTED', 'durationInSeconds': 323, 'parentalWarningType': 'EXPLICIT', 'pLine': '2013 Columbia Records, ' 'a Division of Sony Music Entertainment', 'recordingCountry': 'NL', 'copyrightOwnerCountry': 'BE', 'labelAccount': { 'companyCode': '15063' }, 'subAccount': None, 'publishers': track_publishers }, 'displayTitle': 'Drunk in Love', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_track_item_1_mapped(track_publishers): """Example of switchboard productTrack with mapping.""" return { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'D1631147620131205:' }, { 'system': 'ORCHARD', 'localId': '1234' } ], 'isrc': 'USSM11307800', 'grid': None, 'displayTitle': 'TrackdDsplayTitle1', 'formalTitle': { 'titleText': 'TrackFormalTitle1', 'subTitle': 'Used for Track version' }, 'displayArtists': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'DisplayPerformer 1', 'members': [] }, 'role': 'Primary' } ], 'contributors': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '1', 'system': 'SONY', } ], 'name': 'Performer1 feat. Performer2', 'members': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '2', 'system': 'SONY', } ], 'name': 'Performer1' }, 'role': 'Performer' }, { 'sequenceNumber': 2, 'participant': { 'ids': [ { 'localId': '3', 'system': 'SONY', } ], 'name': 'Performer2' }, 'role': 'Featuring' } ] }, 'role': 'Performer' }, { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '4', 'system': 'SONY', } ], 'name': 'Producer1', 'members': [] }, 'role': 'Producer' }, { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '5', 'system': 'SONY', } ], 'name': 'Composer1', 'members': [] }, 'role': 'Composer' } ], 'metaLanguage': 'en', 'lyrics': 'Lyrics track 1', 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'masterOwnershipType': 'DISTRIBUTED', 'durationInSeconds': 323, 'parentalWarningType': 'EXPLICIT', 'pLine': '2013 Columbia Records, ' 'a Division of Sony Music Entertainment', 'recordingCountry': 'NL', 'copyrightOwnerCountry': 'BE', 'labelAccount': { 'companyCode': '15063' }, 'publishers': track_publishers }, 'displayTitle': 'Drunk in Love', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_track_item_2(): """Example of switchboard productTrack.""" return { 'componentNumber': 1, 'sequenceNumber': 2, 'track': { 'ids': [ { 'system': 'SONY', 'localId': '61631149020131205:' } ], 'isrc': 'USSM11307807', 'grid': None, 'displayTitle': 'TrackdDsplayTitle2', 'formalTitle': { 'titleText': 'TrackFormalTitle2', 'subTitle': None }, 'contributors': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '7', 'system': 'SONY', } ], 'name': 'Participant1', 'members': [] }, 'role': 'Performer' } ], 'metaLanguage': 'en', 'lyrics': '', 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'masterOwnershipType': 'OWNED', 'durationInSeconds': 215, 'parentalWarningType': 'EXPLICIT', 'pLine': '2013 Columbia Records, ' 'a Division of Sony Music Entertainment', 'recordingCountry': 'BE', 'copyrightOwnerCountry': 'FR', 'labelAccount': { 'companyCode': '15063' }, }, 'displayTitle': 'XO', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_track_item_2_mapped(): """Example of switchboard productTrack with mapping.""" return { 'componentNumber': 1, 'sequenceNumber': 2, 'track': { 'ids': [ { 'system': 'SONY', 'localId': '61631149020131205:' }, { 'system': 'ORCHARD', 'localId': '1234' }, { 'system': 'ORCHARD', 'localId': '1235' } ], 'isrc': 'USSM11307807', 'grid': None, 'displayTitle': 'TrackdDsplayTitle2', 'formalTitle': { 'titleText': 'TrackFormalTitle2', 'subTitle': None }, 'contributors': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '7', 'system': 'SONY', } ], 'name': 'Participant1', 'members': [] }, 'role': 'Performer' } ], 'metaLanguage': 'en', 'lyrics': 'Lyrics track 2', 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'masterOwnershipType': 'OWNED', 'durationInSeconds': 215, 'parentalWarningType': 'EXPLICIT', 'pLine': '2013 Columbia Records, ' 'a Division of Sony Music Entertainment', 'recordingCountry': 'BE', 'copyrightOwnerCountry': 'FR', 'labelAccount': { 'companyCode': '15063' }, }, 'displayTitle': 'XO', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_track_item_with_contributor_and_artist(): """Example of switchboard productTrack.""" return { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'localId': '61631149020131205:' } ], 'isrc': 'USSM11307807', 'grid': None, 'displayTitle': 'TrackdDsplayTitle2', 'formalTitle': { 'titleText': 'TrackFormalTitle2', 'subTitle': None }, 'displayArtists': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'Primary Artist', 'members': [] }, 'role': 'Primary' } ], 'contributors': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '7', 'system': 'SONY', } ], 'name': 'A Composer', 'members': [] }, 'role': 'Composer' }, { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '8', 'system': 'SONY', } ], 'name': 'A Keyboard Performer', 'members': [] }, 'role': 'Keyboard' }, ], 'metaLanguage': 'en', 'lyrics': None, 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'durationInSeconds': 215, 'parentalWarningType': 'EXPLICIT', 'pLine': { 'pLineText': '(P) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment' }, 'recordingCountry': 'US' }, 'displayTitle': 'XO', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_track_item_with_invalid_display_artist(): """Track with a displayArtists that cannot be mapped.""" return { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'localId': '61631149020131205:' } ], 'isrc': 'USSM11307807', 'grid': None, 'displayTitle': 'TrackdDsplayTitle2', 'formalTitle': { 'titleText': 'TrackFormalTitle2', 'subTitle': None }, 'displayArtists': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'Primary Artist', 'members': [] }, 'role': 'Rap' } ], 'contributors': [], 'metaLanguage': 'en', 'lyrics': None, 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'durationInSeconds': 215, 'parentalWarningType': 'EXPLICIT', 'pLine': { 'pLineText': '(P) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment' }, 'recordingCountry': 'US' }, 'displayTitle': 'XO', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_track_item_with_invalid_display_artist_members( switchboard_track_item_with_invalid_display_artist ): """switchboard_track_item_with_invalid_display_artist_members. Track with a displayArtist that cannot be mapped and members that cannot be mapped. """ track = switchboard_track_item_with_invalid_display_artist track['track']['displayArtists'][0]['participant']['members'] = [ { 'sequenceNumber': None, 'role': 'TotallyInvalid', 'participant': { 'ids': [ { 'localId': '740645', 'system': 'SONY', } ], 'name': 'Cool Guy' } }, { 'sequenceNumber': None, 'role': 'TotallyInvalid', 'participant': { 'ids': [ { 'localId': '1162945', 'system': 'SONY', } ], 'name': 'Someone' } } ] return track @pytest.fixture def switchboard_track_item_with_compounds(): """Example of switchboard productTrack.""" return { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'localId': '61631149020131205:' } ], 'isrc': 'USSM11307807', 'grid': None, 'displayTitle': 'TrackdDsplayTitle2', 'formalTitle': { 'titleText': 'TrackFormalTitle2', 'subTitle': None }, 'displayArtists': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'Cool Guy Feat. Someone', 'members': [ { 'sequenceNumber': None, 'role': 'Primary', 'participant': { 'ids': [ { 'localId': '740645', 'system': 'SONY', } ], 'name': 'Cool Guy' } }, { 'sequenceNumber': None, 'role': 'Featured', 'participant': { 'ids': [ { 'localId': '1162945', 'system': 'SONY', } ], 'name': 'Someone' } } ] }, 'role': 'Performer' } ], 'contributors': [], 'metaLanguage': 'en', 'lyrics': None, 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'durationInSeconds': 215, 'parentalWarningType': 'EXPLICIT', 'pLine': { 'pLineText': '(P) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment' }, 'recordingCountry': 'US' }, 'displayTitle': 'XO', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def switchboard_product_with_tracks( switchboard_track_item_1, switchboard_track_item_2): """Example of switchboard product with track.""" return { 'ids': [ { 'localId': 'G010003100797Y', 'system': 'SONY' } ], 'upc': '886444407403', 'artists': [], 'formalTitle': { 'titleText': 'FORMAL_TITLE_ARTIST_NAME' }, 'localizedTitles': [], 'localizedSubTitles': [], 'catalogNumber': 'G010003100797Y', 'releaseType': 'BUNDLE', 'originalReleaseDate': None, 'salesStartDate': None, 'preOrderDate': None, 'productType': 'DIGITAL', 'metaLanguage': 'en', 'commercialType': 'COMMERCIAL', 'cLine': { 'cLineText': '(C) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment', 'localizedCLineTexts': None }, 'pLine': { 'pLineText': '(P) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment' }, 'labelAccount': None, 'subAccount': None, 'maintenanceOwner': { 'companyCode': 'C285', 'companyType': 'SME_MAINTENANCE_OWNER', 'territoryCode': 'US', 'name': 'Legacy Recordings', 'catalogOriginalOwner': None }, 'repertoireOwner': { 'companyCode': 'D658', 'companyType': 'SME_REPERTOIRE_OWNER', 'territoryCode': 'US', 'name': 'Columbia', 'catalogOriginalOwner': None }, 'imprint': { 'companyCode': 'AAAA:5166', 'companyType': 'SME_IMPRINT_LABEL', 'territoryCode': None, 'name': 'Parkwood Entertainment/Columbia', 'catalogOriginalOwner': None }, 'lastChanged': '2015-10-01 09:45:40.133', 'labelName': None, 'project': { 'ids': [ { 'localId': '1118218', 'system': 'SONY' } ], 'artist': { 'ids': [ { 'localId': '1697379', 'system': 'SONY' } ], 'name': 'PROJECT_ARTIST_NAME' } }, 'components': [{ 'sides': [{ 'productTracks': [ switchboard_track_item_1, switchboard_track_item_2 ] }] }] } @pytest.fixture def switchboard_product_with_mapped_tracks( switchboard_track_item_1_mapped, switchboard_track_item_2_mapped): """Example of switchboard product with track.""" return { 'ids': [ { 'localId': 'G010003100797Y', 'system': 'SONY' } ], 'upc': '886444407403', 'artists': [], 'formalTitle': { 'titleText': 'FORMAL_TITLE_ARTIST_NAME' }, 'localizedTitles': [], 'localizedSubTitles': [], 'catalogNumber': 'G010003100797Y', 'releaseType': 'BUNDLE', 'originalReleaseDate': None, 'salesStartDate': None, 'preOrderDate': None, 'productType': 'DIGITAL', 'metaLanguage': 'en', 'commercialType': 'COMMERCIAL', 'cLine': { 'cLineText': '(C) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment', 'localizedCLineTexts': None }, 'pLine': { 'pLineText': '(P) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment' }, 'labelAccount': None, 'subAccount': None, 'maintenanceOwner': { 'companyCode': 'C285', 'companyType': 'SME_MAINTENANCE_OWNER', 'territoryCode': 'US', 'name': 'Legacy Recordings', 'catalogOriginalOwner': None }, 'repertoireOwner': { 'companyCode': 'D658', 'companyType': 'SME_REPERTOIRE_OWNER', 'territoryCode': 'US', 'name': 'Columbia', 'catalogOriginalOwner': None }, 'imprint': { 'companyCode': 'AAAA:5166', 'companyType': 'SME_IMPRINT_LABEL', 'territoryCode': None, 'name': 'Parkwood Entertainment/Columbia', 'catalogOriginalOwner': None }, 'lastChanged': '2015-10-01 09:45:40.133', 'labelName': None, 'project': { 'ids': [ { 'localId': '1118218', 'system': 'SONY' } ], 'artist': { 'ids': [ { 'localId': '1697379', 'system': 'SONY' } ], 'name': 'PROJECT_ARTIST_NAME' } }, 'components': [{ 'sides': [{ 'productTracks': [ switchboard_track_item_1_mapped, switchboard_track_item_2_mapped ] }] }] } @pytest.fixture def valid_member_data(): """Valid member data.""" return [ { 'sequenceNumber': 1, 'role': 'Primary', 'participant': { 'ids': [ { 'localId': '377909', 'system': 'SONY', } ], 'name': 'Violator' } }, { 'sequenceNumber': 2, 'role': 'Featured', 'participant': { 'ids': [ { 'localId': '90436', 'system': 'SONY', } ], 'name': 'Busta Rhymes' } } ] @pytest.fixture def valid_contributor_data(): """Valid contributor data.""" return [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '1153182', 'system': 'SONY' } ], 'name': 'Cool Performer', 'localizedNames': [] }, 'role': 'Performer', }, { 'sequenceNumber': 2, 'participant': { 'ids': [ { 'localId': '1153183', 'system': 'SONY' } ], 'name': 'Awesome Composer', 'localizedNames': [] }, 'role': 'Composer', }, { 'sequenceNumber': 3, 'participant': { 'ids': [ { 'localId': '1153183', 'system': 'SONY' } ], 'name': 'Amazing Remixer', 'localizedNames': [] }, 'role': 'Remixer', }, ] @pytest.fixture def product_with_valid_participant_member_data(valid_member_data): """Product with valid member data.""" return { 'owningSystem': 'SONY', 'displayArtist': { 'ids': [ { 'localId': '1156249', 'system': 'SONY', } ], 'name': 'Violator feat. Busta Rhymes', 'members': valid_member_data }, 'project': { 'labelAccount': { 'companyCode': '222222', }, 'subAccount': { 'companyCode': '333333', }, } } @pytest.fixture def product_with_valid_participant_member_and_contributor_data( valid_member_data, valid_contributor_data): """Product with valid member data.""" return { 'contributors': valid_contributor_data, 'owningSystem': 'SONY', 'displayArtist': { 'ids': [ { 'localId': '1156249', 'system': 'SONY', } ], 'name': 'Violator feat. Busta Rhymes', 'members': valid_member_data }, 'project': { 'labelAccount': { 'companyCode': '222222', }, 'subAccount': { 'companyCode': '333333', }, } } @pytest.fixture def primary_artists(): """Primary artists structure.""" return [{ 'artistInfoId': 123, 'artistName': 'Test Artist', 'artistType': 'primary_artist' }] @pytest.fixture def update_product_tracks_swb_product(): """SWB getProductByUPC mock.""" return { 'labelAccount': { 'companyCode': '1234' }, 'subAccount': None, 'ids': [ { 'localId': 12345, 'system': ORCHARD }, { 'localId': 54321, 'system': SONY } ], 'components': [{ 'sides': [{ 'productTracks': [ { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'sony-id-10001' }, { "localId": '10001', "system": "ORCHARD" } ], 'isrc': 'ISRC_001', 'contributors': [], 'parentalWarningType': 'EXPLICIT' } }, { 'componentNumber': 1, 'sequenceNumber': 2, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'sony-id-10002' }, { "localId": '10002', "system": "ORCHARD" } ], 'isrc': 'ISRC_002', 'contributors': [], 'parentalWarningType': 'EXPLICIT' } }, { 'componentNumber': 1, 'sequenceNumber': 3, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'sony-id-10003' }, { "localId": '10003', "system": "ORCHARD" } ], 'isrc': 'ISRC_003', 'contributors': [], 'parentalWarningType': 'EXPLICIT' } } ] }] }] } @pytest.fixture def update_product_tracks_swb_product_with_missing_mapping(): """SWB getProductByUPC mock.""" return { 'labelAccount': { 'companyCode': '1234' }, 'subAccount': None, 'ids': [ { 'localId': 12345, 'system': ORCHARD }, { 'localId': 54321, 'system': SONY } ], 'components': [{ 'sides': [{ 'productTracks': [ { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'sony-id-10001' } ], 'isrc': 'ISRC_001', 'contributors': [], 'parentalWarningType': 'EXPLICIT' } }, { 'componentNumber': 1, 'sequenceNumber': 2, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'sony-id-10002' }, { "localId": '10002', "system": "ORCHARD" } ], 'isrc': 'ISRC_002', 'contributors': [], 'parentalWarningType': 'EXPLICIT' } }, { 'componentNumber': 1, 'sequenceNumber': 3, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'sony-id-10003' }, { "localId": '10003', "system": "ORCHARD" } ], 'isrc': 'ISRC_003', 'contributors': [], 'parentalWarningType': 'EXPLICIT' } } ] }] }] } @pytest.fixture def update_product_tracks_get_orchard_product(): """Orchard product query mock.""" return { 'productId': 12345, 'tracks': [ { 'tuid': '10001', 'isrc': 'ISRC_001', 'trackNumber': 1, 'volumeNumber': 1 }, { 'tuid': '10002', 'isrc': 'ISRC_002', 'trackNumber': 2, 'volumeNumber': 1 } ] } @pytest.fixture def update_product_tracks_insert_get_orchard_product(): """Orchard product query mock.""" return { 'productId': 12345, 'tracks': [ { 'tuid': '10001', 'isrc': 'ISRC_001', 'trackNumber': 1, 'volumeNumber': 1 }, { 'tuid': '10002', 'isrc': 'ISRC_002', 'trackNumber': 2, 'volumeNumber': 1 } ] } @pytest.fixture def update_product_tracks_insert_get_orchard_product_before_arrangement(): """Orchard product query mock.""" return { 'productId': 12345, 'tracks': [ { 'tuid': '10001', 'isrc': 'ISRC_001', 'trackNumber': 1, 'volumeNumber': 1 }, { 'tuid': '10002', 'isrc': 'ISRC_002', 'trackNumber': 2, 'volumeNumber': 1 }, { 'tuid': '10003', 'isrc': 'ISRC_003', 'trackNumber': 3, 'volumeNumber': 1 } ] } @pytest.fixture def update_product_tracks_delete_get_orchard_product(): """Orchard product query mock.""" return { 'productId': 12345, 'tracks': [ { 'tuid': '10001', 'isrc': 'ISRC_001', 'trackNumber': 1, 'volumeNumber': 1 }, { 'tuid': '10002', 'isrc': 'ISRC_002', 'trackNumber': 2, 'volumeNumber': 1 }, { 'tuid': '10003', 'isrc': 'ISRC_003', 'trackNumber': 3, 'volumeNumber': 1 }, { 'tuid': '10004', 'isrc': 'ISRC_004', 'trackNumber': 4, 'volumeNumber': 1 } ] } @pytest.fixture def update_product_tracks_delete_get_orchard_product_before_arrangement(): """Orchard product query mock.""" return { 'productId': 12345, 'tracks': [ { 'tuid': '10001', 'isrc': 'ISRC_001', 'trackNumber': 1, 'volumeNumber': 1 }, { 'tuid': '10002', 'isrc': 'ISRC_002', 'trackNumber': 2, 'volumeNumber': 1 }, { 'tuid': '10003', 'isrc': 'ISRC_003', 'trackNumber': 3, 'volumeNumber': 1 } ] } @pytest.fixture def update_track_payload(): """Fixture for TRACK:METADATA_UPDATE message.""" payload = { 'sendingSystem': 'SONY', 'entityType': 'TRACK', 'messageType': 'METADATA_UPDATE', 'messageId': 'efgertertrew', 'correlationId': 'r8j49hj389dhs93he', 'messageCreatedDateTime': '2019-01-01T00:00:00.000Z', 'entityUpdatedDateTime': '2019-01-01T00:00:00.000Z', 'ids': [ { 'localId': '101', 'businessKey': 'ABCDE12354567', 'businessKeyType': 'ISRC', 'system': 'SONY' }, { 'localId': '1001', 'businessKey': 'ABCDE12354567', 'businessKeyType': 'ISRC', 'system': 'ORCHARD' }, { 'localId': '2001', 'businessKey': 'ABCDE12354567', 'businessKeyType': 'ISRC', 'system': 'ORCHARD' } ] } return KafkaMessage(json.dumps(payload)) @pytest.fixture def track_samples_body(): """Track sample fixture.""" return [ { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue', 'notes': 'sample notes', 'durationInSeconds': 123, 'displayArtists': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '10856', 'system': 'SONY' } ], 'name': 'Gene Vincent', 'members': [] }, 'role': 'Performer' } ], 'contributors': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '358686', 'system': 'SONY' } ], 'name': 'Robert Jones', 'members': [] }, 'role': 'Composer' }, { 'sequenceNumber': 2, 'participant': { 'ids': [ { 'localId': '358686', 'system': 'SONY' } ], 'name': 'Robert Jones', 'members': [] }, 'role': 'Lyricist' }, { 'sequenceNumber': 3, 'participant': { 'ids': [ { 'localId': '10856', 'system': 'SONY' } ], 'name': 'Gene Vincent', 'members': [] }, 'role': 'Composer' }, { 'sequenceNumber': 4, 'participant': { 'ids': [ { 'localId': '10856', 'system': 'SONY' } ], 'name': 'Gene Vincent', 'members': [] }, 'role': 'Lyricist' }, { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '358686', 'system': 'SONY' } ], 'name': 'Robert Producer', 'members': [] }, 'role': 'Producer' } ] } ] @pytest.fixture def track_samples_body_with_valid_compound_artists(): """Track sample with compound artist fixture.""" return [ { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'He Cant Love U', 'durationInSeconds': 0, 'notes': '', 'displayArtists': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '46317', 'system': 'SONY' } ], 'name': 'Jagged Edge', 'members': [ { 'sequenceNumber': 1, 'role': 'Performer', 'participant': { 'ids': [ { 'localId': '405760', 'system': 'SONY' } ], 'name': 'Brian D. Casey' } }, { 'sequenceNumber': 2, 'role': 'Performer', 'participant': { 'ids': [ { 'localId': '843621', 'system': 'SONY' } ], 'name': 'Richard G. Wingo' } }, { 'sequenceNumber': 3, 'role': 'Original', 'participant': { 'ids': [ { 'localId': '844197', 'system': 'SONY' } ], 'name': 'Kyle L. Norman' } }, { 'sequenceNumber': 4, 'role': 'Original', 'participant': { 'ids': [ { 'localId': '405759', 'system': 'SONY' } ], 'name': 'Brandon D. Casey' } } ] }, 'role': 'Performer' } ], 'contributors': [] } ] @pytest.fixture def track_samples_body_with_not_valid_compound_artists(): """Track sample with compound artist fixture.""" return [ { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'He Cant Love U', 'durationInSeconds': 0, 'notes': '', 'displayArtists': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '46317', 'system': 'SONY' } ], 'name': 'Jagged Edge', 'members': [ { 'sequenceNumber': 1, 'role': 'Original', 'participant': { 'ids': [ { 'localId': '405760', 'system': 'SONY' } ], 'name': 'Brian D. Casey' } }, { 'sequenceNumber': 2, 'role': 'Original', 'participant': { 'ids': [ { 'localId': '843621', 'system': 'SONY' } ], 'name': 'Richard G. Wingo' } }, { 'sequenceNumber': 3, 'role': 'Original', 'participant': { 'ids': [ { 'localId': '844197', 'system': 'SONY' } ], 'name': 'Kyle L. Norman' } }, { 'sequenceNumber': 4, 'role': 'Original', 'participant': { 'ids': [ { 'localId': '405759', 'system': 'SONY' } ], 'name': 'Brandon D. Casey' } } ] }, 'role': 'Performer' } ], 'contributors': [ { 'sequenceNumber': 1, 'participant': { 'ids': [ { 'localId': '206043', 'system': 'SONY' } ], 'name': 'Brandon Casey', 'members': [] }, 'role': 'Composer' }, { 'sequenceNumber': 2, 'participant': { 'ids': [ { 'localId': '206043', 'system': 'SONY' } ], 'name': 'Brandon Casey', 'members': [] }, 'role': 'Lyricist' }, { 'sequenceNumber': 3, 'participant': { 'ids': [ { 'localId': '148993', 'system': 'SONY' } ], 'name': 'Brian Casey', 'members': [] }, 'role': 'Composer' }, { 'sequenceNumber': 4, 'participant': { 'ids': [ { 'localId': '148993', 'system': 'SONY' } ], 'name': 'Brian Casey', 'members': [] }, 'role': 'Lyricist' }, { 'sequenceNumber': 5, 'participant': { 'ids': [ { 'localId': '418942', 'system': 'SONY' } ], 'name': 'Bryan Cox', 'members': [] }, 'role': 'Composer' }, { 'sequenceNumber': 6, 'participant': { 'ids': [ { 'localId': '418942', 'system': 'SONY' } ], 'name': 'Bryan Cox', 'members': [] }, 'role': 'Lyricist' } ] } ] @pytest.fixture def track_publishers(): """Fixture for track publishers.""" return [ { 'name': 'B-Day Publishing', 'territoryCode': '99', 'ids': [] }, { 'name': 'Solange MVP Publishing', 'territoryCode': '99', 'ids': [] }, { 'name': 'Music World, LLC', 'territoryCode': '99', 'ids': [] }, { 'name': 'Universal Tunes', 'territoryCode': '99', 'ids': [] }, { 'name': 'Songs Of Universal Inc.', 'territoryCode': '99', 'ids': [] }] @pytest.fixture def track_samples_with_unique_names(): """Track sample fixture.""" return [ { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue 1' }, { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue 2' }, { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue 3' } ] @pytest.fixture def track_samples_with_duplicate_names(): """Track sample fixture with duplicate names.""" return [ { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue 1' }, { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue 2' }, { 'sampleType': 'ORIGINAL_RECORDING', 'displayTitle': 'Baby Blue 1' } ] @pytest.fixture def track_with_performers(): """Example of switchboard productTrack.""" return { 'componentNumber': 1, 'sequenceNumber': 1, 'track': { 'ids': [ { 'system': 'SONY', 'localId': 'D1631147620131205:' } ], 'isrc': 'USSM11307800', 'grid': None, 'displayTitle': 'TrackdDsplayTitle1', 'formalTitle': { 'titleText': 'TrackFormalTitle1', 'subTitle': None }, 'displayArtists': [ { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'DisplayPerformer 1', 'members': [] }, 'role': 'Performer' }, { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '80', 'system': 'SONY', } ], 'name': 'Cool Guy Feat. Someone', 'members': [ { 'sequenceNumber': None, 'role': 'Primary', 'participant': { 'ids': [ { 'localId': '740645', 'system': 'SONY', } ], 'name': 'Cool Guy' } }, { 'sequenceNumber': None, 'role': 'Featured', 'participant': { 'ids': [ { 'localId': '1162945', 'system': 'SONY', } ], 'name': 'Someone' } } ] }, 'role': 'Performer' } ], 'contributors': [ # Primary { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '6', 'system': 'SONY', } ], 'name': 'Performer1', 'members': [] }, 'role': 'Performer' }, # Compound contributor with primary and featuring { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '80', 'system': 'SONY', } ], 'name': 'Cool Guy Feat. Someone', 'members': [ { 'sequenceNumber': None, 'role': 'Primary', 'participant': { 'ids': [ { 'localId': '740645', 'system': 'SONY', } ], 'name': 'Cool Guy' } }, { 'sequenceNumber': None, 'role': 'Featured', 'participant': { 'ids': [ { 'localId': '1162945', 'system': 'SONY', } ], 'name': 'Someone' } } ] }, 'role': 'Voice' }, # Non featuring { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '400', 'system': 'SONY', } ], 'name': 'NonFeaturingPerformer', 'members': [] }, 'role': 'Piano' }, # Non featuring but mappable role { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '401', 'system': 'SONY', } ], 'name': 'NonFeaturingMappableRole', 'members': [] }, 'role': 'UserDefined:Chanting' }, # Ignored { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '4', 'system': 'SONY', } ], 'name': 'Producer1', 'members': [] }, 'role': 'Producer' }, # Ignored { 'sequenceNumber': None, 'participant': { 'ids': [ { 'localId': '5', 'system': 'SONY', } ], 'name': 'Composer1', 'members': [] }, 'role': 'Composer' } ], 'metaLanguage': 'en', 'lyrics': 'Lyrics track 1', 'trackMedia': 'AUDIO', 'trackType': 'TRACK', 'videoType': None, 'masterOwnershipType': 'DISTRIBUTED', 'durationInSeconds': 323, 'parentalWarningType': 'EXPLICIT', 'pLine': { 'pLineText': '(p) 2013 Columbia Records, ' 'a Division of Sony Music Entertainment' }, 'recordingCountry': 'NL', 'copyrightOwnerCountry': 'BE', 'labelAccount': { 'companyCode': '15063' }, }, 'displayTitle': 'Drunk in Love', 'localTrackId': None, 'localTrackTerritoryCode': None } @pytest.fixture def video_single_product(): """Fixture for VIDEO_SINGLE product.""" return { 'displayTitle': 'Video Single Product', 'productType': 'DIGITAL', 'releaseType': 'VIDEO_SINGLE', 'displayArtist': { 'name': 'Adele', 'ids': [ { 'system': 'SONY', 'localId': '1003674' } ], 'members': [], }, 'contributors': [ { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '1003674' } ], 'name': 'Adele Performer Contributor 1' }, 'role': 'Performer' } ], 'productTracks': [{ 'track': { 'displayTitle': 'Video single the only track', 'displayArtists': { 'name': 'Adele', 'ids': [ { 'system': 'SONY', 'localId': '1003674' } ] }, 'trackName': 'Video 1', 'contributors': [ { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '1003213' } ], 'name': 'Adele Performer Contributor 2' }, 'role': 'Performer' } ], } }], 'project': { 'labelAccount': { 'companyCode': 12345 } } } @pytest.fixture def video_track_single_display_artists_with_contributors(): """Return video track with single display artist.""" return { 'displayArtists': [ { 'participant': { 'name': 'Beyoncé', 'members': [] }, 'role': 'Performer' } ], 'contributors': [ { 'role': 'Composer', 'participant': { 'name': 'Kirby Lauryen', 'members': [] } }, { 'role': 'Lyricist', 'participant': { 'name': 'Kirby Lauryen', 'members': [] } }, { 'role': 'Producer', 'participant': { 'name': 'Beyoncé', 'members': [] } }, { 'role': 'Lyricist', 'participant': { 'name': 'Beyoncé', 'members': [] } } ] } @pytest.fixture def display_artist_no_members(): """Return display artist with no members.""" return { 'participant': { 'name': 'Beyoncé feat Jay-Z', 'members': [] }, 'role': 'Performer', } @pytest.fixture def display_artist_not_compound_members(): """Return display artist with not compound members.""" return { 'participant': { 'name': 'Beyoncé feat Jay-Z', 'members': [ { 'role': 'Original', 'participant': { 'name': 'Beyoncé', 'members': [] } }, { 'role': 'Original', 'participant': { 'name': 'Jay-Z', 'members': [] } } ] }, 'role': 'Performer', } @pytest.fixture def display_artist_compound_members(): """Return display artist with not compound members.""" return { 'participant': { 'name': 'Beyoncé feat Jay-Z', 'members': [ { 'role': 'Primary', 'participant': { 'name': 'Beyoncé', 'members': [] } }, { 'role': 'With', 'participant': { 'name': 'Jay-Z', 'members': [] } } ] }, 'role': 'Performer', } @pytest.fixture def video_single_product_with_compound_and_not_track_display_artists(): """Return video single product with compound and not compound artists.""" return { 'productTracks': [{ 'track': { 'displayTitle': 'Video single the only track', 'displayArtists': [ { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10001' } ], 'name': 'Name Single', 'members': [] }, 'role': 'Performer' }, { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10002' } ], 'name': 'Name Compound', 'members': [ { 'role': 'Primary', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10003' } ], 'name': 'Name SubCompound 1', 'members': [] } }, { 'role': 'With', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10004' } ], 'name': 'Name SubCompound 2', 'members': [] } } ] }, 'role': 'Performer' }, { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10005' } ], 'name': 'Name Non Compound', 'members': [ { 'role': 'Primary', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10006' } ], 'name': 'Name NonSubCompound 1', 'members': [] } }, { 'role': 'Original', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '10007' } ], 'name': 'Name NonSubCompound 2', 'members': [] } } ] }, 'role': 'Performer' } ], 'trackName': 'Video 1', 'contributors': [ { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '1003213' } ], 'name': 'Adele Performer Contributor 2' }, 'role': 'Performer' } ], } }], 'project': { 'labelAccount': { 'companyCode': 12345 } } } @pytest.fixture def video_single_compound_contributor(): """Return video single track compound contributor.""" return { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '1003213' } ], 'name': 'Compound Participant', 'members': [ { 'role': 'Primary', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '101' } ], 'name': 'Primary Composer', 'members': [] }, }, { 'role': 'With', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '102' } ], 'name': 'With Composer', 'members': [] }, }, { 'role': 'Featured', 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '103' } ], 'name': 'Featured Composer', 'members': [] }, } ] }, 'role': 'Composer' } @pytest.fixture def video_single_regular_contributor(): """Return video single track compound contributor.""" return { 'participant': { 'ids': [ { 'system': 'SONY', 'localId': '1000001' } ], 'name': 'Regular Producer', 'members': [] }, 'role': 'Producer' } @pytest.fixture def video_single_product_with_track_compound_contributor( video_single_compound_contributor): """Return video single product with track compound contributor.""" return { 'productTracks': [{ 'track': { 'displayTitle': 'Video single the only track', 'trackName': 'Video 1', 'contributors': [ video_single_compound_contributor ], } }], 'project': { 'labelAccount': { 'companyCode': 12345 } } } @pytest.fixture def video_single_product_with_track_contributors( video_single_compound_contributor, video_single_regular_contributor): """Return video single product with track compound contributor.""" return { 'productTracks': [{ 'track': { 'displayTitle': 'Video single the only track', 'trackName': 'Video 1', 'contributors': [ video_single_compound_contributor, video_single_regular_contributor ], } }], 'project': { 'labelAccount': { 'companyCode': 12345 } } } @pytest.fixture def video_single_product_with_display_artist( video_single_compound_contributor, video_single_regular_contributor): """Return video single product with display_artist.""" return { 'displayArtist': { 'ids': [{ 'localId': '10001', 'system': 'SONY' }], 'name': 'Michael Jackson', 'members': [] }, 'project': { 'labelAccount': { 'companyCode': 12345 } } } @pytest.fixture def orchard_product(): """Orchard Product as returned from getProductByUpc method.""" return { 'ids': [ { 'localId': '2756755', 'system': 'ORCHARD' } ], 'upc': '886444021630', 'displayArtist': { 'ids': [ { 'localId': '99999', 'system': 'SONY' }, { 'localId': 'AIID:1758524', 'system': 'ORCHARD' }, { 'localId': 'AIID:434496', 'system': 'ORCHARD' } ], 'name': 'Various', 'members': None }, 'contributors': [], 'formalTitle': { 'titleText': 'Best Of Vangelis' }, 'localizedTitles': [], 'localizedSubTitles': [], 'catalogNumber': 'SONY:id:1142450', 'releaseType': 'ALBUM', 'originalReleaseDate': None, 'salesStartDate': None, 'preOrderDate': None, 'productType': 'DIGITAL', 'metaLanguage': None, 'commercialType': 'COMMERCIAL', 'genres': [], 'cLine': { 'cLineText': '(C) 2013 Sony Music Entertainment', 'localizedCLineTexts': [] }, 'pLine': None, 'labelAccount': { 'companyCode': '21989', 'companyType': 'ORCH_LABEL', 'territoryCode': None, 'name': 'Thirty Tigers', 'catalogOriginalOwner': 'RED' }, 'subAccount': { 'companyCode': '8441', 'companyType': 'ORCH_SUB_ACCOUNT', 'territoryCode': None, 'name': 'REM TODO', 'catalogOriginalOwner': None }, 'maintenanceOwner': None, 'repertoireOwner': None, 'imprint': None, 'lastChanged': None, 'labelName': 'SMART', 'project': { 'ids': [ { 'localId': '4288502', 'system': 'ORCHARD' } ], 'artist': { 'ids': [ { 'localId': 'AIID:1758593', 'system': 'ORCHARD' } ], 'name': 'Various' }, 'labelAccount': { 'companyCode': '21989' }, 'subAccount': { 'companyCode': '8441' } }, 'productTracks': [], 'switchboardExtensions': None, 'description': None } sony_product_response = { 'ids': [ { 'localId': 'G010002991348N', 'system': 'SONY' }, { 'localId': '2756755', 'system': 'ORCHARD' } ], 'upc': '886444021630', 'displayArtist': { 'ids': [ { 'localId': '99999', 'system': 'SONY' }, { 'localId': 'AIID:1758524', 'system': 'ORCHARD' }, { 'localId': 'AIID:434496', 'system': 'ORCHARD' } ], 'name': 'Various', 'members': [] }, 'contributors': [], 'formalTitle': { 'titleText': 'Best Of Vangelis' }, 'localizedTitles': [], 'localizedSubTitles': [], 'catalogNumber': 'G010002991348N', 'releaseType': 'ALBUM', 'originalReleaseDate': None, 'salesStartDate': None, 'preOrderDate': None, 'productType': 'DIGITAL', 'metaLanguage': None, 'commercialType': 'COMMERCIAL', 'genres': [ { 'system': 'SONY', 'genreId': 496, 'subGenres': [] }, { 'system': 'ORCHARD', 'genreId': 1, 'subGenres': [] } ], 'cLine': { 'cLineText': '(C) 2013 Sony Music Entertainment', 'localizedCLineTexts': None }, 'pLine': { 'pLineText': '(P) 2013 Sony Music Entertainment' }, 'labelAccount': { 'companyCode': '21989', 'companyType': 'ORCH_LABEL', 'territoryCode': None, 'name': 'Thirty Tigers', 'catalogOriginalOwner': None }, 'subAccount': { 'companyCode': '8441', 'companyType': 'ORCH_SUB_ACCOUNT', 'territoryCode': None, 'name': 'Thirty Tigers', 'catalogOriginalOwner': None }, 'maintenanceOwner': { 'companyCode': '0203', 'companyType': 'SME_MAINTENANCE_OWNER', 'territoryCode': 'FR', 'name': 'SME France SAS', 'catalogOriginalOwner': None }, 'repertoireOwner': { 'companyCode': '0203', 'companyType': 'SME_REPERTOIRE_OWNER', 'territoryCode': 'FR', 'name': 'SME France SAS', 'catalogOriginalOwner': None }, 'imprint': { 'companyCode': 'AAAA:5365', 'companyType': 'SME_IMPRINT_LABEL', 'territoryCode': None, 'name': 'SMART', 'catalogOriginalOwner': None }, 'lastChanged': '2015-11-30 03:01:00.947', 'labelName': None, 'project': { 'ids': [ { 'localId': '1142450', 'system': 'SONY' }, { 'localId': '4288502', 'system': 'ORCHARD' } ], 'artist': { 'ids': [ { 'localId': '99999', 'system': 'SONY' }, { 'localId': 'AIID:1758524', 'system': 'ORCHARD' }, { 'localId': 'AIID:434496', 'system': 'ORCHARD' } ], 'name': 'Various' }, 'labelAccount': { 'companyCode': '21989' }, 'subAccount': { 'companyCode': '8441' } }, 'productTracks': [], 'switchboardExtensions': { 'governingDeal': { 'dealResponsibilities': [ { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '1', 'name': 'A&R Administration' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '2', 'name': 'Copyright Administration' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '3', 'name': 'Artist Royalty Administration' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '4', 'name': 'Digital Distribution' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '5', 'name': 'Physical Distribution' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '6', 'name': 'Licensing' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '7', 'name': 'Radio Promotion' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '8', 'name': 'Marketing' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '9', 'name': 'Advertising' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '10', 'name': 'Digital Retail Sales' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '11', 'name': 'Physical Retail Sales' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '12', 'name': 'Performance Collections' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '13', 'name': 'Payments' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '14', 'name': 'Analytics' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] } ] } }, 'description': None } sony_product_response_with_featured_to_primary = { 'ids': [ { 'localId': 'G010002991348N', 'system': 'SONY' }, { 'localId': '2756755', 'system': 'ORCHARD' } ], 'upc': '886444021630', 'displayArtist': { 'ids': [ { 'localId': '99999', 'system': 'SONY' }, { 'localId': 'AIID:1758524', 'system': 'ORCHARD' }, { 'localId': 'AIID:434496', 'system': 'ORCHARD' } ], 'name': 'Various', 'members': [ { "sequenceNumber": 1, "role": "Featured To Primary (with Artist in Title)", "participant": { "ids": [ { "localId": "1254997", "system": "SONY" }, { "localId": "AIID:2330241", "system": "ORCHARD" }, { "localId": "77111727", "system": "SONY_JAPAN" } ], "name": "Tatsuhiro Murayama", "spotifyUri": None, "appleId": None } }, ] }, 'contributors': [], 'formalTitle': { 'titleText': 'Best Of Vangelis' }, 'localizedTitles': [], 'localizedSubTitles': [], 'catalogNumber': 'G010002991348N', 'releaseType': 'ALBUM', 'originalReleaseDate': None, 'salesStartDate': None, 'preOrderDate': None, 'productType': 'DIGITAL', 'metaLanguage': None, 'commercialType': 'COMMERCIAL', 'genres': [ { 'system': 'SONY', 'genreId': 496, 'subGenres': [] }, { 'system': 'ORCHARD', 'genreId': 1, 'subGenres': [] } ], 'cLine': { 'cLineText': '(C) 2013 Sony Music Entertainment', 'localizedCLineTexts': None }, 'pLine': { 'pLineText': '(P) 2013 Sony Music Entertainment' }, 'labelAccount': { 'companyCode': '21989', 'companyType': 'ORCH_LABEL', 'territoryCode': None, 'name': 'Thirty Tigers', 'catalogOriginalOwner': None }, 'subAccount': { 'companyCode': '8441', 'companyType': 'ORCH_SUB_ACCOUNT', 'territoryCode': None, 'name': 'Thirty Tigers', 'catalogOriginalOwner': None }, 'maintenanceOwner': { 'companyCode': '0203', 'companyType': 'SME_MAINTENANCE_OWNER', 'territoryCode': 'FR', 'name': 'SME France SAS', 'catalogOriginalOwner': None }, 'repertoireOwner': { 'companyCode': '0203', 'companyType': 'SME_REPERTOIRE_OWNER', 'territoryCode': 'FR', 'name': 'SME France SAS', 'catalogOriginalOwner': None }, 'imprint': { 'companyCode': 'AAAA:5365', 'companyType': 'SME_IMPRINT_LABEL', 'territoryCode': None, 'name': 'SMART', 'catalogOriginalOwner': None }, 'lastChanged': '2015-11-30 03:01:00.947', 'labelName': None, 'project': { 'ids': [ { 'localId': '1142450', 'system': 'SONY' }, { 'localId': '4288502', 'system': 'ORCHARD' } ], 'artist': { 'ids': [ { 'localId': '99999', 'system': 'SONY' }, { 'localId': 'AIID:1758524', 'system': 'ORCHARD' }, { 'localId': 'AIID:434496', 'system': 'ORCHARD' } ], 'name': 'Various' }, 'labelAccount': { 'companyCode': '21989' }, 'subAccount': { 'companyCode': '8441' } }, 'productTracks': [], 'switchboardExtensions': { 'governingDeal': { 'dealResponsibilities': [ { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '1', 'name': 'A&R Administration' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '2', 'name': 'Copyright Administration' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '3', 'name': 'Artist Royalty Administration' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '4', 'name': 'Digital Distribution' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '5', 'name': 'Physical Distribution' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '6', 'name': 'Licensing' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '7', 'name': 'Radio Promotion' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '8', 'name': 'Marketing' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '9', 'name': 'Advertising' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '10', 'name': 'Digital Retail Sales' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '11', 'name': 'Physical Retail Sales' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '12', 'name': 'Performance Collections' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '13', 'name': 'Payments' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] }, { 'dealResponsibilityType': { 'dealResponsibilityTypeId': '14', 'name': 'Analytics' }, 'appliesTo': 'WORLDWIDE', 'assignments': [ { 'scope': None, 'system': 'SONY', 'territories': [] } ] } ] } }, 'description': None } @pytest.fixture def sony_product(): """Sony Product as returned from getProductByUpc method.""" return sony_product_response @pytest.fixture def sony_product_featured_to_primary(): """Sony Product with featured to primary role.""" return sony_product_response_with_featured_to_primary @pytest.fixture def pre_processed_sony_product(): """Pre processed Sony Product.""" copied_sony_product = deepcopy(sony_product_response) copied_sony_product['cLine']['cLineText'] = '2013 Sony Music Entertainment' copied_sony_product['pLine']['pLineText'] = '2013 Sony Music Entertainment' return copied_sony_product @pytest.fixture() def get_product_by_upc_response(switchboard_track_item_1): """get_product_by_upc response fixture.""" # We were originally calling a fixture directly that is not # supported anymore in later versions of pytest return { 'ids': None, 'displayArtist': { 'ids': { 'localId': '12345', 'system': 'SONY' }, 'name': 'Edguy' }, 'formalTitle': {'titleText': 'cool product', 'subText': 'cool version text'}, 'labelAccount': { 'companyCode': '1234', }, 'subAccount': None, 'project': { 'ids': [ { 'system': 'SONY', 'localId': '12345', }, { 'system': 'ORCHARD', 'localId': '1978731', }, ] }, 'productTracks': [ switchboard_track_item_1 ], 'releaseType': 'DIGITAL_AUDIO' } @pytest.fixture() def create_track_processing_result_fixture(): return {'correlationId': 'abc123', 'entityType': 'TRACK', 'errors': [], 'ids': [ { 'businessKey': 'ISRC_003', 'businessKeyType': 'ISRC', 'localId': 'sony-id-10003', 'system': 'SONY' }, { 'businessKey': 'ISRC_003', 'businessKeyType': 'ISRC', 'localId': '10003', 'system': 'ORCHARD' } ], 'messageType': 'PROCESSING_RESULT', 'sendingSystem': 'ORCHARD' }