"""Functional tests for validating product tracks performers fields. Test endpoint: GET /product//tracks/validate/performers """ import json from oto import status as response_code import pytest from tests.testutils import db @db.test_schema_no_seed @pytest.mark.parametrize('use_account_query_params', [True, False]) def test_validate_tracks_performers_for_product( client_validate_performers_for_product, use_account_query_params, track_factory, performer_factory): """Test validate tracks by product id validates all tracks as valid.""" tracks = [track_factory(), track_factory()] performers = [ performer_factory(tuid=tracks[0].tuid, performer_type='primary'), performer_factory(tuid=tracks[0].tuid, performer_type='featured'), performer_factory(tuid=tracks[1].tuid, performer_type='primary'), performer_factory(tuid=tracks[1].tuid, performer_type='primary')] # Verify duplicate performers are allowed performers[2].birth_name = performers[3].birth_name performers[2].performer_role_id = performers[3].performer_role_id db.merge_model_objects(tracks) db.merge_ows_track_model_objects(performers) res = client_validate_performers_for_product( product_id=tracks[0].product_id, use_account_query_params=use_account_query_params) assert res.status_code == response_code.OK res_body = json.loads(res.data.decode()) assert res_body['total_tracks'] == 2 assert res_body['valid_tracks'] == 2 assert not res_body['errors'] @db.test_schema_no_seed @pytest.mark.parametrize('use_account_query_params', [True, False]) def test_validate_tracks_performers_for_product_no_tracks( client_validate_performers_for_product, use_account_query_params, track_factory, performer_factory): """Test validate tracks by product id handles no tracks correctly.""" res = client_validate_performers_for_product( product_id=1, use_account_query_params=use_account_query_params) assert res.status_code == response_code.OK res_body = json.loads(res.data.decode()) assert res_body['total_tracks'] == 0 assert res_body['valid_tracks'] == 0 assert not res_body['errors'] @db.test_schema_no_seed @pytest.mark.parametrize('use_account_query_params', [True, False]) def test_validate_tracks_performers_for_product_missing_primary( client_validate_performers_for_product, use_account_query_params, track_factory, performer_factory): """Test validate tracks by product id catches track is invalid.""" tracks = [track_factory(), track_factory()] performers = [ performer_factory(tuid=tracks[0].tuid, performer_type='primary'), performer_factory(tuid=tracks[0].tuid, performer_type='featured')] db.merge_model_objects(tracks) db.merge_ows_track_model_objects(performers) res = client_validate_performers_for_product( product_id=tracks[0].product_id, use_account_query_params=use_account_query_params) assert res.status_code == response_code.OK res_body = json.loads(res.data.decode()) assert res_body['total_tracks'] == 2 assert res_body['valid_tracks'] == 1 error_obj = res_body['errors'][0] error_obj['tuid'] == tracks[1].tuid error_obj['performers']['validator'] == 'required'