ucast/ucast/tests/service/test_storage.py
2022-06-29 23:25:43 +02:00

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")