mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-10-29 18:00:15 +00:00
Fix tests
This commit is contained in:
@@ -1,24 +1,37 @@
|
|||||||
import spotdl.command_line.arguments
|
import spotdl.command_line.arguments
|
||||||
|
from spotdl.command_line.exceptions import ArgumentError
|
||||||
|
|
||||||
|
import logging
|
||||||
import sys
|
import sys
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def test_log_str_to_int():
|
def test_logging_levels():
|
||||||
expect_levels = [20, 30, 40, 10]
|
expect_logging_levels = {
|
||||||
levels = [spotdl.command_line.arguments.log_leveller(level)
|
"INFO": logging.INFO,
|
||||||
for level in spotdl.command_line.arguments._LOG_LEVELS_STR]
|
"WARNING": logging.WARNING,
|
||||||
assert levels == expect_levels
|
"DEBUG": logging.DEBUG,
|
||||||
|
"ERROR": logging.ERROR,
|
||||||
|
}
|
||||||
|
assert spotdl.command_line.arguments._LOG_LEVELS == expect_logging_levels
|
||||||
|
|
||||||
|
|
||||||
class TestBadArguments:
|
class TestBadArguments:
|
||||||
def test_error_m3u_without_list(self):
|
def test_error_m3u_without_list(self):
|
||||||
with pytest.raises(SystemExit):
|
previous_argv = sys.argv
|
||||||
spotdl.command_line.arguments.get_arguments(argv=("-t cool song", "--write-m3u"))
|
sys.argv[1:] = ["-s", "cool song", "--write-m3u"]
|
||||||
|
argument_handler = spotdl.command_line.arguments.get_arguments()
|
||||||
|
with pytest.raises(ArgumentError):
|
||||||
|
argument_handler.run_errands()
|
||||||
|
sys.argv[1:] = previous_argv[1:]
|
||||||
|
|
||||||
def test_write_to_error(self):
|
def test_write_to_error(self):
|
||||||
with pytest.raises(SystemExit):
|
previous_argv = sys.argv
|
||||||
spotdl.command_line.arguments.get_arguments(argv=("-t", "sekai all i had", "--write-to", "output.txt"))
|
sys.argv[1:] = ["-s", "sekai all i had", "--write-to", "output.txt"]
|
||||||
|
argument_handler = spotdl.command_line.arguments.get_arguments()
|
||||||
|
with pytest.raises(ArgumentError):
|
||||||
|
argument_handler.run_errands()
|
||||||
|
sys.argv[1:] = previous_argv[1:]
|
||||||
|
|
||||||
|
|
||||||
class TestArguments:
|
class TestArguments:
|
||||||
@@ -69,6 +82,9 @@ class TestArguments:
|
|||||||
assert arguments == expect_arguments
|
assert arguments == expect_arguments
|
||||||
|
|
||||||
def test_grouped_arguments(self):
|
def test_grouped_arguments(self):
|
||||||
|
previous_argv = sys.argv
|
||||||
|
sys.argv[1:] = []
|
||||||
with pytest.raises(SystemExit):
|
with pytest.raises(SystemExit):
|
||||||
spotdl.command_line.arguments.get_arguments()
|
argument_handler = spotdl.command_line.arguments.get_arguments()
|
||||||
|
sys.argv[1:] = previous_argv[1:]
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class TestGenius:
|
|||||||
expect_lyrics = ""
|
expect_lyrics = ""
|
||||||
|
|
||||||
def __init__(self, request, timeout=None):
|
def __init__(self, request, timeout=None):
|
||||||
search_results_url = "https://genius.com/api/search/multi?per_page=1&q=selena+gomez+wolves"
|
search_results_url = "https://genius.com/api/search/multi?per_page=1&q=selena%2Bgomez%2Bwolves"
|
||||||
if request._full_url == search_results_url:
|
if request._full_url == search_results_url:
|
||||||
read_method = lambda: json.dumps({
|
read_method = lambda: json.dumps({
|
||||||
"response": {"sections": [{"hits": [{"result": {
|
"response": {"sections": [{"hits": [{"result": {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from spotdl.metadata.providers.youtube import YouTubeSearch
|
from spotdl.metadata.providers.youtube import YouTubeSearch
|
||||||
from spotdl.metadata.providers.youtube import YouTubeStreams
|
from spotdl.metadata.providers.youtube import YouTubeStreams
|
||||||
|
from spotdl.metadata.providers.youtube import YouTubeVideos
|
||||||
from spotdl.metadata.providers import youtube
|
from spotdl.metadata.providers import youtube
|
||||||
from spotdl.metadata.providers import ProviderYouTube
|
from spotdl.metadata.providers import ProviderYouTube
|
||||||
from spotdl.metadata.exceptions import YouTubeMetadataNotFoundError
|
from spotdl.metadata.exceptions import YouTubeMetadataNotFoundError
|
||||||
@@ -36,18 +37,38 @@ def expect_search_results():
|
|||||||
These are the expected search results for the "track"
|
These are the expected search results for the "track"
|
||||||
query.
|
query.
|
||||||
"""
|
"""
|
||||||
return [
|
return YouTubeVideos([
|
||||||
"https://www.youtube.com/watch?v=cH4E_t3m3xM",
|
{'duration': '3:33',
|
||||||
"https://www.youtube.com/watch?v=xrbY9gDVms0",
|
'title': 'Selena Gomez, Marshmello - Wolves',
|
||||||
"https://www.youtube.com/watch?v=jX0n2rSmDbE",
|
'url': 'https://www.youtube.com/watch?v=cH4E_t3m3xM'},
|
||||||
"https://www.youtube.com/watch?v=nVzA1uWTydQ",
|
{'duration': '3:18',
|
||||||
"https://www.youtube.com/watch?v=rQ6jcpwzQZU",
|
'title': 'Selena Gomez, Marshmello - Wolves (Lyrics)',
|
||||||
"https://www.youtube.com/watch?v=VY1eFxgRR-k",
|
'url': 'https://www.youtube.com/watch?v=xrbY9gDVms0'},
|
||||||
"https://www.youtube.com/watch?v=j0AxZ4V5WQw",
|
{'duration': '3:21',
|
||||||
"https://www.youtube.com/watch?v=zbWsb36U0uo",
|
'title': 'Wolves - Selena Gomez, Marshmello (Lyrics)',
|
||||||
"https://www.youtube.com/watch?v=3B1aY9Ob8r0",
|
'url': 'https://www.youtube.com/watch?v=jX0n2rSmDbE'},
|
||||||
"https://www.youtube.com/watch?v=hd2SGk90r9k",
|
{'duration': '6:26',
|
||||||
]
|
'title': 'Selena Gomez and Marshmello - Wolves (Official) Extended',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=rQ6jcpwzQZU'},
|
||||||
|
{'duration': '3:43',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Vertical Video)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=nVzA1uWTydQ'},
|
||||||
|
{'duration': '3:18',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Visualizer)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=-grLLLTza6k'},
|
||||||
|
{'duration': '1:32',
|
||||||
|
'title': 'Wolves - Selena Gomez, Marshmello / Jun Liu Choreography',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=zbWsb36U0uo'},
|
||||||
|
{'duration': '3:17',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Lyrics)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=rykH1BkGwTo'},
|
||||||
|
{'duration': '3:16',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (8D AUDIO)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=j0AxZ4V5WQw'},
|
||||||
|
{'duration': '3:47',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Vanrip Remix)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=RyxsaKfu-ZY'}
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
@@ -56,18 +77,38 @@ def expect_mock_search_results():
|
|||||||
These are the expected mock search results for the
|
These are the expected mock search results for the
|
||||||
"track" query.
|
"track" query.
|
||||||
"""
|
"""
|
||||||
return [
|
return YouTubeVideos([
|
||||||
"https://www.youtube.com/watch?v=cH4E_t3m3xM",
|
{'duration': '3:33',
|
||||||
"https://www.youtube.com/watch?v=xrbY9gDVms0",
|
'title': 'Selena Gomez, Marshmello - Wolves',
|
||||||
"https://www.youtube.com/watch?v=jX0n2rSmDbE",
|
'url': 'https://www.youtube.com/watch?v=cH4E_t3m3xM'},
|
||||||
"https://www.youtube.com/watch?v=rQ6jcpwzQZU",
|
{'duration': '3:18',
|
||||||
"https://www.youtube.com/watch?v=nVzA1uWTydQ",
|
'title': 'Selena Gomez, Marshmello - Wolves (Lyrics)',
|
||||||
"https://www.youtube.com/watch?v=-grLLLTza6k",
|
'url': 'https://www.youtube.com/watch?v=xrbY9gDVms0'},
|
||||||
"https://www.youtube.com/watch?v=zbWsb36U0uo",
|
{'duration': '3:21',
|
||||||
"https://www.youtube.com/watch?v=rykH1BkGwTo",
|
'title': 'Wolves - Selena Gomez, Marshmello (Lyrics)',
|
||||||
"https://www.youtube.com/watch?v=j0AxZ4V5WQw",
|
'url': 'https://www.youtube.com/watch?v=jX0n2rSmDbE'},
|
||||||
"https://www.youtube.com/watch?v=RyxsaKfu-ZY",
|
{'duration': '6:26',
|
||||||
]
|
'title': 'Selena Gomez and Marshmello - Wolves (Official) Extended',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=rQ6jcpwzQZU'},
|
||||||
|
{'duration': '3:43',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Vertical Video)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=nVzA1uWTydQ'},
|
||||||
|
{'duration': '3:18',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Visualizer)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=-grLLLTza6k'},
|
||||||
|
{'duration': '1:32',
|
||||||
|
'title': 'Wolves - Selena Gomez, Marshmello / Jun Liu Choreography',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=zbWsb36U0uo'},
|
||||||
|
{'duration': '3:17',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Lyrics)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=rykH1BkGwTo'},
|
||||||
|
{'duration': '3:16',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (8D AUDIO)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=j0AxZ4V5WQw'},
|
||||||
|
{'duration': '3:47',
|
||||||
|
'title': 'Selena Gomez, Marshmello - Wolves (Vanrip Remix)',
|
||||||
|
'url': 'https://www.youtube.com/watch?v=RyxsaKfu-ZY'}
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
class MockHTTPResponse:
|
class MockHTTPResponse:
|
||||||
@@ -135,7 +176,7 @@ class TestYouTubeSearch:
|
|||||||
@pytest.mark.network
|
@pytest.mark.network
|
||||||
def test_no_videos_search(self, no_result_track, youtube_searcher):
|
def test_no_videos_search(self, no_result_track, youtube_searcher):
|
||||||
results = youtube_searcher.search(no_result_track)
|
results = youtube_searcher.search(no_result_track)
|
||||||
assert results == []
|
assert results == YouTubeVideos([])
|
||||||
|
|
||||||
def test_mock_no_videos_search(self, no_result_track, youtube_searcher, monkeypatch):
|
def test_mock_no_videos_search(self, no_result_track, youtube_searcher, monkeypatch):
|
||||||
MockHTTPResponse.response_file = "youtube_no_search_results.html"
|
MockHTTPResponse.response_file = "youtube_no_search_results.html"
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ class YouTubeVideos(Sequence):
|
|||||||
def __getitem__(self, index):
|
def __getitem__(self, index):
|
||||||
return self.videos[index]
|
return self.videos[index]
|
||||||
|
|
||||||
|
def __eq__(self, instance):
|
||||||
|
return self.videos == instance.videos
|
||||||
|
|
||||||
def bestmatch(self):
|
def bestmatch(self):
|
||||||
video = self.videos[0]
|
video = self.videos[0]
|
||||||
logger.debug("Matched with: {title} ({url}) [{duration}]".format(
|
logger.debug("Matched with: {title} ({url}) [{duration}]".format(
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class TestDefaultConfigFile:
|
|||||||
class TestConfig:
|
class TestConfig:
|
||||||
def test_default_config(self, config_path):
|
def test_default_config(self, config_path):
|
||||||
expect_config = spotdl.config.DEFAULT_CONFIGURATION["spotify-downloader"]
|
expect_config = spotdl.config.DEFAULT_CONFIGURATION["spotify-downloader"]
|
||||||
config = spotdl.config.get_config(config_path)
|
config = spotdl.config.get_config(config_path)["spotify-downloader"]
|
||||||
assert config == expect_config
|
assert config == expect_config
|
||||||
|
|
||||||
@pytest.mark.xfail
|
@pytest.mark.xfail
|
||||||
|
|||||||
@@ -7,53 +7,12 @@ import spotdl.util
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
def test_default_music_directory():
|
|
||||||
if sys.platform.startswith("linux"):
|
|
||||||
output = subprocess.check_output(["xdg-user-dir", "MUSIC"])
|
|
||||||
expect_directory = output.decode("utf-8").rstrip()
|
|
||||||
else:
|
|
||||||
home = os.path.expanduser("~")
|
|
||||||
expect_directory = os.path.join(home, "Music")
|
|
||||||
|
|
||||||
directory = spotdl.util.get_music_dir()
|
|
||||||
assert directory == expect_directory
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
def directory_fixture(tmpdir_factory):
|
def directory_fixture(tmpdir_factory):
|
||||||
dir_path = os.path.join(str(tmpdir_factory.mktemp("tmpdir")), "filter_this_directory")
|
dir_path = os.path.join(str(tmpdir_factory.mktemp("tmpdir")), "filter_this_directory")
|
||||||
return dir_path
|
return dir_path
|
||||||
|
|
||||||
|
|
||||||
class TestPathFilterer:
|
|
||||||
def test_create_directory(self, directory_fixture):
|
|
||||||
expect_path = True
|
|
||||||
spotdl.util.filter_path(directory_fixture)
|
|
||||||
is_path = os.path.isdir(directory_fixture)
|
|
||||||
assert is_path == expect_path
|
|
||||||
|
|
||||||
def test_remove_temp_files(self, directory_fixture):
|
|
||||||
expect_file = False
|
|
||||||
file_path = os.path.join(directory_fixture, "pesky_file.temp")
|
|
||||||
open(file_path, "a")
|
|
||||||
spotdl.util.filter_path(directory_fixture)
|
|
||||||
is_file = os.path.isfile(file_path)
|
|
||||||
assert is_file == expect_file
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("sec_duration, str_duration", [
|
|
||||||
(35, "35"),
|
|
||||||
(23, "23"),
|
|
||||||
(158, "2:38"),
|
|
||||||
(263, "4:23"),
|
|
||||||
(4562, "1:16:02"),
|
|
||||||
(26765, "7:26:05"),
|
|
||||||
])
|
|
||||||
def test_video_time_from_seconds(sec_duration, str_duration):
|
|
||||||
duration = spotdl.util.videotime_from_seconds(sec_duration)
|
|
||||||
assert duration == str_duration
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("str_duration, sec_duration", [
|
@pytest.mark.parametrize("str_duration, sec_duration", [
|
||||||
("0:23", 23),
|
("0:23", 23),
|
||||||
("0:45", 45),
|
("0:45", 45),
|
||||||
|
|||||||
Reference in New Issue
Block a user