"""Test state_machine_schema.""" from ddex_ingester_common.models.state_machine.error_correction import ( ErrorCorrection ) from ddex_ingester_common.models.state_machine.product import Product from ddex_ingester_common.models.state_machine.track import Track from ddex_ingester_common.models.state_machine.video import Video from ddex_ingester_common.schemas.state_machine_schema import ( StateMachineSchema ) def test_context_schema_deserialize(statemachine_context): """Test deserializing entire context dictionary into objects.""" deserialized_context = StateMachineSchema().load(statemachine_context) assert type(deserialized_context.product) is Product assert len(deserialized_context.tracks) == 1 assert type(deserialized_context.tracks[0]) is Track assert type(deserialized_context.error_correction) is ErrorCorrection assert deserialized_context.is_purged_release is False assert deserialized_context.product.release_type == 'Album' assert deserialized_context.project_id == 123 assert deserialized_context.product.special_instructions == 'Something' assert deserialized_context.deal_coordinators == [ 'awesome-coordinator@theorchard.com'] assert deserialized_context.has_switchboard_deal is True def test_incomplete_s3_schema_deserialize(statemachine_context): """Test deserializing a context with missing fields into objects.""" statemachine_context.pop('message_id') statemachine_context['tracks'][0].pop('tuid') statemachine_context['tracks'][0].pop('isrc') statemachine_context['tracks'][0].pop('release_reference') statemachine_context['tracks'][0].pop('resource_reference') statemachine_context['product'].pop('upc') statemachine_context['product'].pop('product_name') deserialized_context = StateMachineSchema().load(statemachine_context) assert not deserialized_context.message_id track = deserialized_context.tracks[0] assert not track.tuid assert not track.isrc assert not track.release_reference assert not track.resource_reference product = deserialized_context.product assert not product.upc assert not product.product_name def test_state_machine_schema_load(video_context): """Test deserialize DDEX video document into context dict with objects.""" deserialized_context = StateMachineSchema().load(video_context) assert type(deserialized_context.product) is Product assert len(deserialized_context.tracks) == 0 assert type(deserialized_context.video) is Video assert deserialized_context.message_id == '196785218' assert deserialized_context.message_thread_id == 'G010000025264A_TOC' assert deserialized_context.product.product_name == 'Before Your Love' assert deserialized_context.update_indicator == 'OriginalMessage' assert deserialized_context.product.original_release_date == '2004-01-08' assert len(deserialized_context.video.assets) == 2 assert deserialized_context.video.assets[0].aspect_ratio == '1.271' assert deserialized_context.video.assets[1].aspect_ratio == '1.333' assert deserialized_context.video.associated_track_tuid == 35027077 assert deserialized_context.video.current_channel == \ "I don't see the channel I want" def test_context_schema_serialize(deserialized_context, statemachine_context): """Test serializing context into dictionary.""" serialized_context = StateMachineSchema().dump(deserialized_context) assert serialized_context == statemachine_context