ytdl-sub/tests/unit/config/test_subscription_inspect.py
2026-01-12 08:17:00 -08:00

109 lines
3.5 KiB
Python

from pathlib import Path
from resources import expected_json
from ytdl_sub.config.config_file import ConfigFile
from ytdl_sub.entries.script.variable_definitions import VARIABLES
from ytdl_sub.script.script import Script
from ytdl_sub.subscriptions.subscription import Subscription
from ytdl_sub.utils.script import ScriptUtils
def _ensure_partial_resolve(
sub: Subscription, preset_type: str, built_in_unresolvable: bool
) -> Script:
unresolvable = sub.plugins.get_all_variables(
additional_options=[sub.downloader_options, sub.output_options]
)
unresolvable.add("entry_metadata")
unresolvable.add("sibling_metadata")
if built_in_unresolvable:
unresolvable.update(VARIABLES.scripts().keys())
script = sub.overrides.script.add(
{
f"{preset_type}_directory": "tv_show_directory_path",
f"{preset_type}_directory_sanitized": "tv_show_directory_path",
}
)
partial_script = script.resolve_partial(unresolvable=unresolvable)
out = {
name: ScriptUtils.to_native_script(partial_script._variables[name])
for name in sub.overrides.keys
if not name.startswith("%")
}
assert out == expected_json(out, f"{preset_type}/inspect_built_in_unresolvable_overrides.json")
out = {
name: ScriptUtils.to_native_script(partial_script._variables[name])
for name in partial_script.variable_names
}
assert out == expected_json(out, f"{preset_type}/inspect_built_in_unresolvable_all.json")
def test_partial_resolve_tv_show(config_file: ConfigFile, tv_show_subscriptions_path: Path):
_ensure_partial_resolve(
sub=Subscription.from_file_path(
config=config_file, subscription_path=tv_show_subscriptions_path
)[0],
preset_type="tv_show",
built_in_unresolvable=True,
)
def test_partial_resolve_tv_show_full(config_file: ConfigFile, tv_show_subscriptions_path: Path):
_ensure_partial_resolve(
sub=Subscription.from_file_path(
config=config_file, subscription_path=tv_show_subscriptions_path
)[0],
preset_type="tv_show",
built_in_unresolvable=False,
)
def test_partial_resolve_music(default_config: ConfigFile, music_subscriptions_path: Path):
_ensure_partial_resolve(
sub=Subscription.from_file_path(
config=default_config, subscription_path=music_subscriptions_path
)[0],
preset_type="music",
built_in_unresolvable=True,
)
def test_partial_resolve_music_full(default_config: ConfigFile, music_subscriptions_path: Path):
_ensure_partial_resolve(
sub=Subscription.from_file_path(
config=default_config, subscription_path=music_subscriptions_path
)[0],
preset_type="music",
built_in_unresolvable=False,
)
def test_partial_resolve_music_video(
default_config: ConfigFile, music_video_subscription_path: Path
):
_ensure_partial_resolve(
sub=Subscription.from_file_path(
config=default_config, subscription_path=music_video_subscription_path
)[0],
preset_type="music_video",
built_in_unresolvable=False,
)
def test_partial_resolve_music_video_full(
default_config: ConfigFile, music_video_subscription_path: Path
):
_ensure_partial_resolve(
sub=Subscription.from_file_path(
config=default_config, subscription_path=music_video_subscription_path
)[0],
preset_type="music_video",
built_in_unresolvable=True,
)