112 lines
4.5 KiB
Python
112 lines
4.5 KiB
Python
import re
|
|
|
|
import pytest
|
|
|
|
from ytdl_sub.script.utils.exceptions import UserThrownRuntimeError
|
|
from ytdl_sub.subscriptions.subscription import Subscription
|
|
|
|
|
|
class TestTvShowCollectionPreset:
|
|
def test_url_error_thrown(self, default_config):
|
|
with pytest.raises(
|
|
UserThrownRuntimeError,
|
|
match=re.escape(
|
|
"Provided `url` to TV Show Collection preset when it expects `s01_url`. "
|
|
"Perhaps you meant to use the `TV Show by Date` preset?"
|
|
),
|
|
):
|
|
_ = Subscription.from_dict(
|
|
config=default_config,
|
|
preset_name="test",
|
|
preset_dict={
|
|
"preset": "Jellyfin TV Show Collection",
|
|
"overrides": {"tv_show_directory": "abc", "url": "test"},
|
|
},
|
|
)
|
|
|
|
def test_multi_url(self, default_config):
|
|
num_seasons = 40 # excluding season 0
|
|
num_urls_per_season = 11
|
|
|
|
overrides = {
|
|
"tv_show_directory": "abc",
|
|
}
|
|
for season_num in range(0, num_seasons + 1):
|
|
overrides[f"s{season_num:02d}_name"] = f"The Season {season_num}"
|
|
overrides[f"s{season_num:02d}_url"] = [
|
|
f"youtube.com/playlist?url_{season_num}_{i}" for i in range(num_urls_per_season)
|
|
]
|
|
|
|
sub = Subscription.from_dict(
|
|
config=default_config,
|
|
preset_name="test",
|
|
preset_dict={"preset": "Jellyfin TV Show Collection", "overrides": overrides},
|
|
)
|
|
|
|
assert len(sub.downloader_options.urls.list) == (num_seasons + 1) * 3
|
|
url_list = sub.downloader_options.urls.list
|
|
itr = 0
|
|
|
|
# loop twice for bilateral
|
|
for i in range(2):
|
|
for season_num in range(1, num_seasons + 2):
|
|
# Season 0 is placed last, adjust here
|
|
if season_num == num_seasons + 1:
|
|
season_num = 0
|
|
|
|
# is_bilateral
|
|
if i == 0:
|
|
url = sub.overrides.apply_formatter(
|
|
url_list[itr].url,
|
|
function_overrides={
|
|
# mock so bilateral url gets enabled
|
|
"subscription_has_download_archive": "True"
|
|
},
|
|
expected_type=list,
|
|
)
|
|
assert url == [
|
|
f"youtube.com/playlist?url_{season_num}_{i}"
|
|
for i in range(num_urls_per_season)
|
|
]
|
|
variables = url_list[itr].variables.dict
|
|
assert (
|
|
sub.overrides.apply_formatter(variables["collection_season_number"])
|
|
== f"{season_num}"
|
|
)
|
|
assert (
|
|
sub.overrides.apply_formatter(variables["collection_season_name"])
|
|
== f"The Season {season_num}"
|
|
)
|
|
itr += 1
|
|
# not bilateral
|
|
else:
|
|
for j in range(2):
|
|
url = sub.overrides.apply_formatter(
|
|
url_list[itr + j].url,
|
|
function_overrides={
|
|
# mock so bilateral url gets enabled
|
|
"subscription_has_download_archive": "True"
|
|
},
|
|
expected_type=list,
|
|
)
|
|
|
|
# First instance is the first url to get thumbnails
|
|
if j == 0:
|
|
assert url == [f"youtube.com/playlist?url_{season_num}_0"]
|
|
# Next one contains remaining urls
|
|
else:
|
|
assert url == [
|
|
f"youtube.com/playlist?url_{season_num}_{i}"
|
|
for i in range(1, num_urls_per_season)
|
|
]
|
|
|
|
variables = url_list[itr].variables.dict
|
|
assert (
|
|
sub.overrides.apply_formatter(variables["collection_season_number"])
|
|
== f"{season_num}"
|
|
)
|
|
assert (
|
|
sub.overrides.apply_formatter(variables["collection_season_name"])
|
|
== f"The Season {season_num}"
|
|
)
|
|
itr += 2
|