Skip to main content
Glama

Spotify MCP Server

test_utils.py7.4 kB
""" Tests for utility functions. """ from spotify_mcp.utils import parse_album, parse_artist, parse_playlist, parse_track class TestParseTrack: """Test track parsing utility.""" def test_parse_basic_track(self, sample_track_data): """Test parsing a basic track.""" result = parse_track(sample_track_data) assert result["name"] == "Never Gonna Give You Up" assert result["id"] == "4iV5W9uYEdYUVa79Axb7Rh" assert result["artist"] == "Rick Astley" # Single artist becomes 'artist' def test_parse_track_missing_fields(self): """Test parsing track with missing optional fields.""" minimal_track = { "id": "test123", "name": "Test Track", "artists": [{"name": "Test Artist"}], } result = parse_track(minimal_track) assert result["name"] == "Test Track" assert result["id"] == "test123" assert result["artist"] == "Test Artist" def test_parse_track_multiple_artists(self): """Test parsing track with multiple artists.""" track_data = { "id": "test123", "name": "Collaboration", "artists": [ {"name": "Artist One"}, {"name": "Artist Two"}, {"name": "Artist Three"}, ], } result = parse_track(track_data) assert result["artists"] == ["Artist One", "Artist Two", "Artist Three"] assert "artist" not in result # Multiple artists use 'artists' key def test_parse_track_none_input(self): """Test parsing None input.""" result = parse_track(None) assert result is None def test_parse_track_detailed(self, sample_track_data): """Test parsing track with detailed flag.""" # Add album data to sample track_with_album = sample_track_data.copy() track_with_album["album"] = { "name": "Test Album", "id": "album123", "artists": [{"name": "Rick Astley"}], } track_with_album["track_number"] = 1 track_with_album["duration_ms"] = 213573 result = parse_track(track_with_album, detailed=True) assert result["track_number"] == 1 assert result["duration_ms"] == 213573 assert result["album"] is not None class TestParseArtist: """Test artist parsing utility.""" def test_parse_basic_artist(self): """Test parsing a basic artist.""" artist_data = {"id": "0gxyHStUsqpMadRV0Di1Qt", "name": "Rick Astley"} result = parse_artist(artist_data) assert result["name"] == "Rick Astley" assert result["id"] == "0gxyHStUsqpMadRV0Di1Qt" def test_parse_artist_detailed(self): """Test parsing artist with detailed flag.""" artist_data = { "id": "0gxyHStUsqpMadRV0Di1Qt", "name": "Rick Astley", "genres": ["dance pop", "new wave pop"], } result = parse_artist(artist_data, detailed=True) assert result["name"] == "Rick Astley" assert result["id"] == "0gxyHStUsqpMadRV0Di1Qt" assert result["genres"] == ["dance pop", "new wave pop"] def test_parse_artist_none_input(self): """Test parsing None input.""" result = parse_artist(None) assert result is None class TestParseAlbum: """Test album parsing utility.""" def test_parse_basic_album(self): """Test parsing a basic album.""" album_data = { "id": "6XzKGcM6laRkTrME3rQvJw", "name": "Whenever You Need Somebody", "artists": [{"name": "Rick Astley"}], } result = parse_album(album_data) assert result["name"] == "Whenever You Need Somebody" assert result["id"] == "6XzKGcM6laRkTrME3rQvJw" assert result["artist"] == "Rick Astley" # Single artist becomes 'artist' def test_parse_album_multiple_artists(self): """Test parsing album with multiple artists.""" album_data = { "id": "test123", "name": "Collaboration Album", "artists": [{"name": "Artist One"}, {"name": "Artist Two"}], } result = parse_album(album_data) assert result["artists"] == ["Artist One", "Artist Two"] assert "artist" not in result # Multiple artists use 'artists' key def test_parse_album_detailed(self): """Test parsing album with detailed flag.""" album_data = { "id": "test123", "name": "Test Album", "artists": [{"name": "Test Artist", "id": "artist123"}], "total_tracks": 10, "release_date": "2023-01-01", "tracks": { "items": [ { "name": "Track 1", "id": "track1", "artists": [{"name": "Test Artist"}], }, { "name": "Track 2", "id": "track2", "artists": [{"name": "Test Artist"}], }, ] }, } result = parse_album(album_data, detailed=True) assert result["total_tracks"] == 10 assert result["release_date"] == "2023-01-01" assert len(result["tracks"]) == 2 assert result["tracks"][0]["name"] == "Track 1" def test_parse_album_none_input(self): """Test parsing None input.""" result = parse_album(None) assert result is None class TestParsePlaylist: """Test playlist parsing utility.""" def test_parse_basic_playlist(self, sample_playlist_data): """Test parsing a basic playlist.""" result = parse_playlist(sample_playlist_data) assert result["name"] == "RapCaviar" assert result["id"] == "37i9dQZF1DX0XUsuxWHRQd" assert result["owner"] == "Spotify" def test_parse_playlist_detailed(self): """Test parsing playlist with detailed flag.""" playlist_data = { "id": "test123", "name": "Test Playlist", "owner": {"display_name": "Test User"}, "description": "A test playlist", "tracks": { "items": [ { "track": { "name": "Track 1", "id": "track1", "artists": [{"name": "Artist 1"}], } }, { "track": { "name": "Track 2", "id": "track2", "artists": [{"name": "Artist 2"}], } }, ] }, } result = parse_playlist(playlist_data, detailed=True) assert result["name"] == "Test Playlist" assert result["description"] == "A test playlist" assert result["owner"] == "Test User" assert len(result["tracks"]) == 2 assert result["tracks"][0]["name"] == "Track 1" assert result["tracks"][1]["name"] == "Track 2" def test_parse_playlist_none_input(self): """Test parsing None input.""" result = parse_playlist(None) assert result is None

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jamiew/spotify-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server