"""Test graphql-gateway utils.""" import pytest from requests.exceptions import HTTPError # type: ignore from unittest import mock from src.utils import graphql @mock.patch('src.common.connectors.graphql_gateway.make_request') def test_execute_query(mock_request): """Test executing gql query.""" expected_headers = { 'apollographql-client-name': 'lambda-sr-delivery-youtube', 'apollographql-client-version': '1', 'Orchard-Identity-Id': '8955b4aa-2ad0-4b0b-a2ea-6f070554d6d0', 'Orchard-Profile-Id': '179', 'Orchard-Profile-Type': 'OrchAdminProfile', 'Cache-Control': 'no-cache' } expected_query = graphql.TRACKS_QUERY expected_params = {'isrc': 'QM6MZ2016828'} graphql.execute_query('QM6MZ2016828') assert mock_request.called assert mock_request.call_args_list == [ mock.call( expected_headers, expected_query, expected_params ) ] @mock.patch('src.utils.graphql.execute_query') def test_get_track(mock_execute_query): """Test batching execute query.""" mock_execute_query.return_value = { 'isrc': { 'tracks': { 'tracks': [ { 'trackName': 'Fire', 'labelSoundRecording': { 'label': { 'name': 'La Reserve Records' } }, 'product': { 'subgenre': { 'genre': { 'name': 'Rock' } } }, 'participations': [ { 'participant': { 'name': 'Artist A', 'uuid': '1234' }, 'participated_as': 'performer' }, { 'participant': { 'name': 'Artist B', 'uuid': '5678' }, 'participated_as': 'track_writer' } ], }, { 'trackName': 'Fire', 'labelSoundRecording': { 'label': { 'name': 'La Reserve Records' } }, 'product': { 'subgenre': { 'genre': { 'name': 'Rock' } } }, 'participations': [ { 'participant': { 'name': 'Artist A', 'uuid': '1234' }, 'participated_as': 'performer' }, { 'participant': { 'name': 'Artist B', 'uuid': '5678' }, 'participated_as': 'track_writer' } ], } ] } } } result = graphql.get_track('QM6MZ2016828') expected_result = { 'trackName': 'Fire', 'labelSoundRecording': { 'label': { 'name': 'La Reserve Records' } }, 'product': { 'subgenre': { 'genre': { 'name': 'Rock' } } }, 'participations': [ { 'participant': { 'name': 'Artist A', 'uuid': '1234' }, 'participated_as': 'performer' }, { 'participant': { 'name': 'Artist B', 'uuid': '5678' }, 'participated_as': 'track_writer' } ], } assert mock_execute_query.called assert result == expected_result @mock.patch('src.utils.graphql.execute_query') def test_get_track_exception(mock_execute_query): """Test exception tracks query.""" mock_execute_query.side_effect = HTTPError('error') with pytest.raises(HTTPError): graphql.get_track('QM6MZ2016828')