84 lines
2.4 KiB
Python
84 lines
2.4 KiB
Python
import os
|
|
import tempfile
|
|
from datetime import datetime, timedelta
|
|
from pathlib import Path
|
|
|
|
from ucast.service import storage
|
|
|
|
|
|
def test_create_channel_folders(settings):
|
|
tmpdir_o = tempfile.TemporaryDirectory()
|
|
tmpdir = Path(tmpdir_o.name)
|
|
settings.DOWNLOAD_ROOT = tmpdir
|
|
|
|
store = storage.Storage()
|
|
cf1 = store.get_or_create_channel_folder("ThetaDev")
|
|
cf2 = store.get_or_create_channel_folder("Jeff_Geerling")
|
|
cf1b = store.get_channel_folder("ThetaDev")
|
|
|
|
cf1_path = tmpdir / "ThetaDev"
|
|
cf2_path = tmpdir / "Jeff_Geerling"
|
|
|
|
assert cf1.dir_root == cf1_path
|
|
assert cf1b.dir_root == cf1_path
|
|
assert cf2.dir_root == cf2_path
|
|
|
|
assert os.path.isdir(cf1_path)
|
|
assert os.path.isdir(cf2_path)
|
|
|
|
|
|
def test_channel_folder():
|
|
tmpdir_o = tempfile.TemporaryDirectory()
|
|
tmpdir = Path(tmpdir_o.name)
|
|
ucast_dir = tmpdir / "_ucast"
|
|
|
|
cf = storage.ChannelFolder(tmpdir)
|
|
|
|
# Verify internal paths
|
|
assert cf.file_avatar == ucast_dir / "avatar.jpg"
|
|
assert cf.file_avatar_sm == ucast_dir / "avatar_sm.webp"
|
|
assert cf.dir_covers == ucast_dir / "covers"
|
|
assert cf.dir_thumbnails == ucast_dir / "thumbnails"
|
|
|
|
# Create the folder
|
|
assert not cf.does_exist()
|
|
cf.create()
|
|
assert cf.does_exist()
|
|
|
|
assert cf.get_cover("my_video_title") == ucast_dir / "covers" / "my_video_title.png"
|
|
assert (
|
|
cf.get_thumbnail("my_video_title")
|
|
== ucast_dir / "thumbnails" / "my_video_title.webp"
|
|
)
|
|
assert (
|
|
cf.get_thumbnail("my_video_title", True)
|
|
== ucast_dir / "thumbnails" / "my_video_title_sm.webp"
|
|
)
|
|
assert cf.get_audio("my_video_title") == tmpdir / "my_video_title.mp3"
|
|
|
|
|
|
def test_clean_cache(settings, mocker):
|
|
tmpdir_o = tempfile.TemporaryDirectory()
|
|
tmpdir = Path(tmpdir_o.name)
|
|
|
|
os.mkdir(tmpdir / "yt_dlp")
|
|
os.mkdir(tmpdir / "dld_old")
|
|
os.mkdir(tmpdir / "dld_new")
|
|
|
|
def mock_ctime(path):
|
|
if path == "dld_new":
|
|
return datetime.now().timestamp()
|
|
if path == "dld_old":
|
|
return (datetime.now() - timedelta(days=1, minutes=1)).timestamp()
|
|
raise Exception("invalid path")
|
|
|
|
mocker.patch.object(os.path, "getctime", mock_ctime)
|
|
|
|
settings.CACHE_ROOT = tmpdir
|
|
cache = storage.Cache()
|
|
|
|
cache.cleanup()
|
|
|
|
assert os.path.isdir(tmpdir / "yt_dlp")
|
|
assert os.path.isdir(tmpdir / "dld_new")
|
|
assert not os.path.exists(tmpdir / "dld_old")
|