diff --git a/test/loader.py b/test/loader.py index c00f7ce..5635fad 100644 --- a/test/loader.py +++ b/test/loader.py @@ -1,6 +1,7 @@ from spotdl import const from spotdl import handle from spotdl import spotdl + import pytest @@ -10,5 +11,6 @@ def load_defaults(): const.args.log_level = 10 spotdl.args = const.args - spotdl.log = const.logzero.setup_logger(formatter=const._formatter, - level=const.args.log_level) + spotdl.log = const.logzero.setup_logger( + formatter=const._formatter, level=const.args.log_level + ) diff --git a/test/test_dry_run.py b/test/test_dry_run.py index 31c9d0a..6ce2c69 100644 --- a/test/test_dry_run.py +++ b/test/test_dry_run.py @@ -1,18 +1,20 @@ -from spotdl import const - -from spotdl import spotdl -import loader import os +from spotdl import const +from spotdl import spotdl + +import loader + loader.load_defaults() +TRACK_URL = 'http://open.spotify.com/track/0JlS7BXXD07hRmevDnbPDU' + def test_dry_download_list(tmpdir): - song = 'http://open.spotify.com/track/0JlS7BXXD07hRmevDnbPDU' const.args.folder = str(tmpdir) const.args.dry_run = True file_path = os.path.join(const.args.folder, 'test_list.txt') - with open(file_path, 'w') as tin: - tin.write(song) + with open(file_path, 'w') as f: + f.write(TRACK_URL) downloaded_song, *_ = spotdl.download_list(file_path) - assert downloaded_song == song + assert downloaded_song == TRACK_URL diff --git a/test/test_handle.py b/test/test_handle.py index 6230a71..b37e073 100644 --- a/test/test_handle.py +++ b/test/test_handle.py @@ -1,12 +1,12 @@ -import yaml +import os +import sys +import argparse from spotdl import handle from spotdl import const import pytest -import os -import sys -import argparse +import yaml def test_log_str_to_int(): diff --git a/test/test_internals.py b/test/test_internals.py index 2fcd1c8..4c90676 100644 --- a/test/test_internals.py +++ b/test/test_internals.py @@ -1,11 +1,38 @@ -from spotdl import internals - import sys import os import subprocess + +from spotdl import internals + import pytest +DUPLICATE_TRACKS_TEST_TABLE = [ + (('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', + 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ'), + ('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ',)), + + (('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', + '', + 'https://open.spotify.com/track/3SipFlNddvL0XNZRLXvdZD'), + ('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', + 'https://open.spotify.com/track/3SipFlNddvL0XNZRLXvdZD')), + + (('ncs fade', + 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', + '', + 'ncs fade'), + ('ncs fade', + 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ')), + + (('ncs spectre ', + ' https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', + ''), + ('ncs spectre', + 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ')) +] + + def test_default_music_directory(): if sys.platform.startswith('linux'): output = subprocess.check_output(['xdg-user-dir', 'MUSIC']) @@ -82,37 +109,11 @@ class TestGetSeconds: internals.get_sec('02,28,46') -duplicate_tracks_test_table = [ - (('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', - 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ'), - ('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ',)), - - (('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', - '', - 'https://open.spotify.com/track/3SipFlNddvL0XNZRLXvdZD'), - ('https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', - 'https://open.spotify.com/track/3SipFlNddvL0XNZRLXvdZD')), - - (('ncs fade', - 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', - '', - 'ncs fade'), - ('ncs fade', - 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ')), - - (('ncs spectre ', - ' https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ', - ''), - ('ncs spectre', - 'https://open.spotify.com/track/2DGa7iaidT5s0qnINlwMjJ')) -] - - -@pytest.mark.parametrize("duplicates, expected", duplicate_tracks_test_table) +@pytest.mark.parametrize("duplicates, expected", DUPLICATE_TRACKS_TEST_TABLE) def test_get_unique_tracks(tmpdir, duplicates, expected): file_path = os.path.join(str(tmpdir), 'test_duplicates.txt') - with open(file_path, 'w') as tin: - tin.write('\n'.join(duplicates)) + with open(file_path, 'w') as f: + f.write('\n'.join(duplicates)) unique_tracks = internals.get_unique_tracks(file_path) assert tuple(unique_tracks) == expected diff --git a/test/test_list.py b/test/test_list.py index 19e7bb5..bdb0529 100644 --- a/test/test_list.py +++ b/test/test_list.py @@ -1,28 +1,30 @@ -from spotdl import spotify_tools -from spotdl import const - -from spotdl import spotdl - import builtins import os +from spotdl import spotify_tools +from spotdl import const +from spotdl import spotdl + +PLAYLIST_URL = 'https://open.spotify.com/user/alex/playlist/0iWOVoumWlkXIrrBTSJmN8' +ALBUM_URL = 'https://open.spotify.com/album/499J8bIsEnU7DSrosFDJJg' + def test_user_playlists(tmpdir, monkeypatch): expect_tracks = 14 text_file = os.path.join(str(tmpdir), 'test_us.txt') monkeypatch.setattr('builtins.input', lambda x: 1) spotify_tools.write_user_playlist('alex', text_file) - with open(text_file, 'r') as tin: - tracks = len(tin.readlines()) + with open(text_file, 'r') as f: + tracks = len(f.readlines()) assert tracks == expect_tracks def test_playlist(tmpdir): expect_tracks = 14 text_file = os.path.join(str(tmpdir), 'test_pl.txt') - spotify_tools.write_playlist('https://open.spotify.com/user/alex/playlist/0iWOVoumWlkXIrrBTSJmN8', text_file) - with open(text_file, 'r') as tin: - tracks = len(tin.readlines()) + spotify_tools.write_playlist(PLAYLIST_URL, text_file) + with open(text_file, 'r') as f: + tracks = len(f.readlines()) assert tracks == expect_tracks @@ -30,9 +32,9 @@ def test_album(tmpdir): expect_tracks = 15 global text_file 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 tin: - tracks = len(tin.readlines()) + spotify_tools.write_album(ALBUM_URL, text_file) + with open(text_file, 'r') as f: + tracks = len(f.readlines()) assert tracks == expect_tracks @@ -47,4 +49,4 @@ def test_trim(): with open(text_file, 'r') as track_file: number = len(track_file.readlines()) - assert (expect_number == number and expect_track == track) + assert expect_number == number and expect_track == track diff --git a/test/test_with_metadata.py b/test/test_with_metadata.py index 86e914a..65ba68c 100644 --- a/test/test_with_metadata.py +++ b/test/test_with_metadata.py @@ -1,3 +1,4 @@ +import os from spotdl import const from spotdl import internals @@ -5,48 +6,46 @@ from spotdl import spotify_tools from spotdl import youtube_tools from spotdl import convert from spotdl import metadata - from spotdl import spotdl import loader -import os loader.load_defaults() -raw_song = 'http://open.spotify.com/track/0JlS7BXXD07hRmevDnbPDU' + +TRACK_URL = 'http://open.spotify.com/track/0JlS7BXXD07hRmevDnbPDU' +EXPECTED_TITLE = 'David André Østby - Intro' +EXPECTED_YT_TITLE = 'Intro - David André Østby' +EXPECTED_YT_URL = 'http://youtube.com/watch?v=rg1wfcty0BA' def test_metadata(): expect_number = 23 global meta_tags - meta_tags = spotify_tools.generate_metadata(raw_song) + meta_tags = spotify_tools.generate_metadata(TRACK_URL) assert len(meta_tags) == expect_number class TestFileFormat: def test_with_spaces(self): - expect_title = 'David André Østby - Intro' title = internals.format_string(const.args.file_format, meta_tags) - assert title == expect_title + assert title == EXPECTED_TITLE def test_without_spaces(self): - expect_title = 'David_André_Østby_-_Intro' const.args.no_spaces = True title = internals.format_string(const.args.file_format, meta_tags) - assert title == expect_title + assert title == EXPECTED_TITLE.replace(' ', '_') def test_youtube_url(): - expect_url = 'http://youtube.com/watch?v=rg1wfcty0BA' - url = youtube_tools.generate_youtube_url(raw_song, meta_tags) - assert url == expect_url + url = youtube_tools.generate_youtube_url(TRACK_URL, meta_tags) + assert url == EXPECTED_YT_URL def test_youtube_title(): - expect_title = 'Intro - David André Østby' global content - content = youtube_tools.go_pafy(raw_song, meta_tags) + content = youtube_tools.go_pafy(TRACK_URL, meta_tags) title = youtube_tools.get_youtube_title(content) - assert title == expect_title + assert title == EXPECTED_YT_TITLE def test_check_track_exists_before_download(tmpdir): @@ -56,7 +55,7 @@ def test_check_track_exists_before_download(tmpdir): songname = internals.format_string(const.args.file_format, meta_tags) global file_name file_name = internals.sanitize_title(songname) - check = spotdl.check_exists(file_name, raw_song, meta_tags) + check = spotdl.check_exists(file_name, TRACK_URL, meta_tags) assert check == expect_check @@ -72,7 +71,7 @@ class TestDownload: assert download == expect_download -class TestFFmpeg(): +class TestFFmpeg: def test_convert_from_webm_to_mp3(self): expect_return_code = 0 return_code = convert.song(file_name + '.webm', @@ -149,6 +148,6 @@ class TestEmbedMetadata: def test_check_track_exists_after_download(): expect_check = True - check = spotdl.check_exists(file_name, raw_song, meta_tags) + check = spotdl.check_exists(file_name, TRACK_URL, meta_tags) os.remove(track_path + '.mp3') assert check == expect_check diff --git a/test/test_without_metadata.py b/test/test_without_metadata.py index 5628ebf..aec57aa 100644 --- a/test/test_without_metadata.py +++ b/test/test_without_metadata.py @@ -1,38 +1,47 @@ +import os +import builtins + from spotdl import const from spotdl import internals from spotdl import spotify_tools from spotdl import youtube_tools - from spotdl import spotdl + import loader -import os -import builtins - loader.load_defaults() -raw_song = "Tony's Videos VERY SHORT VIDEO 28.10.2016" + +YT_API_KEY = 'AIzaSyAnItl3udec-Q1d5bkjKJGL-RgrKO_vU90' + +TRACK_SEARCH = "Tony's Videos VERY SHORT VIDEO 28.10.2016" +EXPECTED_TITLE = TRACK_SEARCH +EXPECTED_YT_URL = 'http://youtube.com/watch?v=qOOcy2-tmbk' +EXPECTED_YT_URLS = (EXPECTED_YT_URL, 'http://youtube.com/watch?v=5USR1Omo7f0') + +RESULT_COUNT_SEARCH = "she is still sleeping SAO" + +EXPECTED_YT_API_KEY = 'AIzaSyC6cEeKlxtOPybk9sEe5ksFN5sB-7wzYp0' +EXPECTED_YT_API_KEY_CUSTOM = 'some_api_key' class TestYouTubeAPIKeys: def test_custom(self): - expect_key = 'some_api_key' - const.args.youtube_api_key = expect_key + const.args.youtube_api_key = EXPECTED_YT_API_KEY_CUSTOM youtube_tools.set_api_key() key = youtube_tools.pafy.g.api_key - assert key == expect_key + assert key == EXPECTED_YT_API_KEY_CUSTOM def test_default(self): - expect_key = 'AIzaSyC6cEeKlxtOPybk9sEe5ksFN5sB-7wzYp0' const.args.youtube_api_key = None youtube_tools.set_api_key() key = youtube_tools.pafy.g.api_key - assert key == expect_key + assert key == EXPECTED_YT_API_KEY def test_metadata(): expect_metadata = None global metadata - metadata = spotify_tools.generate_metadata(raw_song) + metadata = spotify_tools.generate_metadata(TRACK_SEARCH) assert metadata == expect_metadata @@ -40,15 +49,13 @@ class TestArgsManualResultCount: # Regresson test for issue #264 def test_scrape(self): const.args.manual = True - url = youtube_tools.GenerateYouTubeURL("she is still sleeping SAO", - meta_tags=None) + url = youtube_tools.GenerateYouTubeURL(RESULT_COUNT_SEARCH, meta_tags=None) video_ids = url.scrape(bestmatch=False) # Web scraping gives us all videos on the 1st page assert len(video_ids) == 20 def test_api(self): - url = youtube_tools.GenerateYouTubeURL("she is still sleeping SAO", - meta_tags=None) + url = youtube_tools.GenerateYouTubeURL(RESULT_COUNT_SEARCH, meta_tags=None) video_ids = url.api(bestmatch=False) const.args.manual = False # API gives us 50 videos (or as requested) @@ -57,30 +64,26 @@ class TestArgsManualResultCount: class TestYouTubeURL: def test_only_music_category(self): - # YouTube keeps changing its results - expect_urls = ('http://youtube.com/watch?v=qOOcy2-tmbk', - 'http://youtube.com/watch?v=5USR1Omo7f0') const.args.music_videos_only = True - url = youtube_tools.generate_youtube_url(raw_song, metadata) - assert url in expect_urls + url = youtube_tools.generate_youtube_url(TRACK_SEARCH, metadata) + # YouTube keeps changing its results + assert url in EXPECTED_YT_URLS def test_all_categories(self): - expect_url = 'http://youtube.com/watch?v=qOOcy2-tmbk' const.args.music_videos_only = False - url = youtube_tools.generate_youtube_url(raw_song, metadata) - assert url == expect_url + url = youtube_tools.generate_youtube_url(TRACK_SEARCH, metadata) + assert url == EXPECTED_YT_URL def test_args_manual(self, monkeypatch): - expect_url = 'http://youtube.com/watch?v=qOOcy2-tmbk' const.args.manual = True monkeypatch.setattr('builtins.input', lambda x: '1') - url = youtube_tools.generate_youtube_url(raw_song, metadata) - assert url == expect_url + url = youtube_tools.generate_youtube_url(TRACK_SEARCH, metadata) + assert url == EXPECTED_YT_URL def test_args_manual_none(self, monkeypatch): expect_url = None monkeypatch.setattr('builtins.input', lambda x: '0') - url = youtube_tools.generate_youtube_url(raw_song, metadata) + url = youtube_tools.generate_youtube_url(TRACK_SEARCH, metadata) const.args.manual = False assert url == expect_url @@ -89,21 +92,18 @@ class TestYouTubeTitle: def test_single_download_with_youtube_api(self): global content global title - expect_title = "Tony's Videos VERY SHORT VIDEO 28.10.2016" - key = 'AIzaSyAnItl3udec-Q1d5bkjKJGL-RgrKO_vU90' - const.args.youtube_api_key = key + const.args.youtube_api_key = YT_API_KEY youtube_tools.set_api_key() - content = youtube_tools.go_pafy(raw_song, metadata) + content = youtube_tools.go_pafy(TRACK_SEARCH, metadata) title = youtube_tools.get_youtube_title(content) - assert title == expect_title + assert title == EXPECTED_TITLE def test_download_from_list_without_youtube_api(self): - expect_title = "1. Tony's Videos VERY SHORT VIDEO 28.10.2016" const.args.youtube_api_key = None youtube_tools.set_api_key() - content = youtube_tools.go_pafy(raw_song, metadata) + content = youtube_tools.go_pafy(TRACK_SEARCH, metadata) title = youtube_tools.get_youtube_title(content, 1) - assert title == expect_title + assert title == "1. {0}".format(EXPECTED_TITLE) def test_check_exists(tmpdir): @@ -112,7 +112,7 @@ def test_check_exists(tmpdir): # prerequisites for determining filename global file_name file_name = internals.sanitize_title(title) - check = spotdl.check_exists(file_name, raw_song, metadata) + check = spotdl.check_exists(file_name, TRACK_SEARCH, metadata) assert check == expect_check