"""Tests for ows-lyrics interface.""" import json from backend.constants import header as header_consts from backend.models import ows_lyrics from tests.testutils import mocks OWS_LYRICS_GET_HEADERS = { header_consts.CONTENT_TYPE: header_consts.CONTENT_TYPE_JSON_VAL} TRACK_ID = 15 TRACK_IDS = [15, 16] def test_get_lyrics(mocker): """Check get lyrics handler.""" data = {'track_id': TRACK_ID, 'lyrics': 'track lyrics'} mock_request_get = mocks.get_response(mocker, json=data.copy()) res = ows_lyrics.get_track_lyrics(track_id=TRACK_ID) mock_request_get.assert_called_with( 'ows-lyrics', '/tracks/15/lyrics', headers=OWS_LYRICS_GET_HEADERS) assert res assert res.message == data def test_get_lyrics_not_found(mocker): """Check get lyrics fail response.""" error_obj = {'code': 'not_found_error', 'message': None} mock_request_get = mocks.get_response( mocker, json=error_obj.copy(), status_code=400) res = ows_lyrics.get_track_lyrics(track_id=TRACK_ID) mock_request_get.assert_called_with( 'ows-lyrics', '/tracks/15/lyrics', headers=OWS_LYRICS_GET_HEADERS) assert not res assert res.errors['message'] == error_obj def test_put_lyrics(mocker): """Check put lyrics handler.""" data = {'track_id': TRACK_ID, 'lyrics': 'track lyrics'} mock_request_put = mocks.put_response(mocker, json=data.copy()) res = ows_lyrics.put_track_lyrics(TRACK_ID, 'lyrics text') mock_request_put.assert_called_with( 'ows-lyrics', '/tracks/15/lyrics', headers=OWS_LYRICS_GET_HEADERS, data=json.dumps({'lyrics': 'lyrics text'}, ensure_ascii=False).encode('utf-8')) assert res def test_put_lyrics_not_found(mocker): """Check put lyrics fail response.""" error_obj = {'code': 'not_found_error', 'message': None} mock_request_put = mocks.put_response( mocker, json=error_obj.copy(), status_code=400) res = ows_lyrics.put_track_lyrics(TRACK_ID, 'lyrics text') mock_request_put.assert_called_with( 'ows-lyrics', '/tracks/15/lyrics', headers=OWS_LYRICS_GET_HEADERS, data=json.dumps({'lyrics': 'lyrics text'}, ensure_ascii=False).encode('utf-8')) assert not res assert res.errors['message'] == error_obj def test_delete_lyrics(mocker): """Check delete lyrics handler.""" mock_request_delete = mocks.delete_response(mocker) res = ows_lyrics.delete_track_lyrics(track_id=TRACK_ID) mock_request_delete.assert_called_with( 'ows-lyrics', '/tracks/15/lyrics') assert res def test_delete_lyrics_not_found(mocker): """Check delete lyrics fail response.""" mock_request_delete = mocks.delete_response( mocker, status_code=400) res = ows_lyrics.delete_track_lyrics(track_id=TRACK_ID) mock_request_delete.assert_called_with( 'ows-lyrics', '/tracks/15/lyrics') assert not res assert res.errors['message'] == {} def test_delete_tracks_lyrics(mocker): """Check delete tracks lyrics handler.""" mock_request_delete = mocks.delete_response(mocker) res = ows_lyrics.delete_tracks_lyrics(TRACK_IDS) mock_request_delete.assert_called_with( 'ows-lyrics', '/tracks/lyrics', headers=OWS_LYRICS_GET_HEADERS, data='{"tuids": [15, 16]}') assert res def test_delete_tracks_lyrics_not_found(mocker): """Check delete tracks lyrics fail response.""" mock_request_delete = mocks.delete_response( mocker, status_code=400) res = ows_lyrics.delete_tracks_lyrics(TRACK_IDS) mock_request_delete.assert_called_with( 'ows-lyrics', '/tracks/lyrics', headers=OWS_LYRICS_GET_HEADERS, data='{"tuids": [15, 16]}') assert not res assert res.errors['message'] == {} def test_copy_tracks_lyrics(mocker): """Check copy tracks lyrics handler.""" mock_request_post = mocks.post_response(mocker) tracks_items = [ {'source': {'tuid': 55}, 'destination': {'tuid': 67}}, {'source': {'tuid': 56}, 'destination': {'tuid': 68}}, ] res = ows_lyrics.copy_tracks_lyrics(tracks_items) expected_request = { 'items': [ {'source_tuid': 55, 'destination_tuid': 67}, {'source_tuid': 56, 'destination_tuid': 68}, ] } mock_request_post.assert_called_with( 'ows-lyrics', '/tracks/copy', headers=OWS_LYRICS_GET_HEADERS, data=json.dumps(expected_request)) assert res def test_copy_tracks_lyrics_not_found(mocker): """Check copy tracks lyrics fail response.""" mock_request_post = mocks.post_response( mocker, status_code=400) res = ows_lyrics.copy_tracks_lyrics( [{'source': {'tuid': 55}, 'destination': {'tuid': 56}}]) expected_request = { 'items': [ {'source_tuid': 55, 'destination_tuid': 56}, ] } mock_request_post.assert_called_with( 'ows-lyrics', '/tracks/copy', headers=OWS_LYRICS_GET_HEADERS, data=json.dumps(expected_request)) assert not res assert res.errors['message'] == {} def test_is_explicit_word_in_lyrics_post(mocker, mock_app): """Check if lyrics contain explicit word.""" data = {'has_explicit_lyrics': True} mock_request_post = mocks.post_response(mocker, json=data.copy()) res = ows_lyrics.has_explicit_lyrics('lyrics here') mock_request_post.assert_called_with( 'ows-lyrics', '/has-explicit-lyrics', headers={'Content-Type': 'application/json'}, data=json.dumps({'lyrics': 'lyrics here'}, ensure_ascii=False).encode('utf-8') ) assert res is True