"""Test update_multiple_tracks_localization for several track and languages.""" import json from tests.factories.itunes_languages import ItunesLanguagesFactory from tests.factories.track_artist import TrackArtistFactory from tests.factories.track_localized_metadata import \ TrackLocalizedMetadataFactory from tests.testutils import db @db.test_schema def test_update_multiple_tracks_localization(client): """Test update_multiple_tracks_localization succeed for a fresh tracks.""" db.seed_models(ItunesLanguagesFactory.build(language_id=12)) db.seed_models(ItunesLanguagesFactory.build(language_id=13)) db.seed_models(TrackArtistFactory.build(track_artist_id=100, tuid=1001)) track1_data = { 'tuid': 1001, 'language_id': 12, 'track_name': 'name1', 'version': 'version1', 'artists': {'100': 'artist name'}} track2_data = { 'tuid': 1002, 'language_id': 13, 'track_name': 'name2', 'version': 'version2'} data = {'items': [track1_data, track2_data]} server_response = client.put( '/localization/tracks', data=json.dumps(data), content_type='application/json') assert server_response.status_code == 200 actual_result = json.loads(server_response.data.decode()) assert 'items' in actual_result assert len(actual_result['items']) == 2 # make a get to double check if the localizations were created server_response = client.get('/localization/track/1001') assert server_response.status_code == 200 after_create = json.loads(server_response.data.decode()) assert after_create['items'] == [track1_data] @db.test_schema def test_update_multiple_tracks_update(client): """Test update_multiple_tracks_localization with existing localizations.""" db.seed_models(ItunesLanguagesFactory.build(language_id=12)) db.seed_models(ItunesLanguagesFactory.build(language_id=13)) db.seed_models(TrackArtistFactory.build(track_artist_id=100, tuid=1001)) db.seed_models(TrackLocalizedMetadataFactory.build( tuid=1001, language_id=12)) db.seed_models(TrackLocalizedMetadataFactory.build( tuid=1001, language_id=13)) track1_data = { 'tuid': 1001, 'language_id': 12, 'track_name': 'name1', 'version': 'version1', 'artists': {'100': 'artist1'}} track2_data = { 'tuid': 1001, 'language_id': 13, 'track_name': 'name2', 'version': 'version2', 'artists': {'100': 'artist2'}} data = {'items': [track1_data, track2_data]} server_response = client.put( '/localization/tracks', data=json.dumps(data), content_type='application/json') assert server_response.status_code == 200 # make a get to double check if the localizations were updated server_response = client.get('/localization/track/1001') assert server_response.status_code == 200 after_update = json.loads(server_response.data.decode()) assert after_update['items'] == data['items'] @db.test_schema def test_update_multiple_tracks_localization_no_items(client): """Test update_multiple_tracks_localization with empty items PUT data.""" data = {'items': []} server_response = client.put( '/localization/tracks', data=json.dumps(data), content_type='application/json') assert server_response.status_code == 200 actual_result = json.loads(server_response.data.decode()) assert 'items' in actual_result assert actual_result['items'] == [] @db.test_schema def test_update_multiple_tracks_localization_invalid_item(client): """Test update_multiple_tracks_localization with invalid item.""" track1_data = { 'language_id': 12, 'track_name': 'name1', 'version': 'version1'} data = {'items': [track1_data]} server_response = client.put( '/localization/tracks', data=json.dumps(data), content_type='application/json') assert server_response.status_code == 400 actual_result = json.loads(server_response.data.decode()) assert actual_result == { 'code': 'bad_request', 'message': {'tuid': "'tuid' is a required property"}} @db.test_schema def test_update_multiple_tracks_localization_invalid_language(client): """Test update_multiple_tracks_localization invalid language_id 13.""" db.seed_models(ItunesLanguagesFactory.build(language_id=12)) db.seed_models(TrackArtistFactory.build(track_artist_id=100, tuid=1001)) track1_data = { 'tuid': 1001, 'language_id': 12, 'track_name': 'name1', 'version': 'version1', 'artists': {100: 'artist name'}} track2_data = { 'tuid': 1002, 'language_id': 13, 'track_name': 'name2', 'version': 'version2'} data = {'items': [track1_data, track2_data]} server_response = client.put( '/localization/tracks', data=json.dumps(data), content_type='application/json') assert server_response.status_code == 404 actual_result = json.loads(server_response.data.decode()) assert actual_result == { 'code': 'not_found_error', 'message': 'No Itunes Language found for this language_id.'}