"""Tests for backend.utils.performers.""" from backend.models.performer_persister import PerformerPersister from backend.utils import performers as performers_util from tests.testutils import db from tests.testutils.fixtures import performer_roles_fixture @db.test_schema_no_seed def test_copy_tracks_performers(performer_factory, track_factory): """Test if track performers are copied.""" # Setup. track_1 = track_factory() track_1_performers = [ performer_factory(tuid=track_1.tuid, performer_type='primary'), performer_factory(tuid=track_1.tuid, performer_type='featured'), ] track_2 = track_factory() track_2_performers = [ performer_factory(tuid=track_2.tuid, performer_type='primary'), performer_factory(tuid=track_2.tuid, performer_type='featured'), ] track_3 = track_factory() track_4 = track_factory() db.merge_model_objects([track_1, track_2, track_3, track_4]) db.merge_ows_track_model_objects(track_1_performers + track_2_performers) # Copy track performers. performers_util.copy_tracks_performers([ (track_1.tuid, track_3.tuid), (track_2.tuid, track_4.tuid) ]) # Inspect database. track_3_performers = PerformerPersister.get_performers_by_tuid( track_3.tuid).message['items'] track_4_performers = PerformerPersister.get_performers_by_tuid( track_4.tuid).message['items'] # Convert source track performers to dictionaries for comparison. roles = {role['performer_role_id']: role['performer_role'] for role in performer_roles_fixture.performer_roles} result = [] for performer in track_1_performers: performer_dict = performer.to_dict() performer_dict['performer_role'] = \ roles[performer_dict['performer_role_id']] result.append(performer_dict) track_1_performers = result result = [] for performer in track_2_performers: performer_dict = performer.to_dict() performer_dict['performer_role'] = \ roles[performer_dict['performer_role_id']] result.append(performer_dict) track_2_performers = result # Remove performer_id and tuid because they change after copy. for performer in track_1_performers + track_2_performers + \ track_3_performers + track_4_performers: del performer['performer_id'] del performer['tuid'] assert track_1_performers == track_3_performers assert track_2_performers == track_4_performers