"""Integration API tests for lyrics.""" from copy import copy from json import loads import time import pytest @pytest.fixture def timestamped_lyrics(): """Returns JSON formatted, time-stamped lyrics.""" return 'Test {}'.format(time.time()) @pytest.fixture def track_data(): """ Returns track data. Do not use directly. Instead, use one of the fixtures that build from this fixture below. """ return { 'lyrics': None, 'explicit': 'N', 'p_info': '2018 test', 'track_name': 'A', 'ownership_rights': 'original_owner', 'original_rights_holder_country_id': 1, 'meta_language_code': 'ENG', 'version': '', 'recording_country_id': 1} @pytest.fixture def track_data_with_no_lyrics(track_data): """Returns track data with timestamped lyrics.""" track_data_to_return = copy(track_data) track_data_to_return['lyrics'] = None return track_data_to_return @pytest.fixture def track_data_with_timestamped_lyrics(track_data, timestamped_lyrics): """Returns track data with timestamped lyrics.""" track_data_to_return = copy(track_data) track_data_to_return['lyrics'] = timestamped_lyrics return track_data_to_return @pytest.fixture() def put_lyrics_to_track(api_client, tuid, track_data_with_timestamped_lyrics): """Puts lyrics to /track to ensure lyrics are present.""" api_client.put_track(tuid, track_data_with_timestamped_lyrics) def test_update_lyrics( timestamped_lyrics, tuid, api_client, track_data_with_timestamped_lyrics): """Tests updating lyrics against /track via PUT.""" put_response = api_client.put_track( tuid, track_data_with_timestamped_lyrics) assert put_response.status_code == 200, \ 'Result of PUT was {}, expected 200.'.format(put_response.status_code) response = api_client.get_track(tuid, include=['lyrics']) assert response.status_code == 200, 'Result of GET was {}, expected 200.'\ .format(response.status_code) actual_timestamped_lyrics = loads(response.content)['lyrics'] assert actual_timestamped_lyrics == timestamped_lyrics, \ 'Expected {} in lyrics of response, got {}'.format( timestamped_lyrics, actual_timestamped_lyrics) def test_patch_lyrics(tuid, api_client, timestamped_lyrics): """Tests updating lyrics against /track via PATCH.""" patch_response = api_client.patch_track( tuid, {'lyrics': timestamped_lyrics}) assert patch_response.status_code == 200, \ 'Result of PATCH was {}, expected 200.'.format( patch_response.status_code) response = api_client.get_track(tuid, include=['lyrics']) assert response.status_code == 200, 'Result of GET was {}, expected 200.'\ .format(response.status_code) actual_timestamped_lyrics = loads(response.content)['lyrics'] assert actual_timestamped_lyrics == timestamped_lyrics, \ 'Expected {} in lyrics of response, got {}'.format( timestamped_lyrics, actual_timestamped_lyrics) def test_delete_lyrics_put( tuid, track_data_with_no_lyrics, api_client, put_lyrics_to_track): """Tests deleting lyrics against /track via PUT.""" put_response = api_client.put_track(tuid, track_data_with_no_lyrics) assert put_response.status_code == 200, \ 'Result of PUT was {}, expected 200.'.format(put_response.status_code) response = api_client.get_track(tuid, include=['lyrics']) assert response.status_code == 200, 'Result of GET was {}, expected 200.'\ .format(response.status_code) lyrics = loads(response.content)['lyrics'] assert lyrics is None, \ 'Expected None in lyrics of response, got {}'.format(lyrics) def test_delete_lyrics_patch(tuid, api_client, put_lyrics_to_track): """Tests deleting lyrics against /track via PATCH.""" assert api_client.patch_track(tuid, {'lyrics': ''}).status_code == 200 response = api_client.get_track(tuid, include=['lyrics']) assert response.status_code == 200, 'Result of GET was {}, expected 200.'\ .format(response.status_code) lyrics = loads(response.content)['lyrics'] assert lyrics is None, \ 'Expected None in lyrics of response, got {}'.format(lyrics)