"""Functional test for copying product tracks.""" from ows_product_physical.connector.mysql import db_session from ows_product_physical.constant import service_name from ows_product_physical.models.track import Track def load_tracks(product_id, session): """Load tracks from database by product_id.""" return session.query(Track).filter(Track.release_id == product_id).all() def test_copy_product_tracks_success( client, db_with_data, db_release_id_with_tracks, db_release_id_with_no_tracks, db_releases, ows_request_mocker): """Functional success case for copying tracks.""" from_product_id = db_release_id_with_tracks to_product_id = db_release_id_with_no_tracks to_product_upc = next( int(release['upc']) for release in db_releases if release['release_id'] == db_release_id_with_no_tracks) vendor_id = 213 subaccount_id = 393 ows_request_mocker.mock_response( service_name.OWS_PRODUCT, '/product/{}'.format(from_product_id), json={ 'vendor_id': vendor_id, 'subaccount_id': subaccount_id, 'context_type': 'physical' } ) ows_request_mocker.mock_response( service_name.OWS_PRODUCT, '/product/{}'.format(to_product_id), json={ 'vendor_id': vendor_id, 'subaccount_id': subaccount_id, 'context_type': 'physical', 'upc': to_product_upc } ) response = client.post( '/product/{}/tracks/copy/{}'.format(from_product_id, to_product_id)) assert response.status_code == 201 with db_session() as session: from_tracks = load_tracks(from_product_id, session) to_tracks = load_tracks(to_product_id, session) assert len(from_tracks) == len(to_tracks) for from_track, to_track in zip(from_tracks, to_tracks): assert to_track.track_id == from_track.track_id # track number assert to_track.track_name == from_track.track_name assert to_track.isrc == from_track.isrc assert to_track.cd == from_track.cd assert to_track.performer == from_track.performer assert to_track.length_minute == from_track.length_minute assert to_track.length_seconds == from_track.length_seconds assert to_track.upc == to_product_upc assert ( to_track.us_publishing_obligation == from_track.us_publishing_obligation) assert ( to_track.third_party_publisher == from_track.third_party_publisher) assert ([publisher.name for publisher in to_track.publishers] == [publisher.name for publisher in from_track.publishers])