arcade-mcp/toolkits/spotify/tests/test_utils.py
2025-01-14 12:45:32 -08:00

155 lines
5.8 KiB
Python

from unittest.mock import MagicMock
import pytest
from arcade_spotify.tools.models import PlaybackState
from arcade_spotify.tools.utils import convert_to_playback_state, send_spotify_request
@pytest.mark.asyncio
async def test_send_spotify_request(tool_context, mock_httpx_client):
mock_response = MagicMock()
mock_response.status_code = 200
mock_httpx_client.request.return_value = mock_response
response = await send_spotify_request(
tool_context,
"GET",
"https://api.spotify.com/v1/me/player",
params={"param": "value"},
json_data={"data": "value"},
)
assert response == mock_response
mock_httpx_client.request.assert_called_once_with(
"GET",
"https://api.spotify.com/v1/me/player",
headers={"Authorization": "Bearer test_token"},
params={"param": "value"},
json={"data": "value"},
)
def test_convert_to_playback_state():
player_get_playback_state_response = {
"timestamp": 1734651060828,
"context": {
"external_urls": {
"spotify": "https://open.spotify.com/playlist/37i9dQZF1EYkqdzj48dyYq"
},
"href": "https://api.spotify.com/v1/playlists/37i9dQZF1EYkqdzj48dyYq",
"type": "playlist",
"uri": "spotify:playlist:37i9dQZF1EYkqdzj48dyYq",
},
"progress_ms": 261652,
"item": {
"album": {
"album_type": "album",
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/3GBPw9NK25X1Wt2OUvOwY3"
},
"href": "https://api.spotify.com/v1/artists/3GBPw9NK25X1Wt2OUvOwY3",
"id": "3GBPw9NK25X1Wt2OUvOwY3",
"name": "Jack Johnson",
"type": "artist",
"uri": "spotify:artist:3GBPw9NK25X1Wt2OUvOwY3",
}
],
"available_markets": [
"AR",
"XK",
],
"external_urls": {
"spotify": "https://open.spotify.com/album/23BBbqDGMhloT6f2YBecSr"
},
"href": "https://api.spotify.com/v1/albums/23BBbqDGMhloT6f2YBecSr",
"id": "23BBbqDGMhloT6f2YBecSr",
"images": [
{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b2732bd026ab797a3de9605d9cb3",
"width": 640,
},
{
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e022bd026ab797a3de9605d9cb3",
"width": 300,
},
{
"height": 64,
"url": "https://i.scdn.co/image/ab67616d000048512bd026ab797a3de9605d9cb3",
"width": 64,
},
],
"name": "Brushfire Fairytales [Remastered (Bonus Version)]",
"release_date": "2011-04-12",
"release_date_precision": "day",
"total_tracks": 15,
"type": "album",
"uri": "spotify:album:23BBbqDGMhloT6f2YBecSr",
},
"artists": [
{
"external_urls": {
"spotify": "https://open.spotify.com/artist/3GBPw9NK25X1Wt2OUvOwY3"
},
"href": "https://api.spotify.com/v1/artists/3GBPw9NK25X1Wt2OUvOwY3",
"id": "3GBPw9NK25X1Wt2OUvOwY3",
"name": "Jack Johnson",
"type": "artist",
"uri": "spotify:artist:3GBPw9NK25X1Wt2OUvOwY3",
}
],
"available_markets": [
"AR",
"XK",
],
"disc_number": 1,
"duration_ms": 281749,
"explicit": False,
"external_ids": {"isrc": "USER81100105"},
"external_urls": {"spotify": "https://open.spotify.com/track/54S3uCvfZauNw8lVCHZYYo"},
"href": "https://api.spotify.com/v1/tracks/54S3uCvfZauNw8lVCHZYYo",
"id": "54S3uCvfZauNw8lVCHZYYo",
"is_local": False,
"name": "Flake",
"popularity": 59,
"preview_url": "https://p.scdn.co/mp3-preview/7094898f5aa76222b06349e4ec26489ca80b5e4f?cid=26913f34d26f4c16a15d5a93e309a1dc",
"track_number": 5,
"type": "track",
"uri": "spotify:track:54S3uCvfZauNw8lVCHZYYo",
},
"currently_playing_type": "track",
"actions": {
"disallows": {
"resuming": True,
"toggling_repeat_context": True,
"toggling_repeat_track": True,
"toggling_shuffle": True,
}
},
"is_playing": True,
}
expected_playback_state = PlaybackState(
device_name=None,
device_id=None,
currently_playing_type="track",
is_playing=True,
progress_ms=261652,
message=None,
album_name="Brushfire Fairytales [Remastered (Bonus Version)]",
album_id="23BBbqDGMhloT6f2YBecSr",
album_artists=["Jack Johnson"],
album_spotify_url="https://open.spotify.com/album/23BBbqDGMhloT6f2YBecSr",
track_name="Flake",
track_id="54S3uCvfZauNw8lVCHZYYo",
track_spotify_url="https://open.spotify.com/track/54S3uCvfZauNw8lVCHZYYo",
track_artists=["Jack Johnson"],
track_artists_ids=["3GBPw9NK25X1Wt2OUvOwY3"],
)
playback_state = convert_to_playback_state(player_get_playback_state_response)
assert playback_state == expected_playback_state