"""Spotify Charts API wrapper tests.""" from tempfile import TemporaryFile from unittest.mock import MagicMock from unittest.mock import patch import pytest from feed_ingestion.flows.spotify_charts.spotify_api import SpotifyChartsAPI @pytest.fixture def spotify_api_authenticated(): """Yield SpotifyAPI Wrapper fixture (authenticated).""" spotify_api = SpotifyChartsAPI( 'test', 'secret', 'test-licensor', 'test_version') spotify_api._token = 'token' yield spotify_api @pytest.fixture def spotify_api(): """Spotify API Wrapper fixture.""" yield SpotifyChartsAPI('test', 'secret', 'test-licensor', 'test_version') @pytest.fixture def mock_oauth_success(): """Yield Spotify API oauth success response.""" requests_path = ( 'feed_ingestion.flows.spotify.spotify_api.requests') with patch(requests_path) as requests: response_body = {'access_token': 'token', 'expires_in': 28800} response_mock = MagicMock() response_mock.status_code = 200 response_mock.json = MagicMock(return_value=response_body) requests.post = MagicMock(return_value=response_mock) yield requests @pytest.fixture def mock_oauth_failure(): """Yield Spotify API oauth failure response.""" requests_path = ( 'feed_ingestion.flows.spotify.spotify_api.requests') with patch(requests_path) as requests: response_mock = MagicMock() response_mock.status_code = 401 requests.post = MagicMock(return_value=response_mock) yield requests @pytest.fixture def mock_session(): """Mock requests session.""" session_path = ( 'feed_ingestion.flows.spotify_charts.spotify_api.Session') with patch(session_path) as mock_session: session_instance = mock_session.return_value response_mock = MagicMock() session_instance.send = MagicMock(return_value=response_mock) yield session_instance def test_get_charts_to_file(mock_session, spotify_api_authenticated): """Test get_charts_to_file.""" with TemporaryFile() as fd: spotify_api_authenticated.get_charts_to_file( fd, '2017-10-01', 'at', 'frequency', 'chart_type') assert mock_session.send.called req = mock_session.send.call_args[0][0] assert req.url == ( 'https://provider-api.spotify.com/test_version/analytics/' 'spotifycharts/chart_type-at-frequency/2017/10/01')