Files
spotify-downloader/test/test_internals.py
2018-10-09 00:57:11 -07:00

129 lines
3.8 KiB
Python

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"])
expect_directory = output.decode("utf-8").rstrip()
else:
home = os.path.expanduser("~")
expect_directory = os.path.join(home, "Music")
directory = internals.get_music_dir()
assert directory == expect_directory
class TestPathFilterer:
def test_create_directory(self, tmpdir):
expect_path = True
global folder_path
folder_path = os.path.join(str(tmpdir), "filter_this_folder")
internals.filter_path(folder_path)
is_path = os.path.isdir(folder_path)
assert is_path == expect_path
def test_remove_temp_files(self, tmpdir):
expect_file = False
file_path = os.path.join(folder_path, "pesky_file.temp")
open(file_path, "a")
internals.filter_path(folder_path)
is_file = os.path.isfile(file_path)
assert is_file == expect_file
class TestVideoTimeFromSeconds:
def test_from_seconds(self):
expect_duration = "35"
duration = internals.videotime_from_seconds(35)
assert duration == expect_duration
def test_from_minutes(self):
expect_duration = "2:38"
duration = internals.videotime_from_seconds(158)
assert duration == expect_duration
def test_from_hours(self):
expect_duration = "1:16:02"
duration = internals.videotime_from_seconds(4562)
assert duration == expect_duration
class TestGetSeconds:
def test_from_seconds(self):
expect_secs = 45
secs = internals.get_sec("0:45")
assert secs == expect_secs
secs = internals.get_sec("0.45")
assert secs == expect_secs
def test_from_minutes(self):
expect_secs = 213
secs = internals.get_sec("3.33")
assert secs == expect_secs
secs = internals.get_sec("3:33")
assert secs == expect_secs
def test_from_hours(self):
expect_secs = 5405
secs = internals.get_sec("1.30.05")
assert secs == expect_secs
secs = internals.get_sec("1:30:05")
assert secs == expect_secs
def test_raise_error(self):
with pytest.raises(ValueError):
internals.get_sec("10*05")
with pytest.raises(ValueError):
internals.get_sec("02,28,46")
@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 f:
f.write("\n".join(duplicates))
unique_tracks = internals.get_unique_tracks(file_path)
assert tuple(unique_tracks) == expected