"""Check lyrics model layer.""" from oto import status as http_status from lyrics.models import lyrics from tests.factories import lyrics_factory from tests.test_utils import db @db.test_schema def test_get_lyrics(): """Check that get lyrics works.""" track_id = 42 lyrics_text = 'lalala' lyrics_obj = lyrics_factory.LyricsFactory( entity_id=track_id, description=lyrics_text) db.seed_models([lyrics_obj]) response = lyrics.get_lyrics_by_track_id(track_id) assert response assert response.message == { 'track_id': track_id, 'lyrics': lyrics_text, } @db.test_schema def test_get_lyrics_not_found(): """Check that get lyrics works when obj is not present.""" response = lyrics.get_lyrics_by_track_id(42) assert not response assert response.status == 404 @db.test_schema def test_put_lyrics(): """Check that put highlight works.""" track_id = 42 lyrics_text = 'lalala' response = lyrics.put_lyrics_by_track_id(track_id, lyrics_text) assert response response = lyrics.get_lyrics_by_track_id(track_id) assert response.message == { 'track_id': track_id, 'lyrics': lyrics_text, } @db.test_schema def test_put_lyrics_already_exist(): """Check that put lyrics works when it exist.""" track_id = 42 lyrics_text = 'lalala' new_lyrics = 'hello' lyrics_obj = lyrics_factory.LyricsFactory( entity_id=track_id, description=lyrics_text) db.seed_models([lyrics_obj]) response = lyrics.put_lyrics_by_track_id(track_id, new_lyrics) assert response response = lyrics.get_lyrics_by_track_id(track_id) assert response.message == { 'track_id': track_id, 'lyrics': new_lyrics, } @db.test_schema def test_delete_lyrics_exists(): """Check that delete lyrics works.""" track_id = 42 lyrics_text = 'lalala' lyrics_obj = lyrics_factory.LyricsFactory( entity_id=track_id, description=lyrics_text) db.seed_models([lyrics_obj]) response = lyrics.delete_lyrics_by_track_id(track_id) assert response response = lyrics.get_lyrics_by_track_id(42) assert not response assert response.status == 404 @db.test_schema def test_delete_lyrics_not_found(): """Check that delete lyrics works when it is missed.""" response = lyrics.delete_lyrics_by_track_id(42) assert not response assert response.status == 404 @db.test_schema def test_multiple_delete_lyrics_success(): """Check that delete multiple lyrics works.""" lyrics_list = [ lyrics_factory.LyricsFactory(entity_id=1), lyrics_factory.LyricsFactory(entity_id=2), lyrics_factory.LyricsFactory(entity_id=3)] db.seed_models(lyrics_list) response = lyrics.delete_lyrics_by_track_ids( [lyrics_list[0].entity_id, lyrics_list[2].entity_id]) assert response assert response.message['count'] == 2 assert not lyrics.get_lyrics_by_track_id( lyrics_list[0].entity_id) assert not lyrics.get_lyrics_by_track_id( lyrics_list[2].entity_id) response = lyrics.get_lyrics_by_track_id( lyrics_list[1].entity_id) assert response @db.test_schema def test_multiple_delete_lyrics_not_found(): """Check that delete multiple lyrics if not found.""" response = lyrics.delete_lyrics_by_track_ids([11, 12]) assert response assert response.message['count'] == 0 @db.test_schema def test_copy_lyrics(): """Check that copy lyrics works.""" lyrics_list = [ lyrics_factory.LyricsFactory(entity_id=1), lyrics_factory.LyricsFactory(entity_id=2), ] db.seed_models(lyrics_list) items = [ {'source_tuid': 1, 'destination_tuid': 4}, {'source_tuid': 2, 'destination_tuid': 5}, {'source_tuid': 3, 'destination_tuid': 6}, {'source_tuid': 1, 'destination_tuid': 7}, ] response = lyrics.copy_lyrics_by_track_ids(items) assert response response = lyrics.get_lyrics_by_track_id(4) assert response.message['lyrics'] == lyrics_list[0].description response = lyrics.get_lyrics_by_track_id(5) assert response.message['lyrics'] == lyrics_list[1].description response = lyrics.get_lyrics_by_track_id(7) assert response.message['lyrics'] == lyrics_list[0].description @db.test_schema def test_bulk_track_lyrics_by_track_ids(): """Check bulk track lyrics works.""" lyrics_sample = [(42, 'abc'), (43, 'pqr')] lyrics_obj_list = [lyrics_factory.LyricsFactory( entity_id=lyrics_row[0], description=lyrics_row[1]) for lyrics_row in lyrics_sample] db.seed_models(lyrics_obj_list) response = lyrics.bulk_track_lyrics_by_track_ids([42, 43]) assert response assert response.message == { 'items': [row.to_dict() for row in lyrics_obj_list] } @db.test_schema def test_bulk_track_lyrics_by_track_ids_not_found(): """Check that bulk track lyrics works when obj is not present.""" response = lyrics.bulk_track_lyrics_by_track_ids([42, 43]) assert not response assert response.status == http_status.NOT_FOUND