"""Functional tests for retrieving a track lyrics. Test endpoint: GET /track/ """ import json from owsrequest import request from owsrequest import test_utils from tests.testutils import db @db.test_schema_no_seed def test_get_track_lyrics(client, mocker, track_factory): """Test get track lyrics is successful.""" track = track_factory() db.merge_model_objects([track]) get_specs = [ { 'service': 'ows-lyrics', 'path': '/tracks/{}/lyrics'.format(track.tuid), 'status': 200, 'json': {'track_id': track.tuid, 'lyrics': 'Track lyrics'} } ] post_specs = [ { 'service': 'ows-product', 'path': '/localization/track', 'status': 200, 'json': { 'items': [] }, } ] mocker.patch.object( request, 'get', test_utils.mock_ows_requests(get_specs)) mocker.patch.object( request, 'post', test_utils.mock_ows_requests(post_specs)) response = client.get('track/{}?include=lyrics'.format(track.tuid)) assert response.status_code == 200 data = json.loads(response.data.decode()) assert data['lyrics'] == 'Track lyrics' @db.test_schema_no_seed def test_get_track_lyrics_missed( client, mocker, track_factory): """Test get track lyrics is successful even lyrics missed.""" track = track_factory() db.merge_model_objects([track]) get_specs = [ { 'service': 'ows-lyrics', 'path': '/tracks/{}/lyrics'.format(track.tuid), 'status': 404, } ] post_specs = [ { 'service': 'ows-product', 'path': '/localization/track', 'status': 200, 'json': { 'items': [] }, } ] mocker.patch.object( request, 'get', test_utils.mock_ows_requests(get_specs)) mocker.patch.object( request, 'post', test_utils.mock_ows_requests(post_specs)) response = client.get('track/{}?include=lyrics'.format(track.tuid)) assert response.status_code == 200 data = json.loads(response.data.decode()) assert data['lyrics'] is None @db.test_schema_no_seed def test_get_track_lyrics_fail(client, mocker, track_factory): """Test get track lyrics failed.""" track = track_factory( publishers__count=2, performer__count=2, writers__count=1) db.merge_model_objects([track]) get_specs = [ { 'service': 'ows-lyrics', 'path': '/tracks/{}/lyrics'.format(track.tuid), 'status': 418, } ] post_specs = [ { 'service': 'ows-product', 'path': '/localization/track', 'status': 200, 'json': { 'items': [] }, } ] mocker.patch.object( request, 'get', test_utils.mock_ows_requests(get_specs)) mocker.patch.object( request, 'post', test_utils.mock_ows_requests(post_specs)) response = client.get('track/{}?include=lyrics'.format(track.tuid)) assert response.status_code == 418