"""Functional tests for copying existing tracks. Test endpoint: POST /product//tracks/copy/ """ import json from oto import response from backend.models import ows_lyrics from backend.models import track_sample as sample_model from backend.utils import logic as logic_util from tests.testutils import constants from tests.testutils import db from tests.testutils import mocks @db.test_schema def test_import_product_tracks( client, mocker, track_localization_put_data, valid_track_sample): """Test POST copy tracks.""" # TEST_PRODUCT_ID has 9 tracks. adding sample for 1st track source = constants.TEST_PRODUCT_ID source_tuid = 9 db.seed_track_sample_tables(source_tuid) dest = 12324324 mocks.ows_product_get_product_by_id(mocker, dest, '123456789012') mocks.ows_product_get_track_localizations( mocker, track_localization_put_data) mocks.ows_product_update_track_localizations(mocker, response=True) mocker.patch.object(logic_util, 'copy_tracks_assets_in_parallel') mocker.patch.object( ows_lyrics, 'copy_tracks_lyrics', return_value=response.Response()) endpoint = '/product/{source}/tracks/copy/{dest}?orchard_user_id=1'.format( source=source, dest=dest) actual_response = client.post(endpoint) assert actual_response response_json = json.loads(actual_response.data.decode()) assert 'items' in response_json assert len(response_json['items']) == 9 assert 'tuid' in response_json['items'][0] dest_tuid = response_json['items'][0]['tuid'] # fetch sample data for dest track and compare it with original. get_response = sample_model.get_samples_by_tuids([dest_tuid]) assert len(get_response.message) == 1 for field, value in get_response.message[0].items(): if field in ['sample_id', 'updated_date', 'artists']: assert value != valid_track_sample.get(field) elif field == 'unique_track_id': assert value == dest_tuid else: assert value == valid_track_sample.get(field)