mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-10-29 18:00:15 +00:00
179 lines
5.3 KiB
Python
179 lines
5.3 KiB
Python
from spotdl import spotify_tools
|
|
from spotdl import const
|
|
|
|
import spotipy
|
|
|
|
import os
|
|
import pytest
|
|
import loader
|
|
|
|
loader.load_defaults()
|
|
|
|
|
|
def test_generate_token():
|
|
token = spotify_tools.generate_token()
|
|
assert len(token) == 83
|
|
|
|
|
|
class TestMustBeAuthorizedDecorator:
|
|
def test_spotify_instance_is_unset(self):
|
|
spotify_tools.spotify = None
|
|
|
|
@spotify_tools.must_be_authorized
|
|
def sample_func():
|
|
return True
|
|
|
|
assert sample_func()
|
|
|
|
def test_spotify_instance_forces_assertion_error(self):
|
|
@spotify_tools.must_be_authorized
|
|
def sample_func():
|
|
raise AssertionError
|
|
|
|
with pytest.raises(AssertionError):
|
|
sample_func()
|
|
|
|
def test_fake_token_generator(self, monkeypatch):
|
|
spotify_tools.spotify = None
|
|
monkeypatch.setattr(spotify_tools, "generate_token", lambda: 123123)
|
|
|
|
with pytest.raises(spotipy.client.SpotifyException):
|
|
spotify_tools.generate_metadata("ncs - spectre")
|
|
|
|
def test_correct_token(self):
|
|
assert spotify_tools.generate_metadata("ncs - spectre")
|
|
|
|
|
|
class TestGenerateMetadata:
|
|
@pytest.fixture(scope="module")
|
|
def metadata_fixture(self):
|
|
metadata = spotify_tools.generate_metadata("ncs - spectre")
|
|
return metadata
|
|
|
|
def test_len(self, metadata_fixture):
|
|
assert len(metadata_fixture) == 24
|
|
|
|
def test_trackname(self, metadata_fixture):
|
|
assert metadata_fixture["name"] == "Spectre"
|
|
|
|
def test_artist(self, metadata_fixture):
|
|
assert metadata_fixture["artists"][0]["name"] == "Alan Walker"
|
|
|
|
def test_duration(self, metadata_fixture):
|
|
assert metadata_fixture["duration"] == 230.634
|
|
|
|
|
|
def test_get_playlists():
|
|
expect_playlist_ids = [
|
|
"34gWCK8gVeYDPKcctB6BQJ",
|
|
"04wTU2c2WNQG9XE5oSLYfj",
|
|
"0fWBMhGh38y0wsYWwmM9Kt",
|
|
]
|
|
|
|
expect_playlists = [
|
|
"https://open.spotify.com/playlist/" + playlist_id
|
|
for playlist_id in expect_playlist_ids
|
|
]
|
|
|
|
playlists = spotify_tools.get_playlists("uqlakumu7wslkoen46s5bulq0")
|
|
assert playlists == expect_playlists
|
|
|
|
|
|
def test_write_user_playlist(tmpdir, monkeypatch):
|
|
expect_tracks = 17
|
|
text_file = os.path.join(str(tmpdir), "test_us.txt")
|
|
monkeypatch.setattr("builtins.input", lambda x: 1)
|
|
spotify_tools.write_user_playlist("uqlakumu7wslkoen46s5bulq0", text_file)
|
|
with open(text_file, "r") as f:
|
|
tracks = len(f.readlines())
|
|
assert tracks == expect_tracks
|
|
|
|
|
|
class TestFetchPlaylist:
|
|
@pytest.fixture(scope="module")
|
|
def playlist_fixture(self):
|
|
playlist = spotify_tools.fetch_playlist(
|
|
"https://open.spotify.com/playlist/0fWBMhGh38y0wsYWwmM9Kt"
|
|
)
|
|
return playlist
|
|
|
|
def test_name(self, playlist_fixture):
|
|
assert playlist_fixture["name"] == "special_test_playlist"
|
|
|
|
def test_tracks(self, playlist_fixture):
|
|
assert playlist_fixture["tracks"]["total"] == 14
|
|
|
|
|
|
def test_write_playlist(tmpdir):
|
|
expect_tracks = 14
|
|
text_file = os.path.join(str(tmpdir), "test_pl.txt")
|
|
spotify_tools.write_playlist(
|
|
"https://open.spotify.com/playlist/0fWBMhGh38y0wsYWwmM9Kt", text_file
|
|
)
|
|
with open(text_file, "r") as f:
|
|
tracks = len(f.readlines())
|
|
assert tracks == expect_tracks
|
|
|
|
|
|
# XXX: Monkeypatch these tests if they fail in future
|
|
class TestFetchAlbum:
|
|
@pytest.fixture(scope="module")
|
|
def album_fixture(self):
|
|
album = spotify_tools.fetch_album(
|
|
"https://open.spotify.com/album/499J8bIsEnU7DSrosFDJJg"
|
|
)
|
|
return album
|
|
|
|
def test_name(self, album_fixture):
|
|
assert album_fixture["name"] == "NCS: Infinity"
|
|
|
|
def test_tracks(self, album_fixture):
|
|
assert album_fixture["tracks"]["total"] == 15
|
|
|
|
|
|
# XXX: Monkeypatch these tests if they fail in future
|
|
class TestFetchAlbumsFromArtist:
|
|
@pytest.fixture(scope="module")
|
|
def albums_from_artist_fixture(self):
|
|
albums = spotify_tools.fetch_albums_from_artist(
|
|
"https://open.spotify.com/artist/7oPftvlwr6VrsViSDV7fJY"
|
|
)
|
|
return albums
|
|
|
|
def test_len(self, albums_from_artist_fixture):
|
|
assert len(albums_from_artist_fixture) == 54
|
|
|
|
def test_zeroth_album_name(self, albums_from_artist_fixture):
|
|
assert albums_from_artist_fixture[0]["name"] == "Revolution Radio"
|
|
|
|
def test_zeroth_album_tracks(self, albums_from_artist_fixture):
|
|
assert albums_from_artist_fixture[0]["total_tracks"] == 12
|
|
|
|
def test_fist_album_name(self, albums_from_artist_fixture):
|
|
assert albums_from_artist_fixture[1]["name"] == "Demolicious"
|
|
|
|
def test_first_album_tracks(self, albums_from_artist_fixture):
|
|
assert albums_from_artist_fixture[0]["total_tracks"] == 12
|
|
|
|
|
|
def test_write_all_albums_from_artist(tmpdir):
|
|
expect_tracks = 282
|
|
text_file = os.path.join(str(tmpdir), "test_ab.txt")
|
|
spotify_tools.write_all_albums_from_artist(
|
|
"https://open.spotify.com/artist/4dpARuHxo51G3z768sgnrY", text_file
|
|
)
|
|
with open(text_file, "r") as f:
|
|
tracks = len(f.readlines())
|
|
assert tracks == expect_tracks
|
|
|
|
|
|
def test_write_album(tmpdir):
|
|
expect_tracks = 15
|
|
text_file = os.path.join(str(tmpdir), "test_al.txt")
|
|
spotify_tools.write_album(
|
|
"https://open.spotify.com/album/499J8bIsEnU7DSrosFDJJg", text_file
|
|
)
|
|
with open(text_file, "r") as f:
|
|
tracks = len(f.readlines())
|
|
assert tracks == expect_tracks
|