"""Test helpers.""" import base64 import json import pytest from typing import Any from typing import Dict sample_messages = [ { 'sound_recording_id': 'f3264ab8-5906-467c-b833-2f88a855d715', 'previous_version_id': 'feAkma7WP4osPufv_m92omdT6W0gSgZh', 'version_id': 'vACnV1.hjMTXqJZpeDavex01soaQBNSr', 'updated': True, 'last_modified': '2023-05-31T23:34:36+00:00', 'tracks_isrcs': [ 'US3R22224518' ] }, { 'sound_recording_id': '93933c26-c3c3-41f1-8f9c-aa5e7e47ad10', 'previous_version_id': None, 'version_id': 'H27__M3cg4pdFzRIFp4b_QFcZtzOmdp6', 'updated': True, 'last_modified': '2023-12-11T17:54:02+00:00', 'tracks_isrcs': [ 'NOHCM0701200' ] } ] def msk_event(kafka_messages): """Create records in MSK-Lambda connector format.""" records = [] for message in kafka_messages: record: Dict[str, Any] = { 'headers': [], 'key': message['sound_recording_id'] if 'sound_recording_id' in message else 'key-123', 'offset': 1, 'partition': 0, 'timestamp': 1634921120616, 'timestampType': 'CREATE_TIME', 'topic': 'event.sr.newVersion', 'value': base64.b64encode(json.dumps(message).encode('utf-8')).decode('utf-8') } records.append(record) result = { 'bootstrapServers': 'kafka-servers', 'eventSource': 'aws:kafka', 'eventSourceArn': 'arn:aws:kafka:us-east-1:437795906767:cluster/cdc/uuid', # noqa:E501 'records': { 'event.sr.newVersion-0': records } } return result @pytest.fixture def mock_asset(): """Create a mock asset with default values.""" return { 'uuid': 'b3955ca9-bfb0-4d09-8f18-9eb4fd8737ff', 'filename': '90e575bd-94a5-4a3e-9f1f-dade36feb8c3', 'extension': 'flac' } @pytest.fixture def mock_incorrect_extension_asset(): """Create a mock asset with incorrect extension.""" return { 'uuid': 'b3955ca9-bfb0-4d09-8f18-9eb4fd8737ff', 'filename': '90e575bd-94a5-4a3e-9f1f-dade36feb8c3', 'extension': 'exe' } @pytest.fixture def sound_recording_metadata_no_rules(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [], 'product': { 'label': { 'type': 'Vendor', 'rules': [], } }, 'tuid': '123', 'isrc': 'ABC', }, { 'rules': [], 'product': { 'label': { 'type': 'Subaccount', 'rules': [], 'vendor': { 'rules': [] } }, }, 'tuid': '456', 'isrc': 'DEF', } ] }, 'assets': [mock_asset] } @pytest.fixture def sound_recording_metadata(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 2' } ], 'ddex_property': 1, 'offer_type': '2', 'product': { 'label': { 'type': 'Vendor', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 4' } ], } } }, { 'rules': [ { 'service': 'other_service', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 2' }, { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 3' } ], 'ddex_property': 1, 'offer_type': '1', 'product': { 'label': { 'type': 'Subaccount', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 4' } ], 'vendor': { 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 5' } ] } }, } } ] }, 'assets': [mock_asset] } @pytest.fixture def previous_sound_recording_metadata(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 1' } ], 'ddex_property': 1, 'offer_type': '1', 'product': { 'label': { 'type': 'Vendor', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 1' } ] } } }, { 'rules': [ { 'service': 'other_service', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 2' }, { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 3' } ], 'ddex_property': 1, 'offer_type': '1', 'product': { 'label': { 'type': 'Subaccount', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 4' } ], 'vendor': { 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 5' } ] } }, } } ] }, 'assets': [mock_asset] } @pytest.fixture def new_osr_event_input(): """Create new OSR event input for testing.""" return [ { 'sound_recording_id': '93933c26-c3c3-41f1-8f9c-aa5e7e47ad10', 'previous_version_id': None, 'version_id': 'H27__M3cg4pdFzRIFp4b_QFcZtzOmdp6', 'updated': True, 'last_modified': '2023-12-11T17:54:02+00:00', 'tracks_isrcs': ['NOHCM0701200'] } ] @pytest.fixture def new_osr_no_isrcs_event_input(): """Create new OSR event input for testing.""" return [ { 'sound_recording_id': '93933c26-c3c3-41f1-8f9c-aa5e7e47ad10', 'previous_version_id': None, 'version_id': 'H27__M3cg4pdFzRIFp4b_QFcZtzOmdp6', 'updated': True, 'last_modified': '2023-12-11T17:54:02+00:00', 'tracks_isrcs': [] } ] @pytest.fixture def updated_osr_event_input(): """Create updated OSR event input for testing.""" return [ { 'sound_recording_id': '93933c26-c3c3-41f1-8f9c-aa5e7e47ad10', 'previous_version_id': 'nWBBjElAYbMftFAd8NpQRB94O7cv9nQB', 'version_id': 'H27__M3cg4pdFzRIFp4b_QFcZtzOmdp6', 'updated': True, 'last_modified': '2023-12-11T17:54:02+00:00', 'tracks_isrcs': ['NOHCM0701200'] } ] @pytest.fixture def sound_recording_metadata_track_level_carveouts(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'carveout', 'created_by': 'user 2' } ], 'ddex_property': 1, 'offer_type': '2', 'product': { 'label': { 'type': 'Vendor', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 4' } ], } } }, { 'rules': [ { 'service': 'other_service', 'territory': 'US', 'policy': 'carveout', 'created_by': 'user 2' }, { 'service': 'youtube', 'territory': 'DE', 'policy': 'carveout', 'created_by': 'user 3' } ], 'ddex_property': 1, 'offer_type': '1', 'product': { 'label': { 'type': 'Subaccount', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 4' } ], 'vendor': { 'rules': [ { 'service': 'youtube', 'territory': 'DE', 'policy': 'monetize', 'created_by': 'user 5' } ] } }, } } ] }, 'assets': [mock_asset] } @pytest.fixture def sound_recording_metadata_track_level_global_carveouts(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [ { 'service': 'youtube', 'territory': '*', 'policy': 'carveout', 'created_by': 'user 2' } ], 'ddex_property': 1, 'offer_type': '2', 'product': { 'label': { 'type': 'Vendor', 'rules': [ { 'service': 'youtube', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 4' } ], } } } ] }, 'assets': [mock_asset] } @pytest.fixture def sound_recording_metadata_subaccount_level_carveouts(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [ { 'service': 'other_service', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 2' }, { 'service': 'youtube', 'territory': 'DE', 'policy': 'monetize', 'created_by': 'user 3' } ], 'ddex_property': 1, 'offer_type': '1', 'product': { 'label': { 'type': 'Subaccount', 'rules': [ { 'service': 'youtube', 'territory': 'DE', 'policy': 'carveout', 'created_by': 'user 4' } ], 'vendor': { 'rules': [ { 'service': 'youtube', 'territory': 'DE', 'policy': 'monetize', 'created_by': 'user 5' } ] } }, } } ] }, 'assets': [mock_asset] } @pytest.fixture def sound_recording_metadata_vendor_level_carveouts(mock_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [ { 'service': 'other_service', 'territory': 'US', 'policy': 'monetize', 'created_by': 'user 2' }, { 'service': 'youtube', 'territory': 'DE', 'policy': 'monetize', 'created_by': 'user 3' } ], 'ddex_property': 1, 'offer_type': '1', 'product': { 'label': { 'type': 'Vendor', 'rules': [ { 'service': 'youtube', 'territory': 'DE', 'policy': 'carveout', 'created_by': 'user 5' } ] }, } } ] }, 'assets': [mock_asset] } @pytest.fixture def sound_recording_metadata_incorrect_assets(mock_incorrect_extension_asset): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [], 'product': { 'label': { 'type': 'Vendor', 'rules': [], } }, 'tuid': '123', 'isrc': 'ABC', }, { 'rules': [], 'product': { 'label': { 'type': 'Subaccount', 'rules': [], 'vendor': { 'rules': [] } }, }, 'tuid': '456', 'isrc': 'DEF', } ] }, 'assets': [mock_incorrect_extension_asset] } @pytest.fixture def sound_recording_metadata_no_assets(): # noqa: D103 return { 'track_connection': { 'tracks': [ { 'rules': [], 'product': { 'label': { 'type': 'Vendor', 'rules': [], } }, 'tuid': '123', 'isrc': 'ABC', }, { 'rules': [], 'product': { 'label': { 'type': 'Subaccount', 'rules': [], 'vendor': { 'rules': [] } }, }, 'tuid': '456', 'isrc': 'DEF', } ] }, 'assets': [] } @pytest.fixture def delivery_history_query_result(): """Mock response for delivery history query.""" return { 'deliveryHistoryByOsrIds': [ { 'orchardSoundRecording': { 'id': 'osr_id' }, 'creationDate': '2025-07-29T11:20:11.913Z', 'type': 'METADATA_UPDATE', 'stepFunctionName': 'metadata-update-1-False' }, { 'orchardSoundRecording': { 'id': 'osr_id' }, 'creationDate': '2025-07-30T13:24:03.763Z', 'type': 'METADATA_UPDATE', 'stepFunctionName': 'metadata-update-2-False' }, { 'orchardSoundRecording': { 'id': 'osr_id' }, 'creationDate': '2025-07-23T10:51:28.714Z', 'type': 'FULL_DELIVERY', 'stepFunctionName': 'full-delivery-1-True' } ] } @pytest.fixture def sound_recording_metadata_empty(): """Mock response for sound recording with no metadata.""" return { 'track_connection': { 'tracks': [] }, 'assets': [], 'isrc': 'NOHCM0701200' }