clean up tests, WIP
This commit is contained in:
parent
3c105c11cc
commit
5ff239bc0e
2 changed files with 98 additions and 35 deletions
|
|
@ -65,7 +65,9 @@ class Subscription(SubscriptionDownload):
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _maybe_get_subscription_value(cls, config: ConfigFile, subscription_dict: Dict) -> Optional[str]:
|
def _maybe_get_subscription_value(
|
||||||
|
cls, config: ConfigFile, subscription_dict: Dict
|
||||||
|
) -> Optional[str]:
|
||||||
if FILE_SUBSCRIPTION_VALUE_KEY in subscription_dict:
|
if FILE_SUBSCRIPTION_VALUE_KEY in subscription_dict:
|
||||||
if not isinstance(subscription_dict[FILE_SUBSCRIPTION_VALUE_KEY], str):
|
if not isinstance(subscription_dict[FILE_SUBSCRIPTION_VALUE_KEY], str):
|
||||||
raise ValidationException(
|
raise ValidationException(
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
import re
|
import re
|
||||||
|
from contextlib import contextmanager
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from mergedeep import mergedeep
|
||||||
|
|
||||||
from ytdl_sub.config.config_file import ConfigFile
|
from ytdl_sub.config.config_file import ConfigFile
|
||||||
from ytdl_sub.plugins.nfo_tags import NfoTagsOptions
|
from ytdl_sub.plugins.nfo_tags import NfoTagsOptions
|
||||||
|
|
@ -11,6 +13,22 @@ from ytdl_sub.subscriptions.subscription import Subscription
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def config_file_with_subscription_value(config_file: ConfigFile):
|
||||||
|
config_dict = config_file.as_dict()
|
||||||
|
mergedeep.merge(
|
||||||
|
config_dict, {"configuration": {"subscription_value": "test_config_subscription_value"}}
|
||||||
|
)
|
||||||
|
return ConfigFile.from_dict(config_dict)
|
||||||
|
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def mock_load_yaml(preset_dict: Dict) -> None:
|
||||||
|
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
||||||
|
mock_load_yaml.return_value = preset_dict
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def preset_file(youtube_video: Dict, output_options: Dict):
|
def preset_file(youtube_video: Dict, output_options: Dict):
|
||||||
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
||||||
|
|
@ -21,9 +39,11 @@ def preset_file(youtube_video: Dict, output_options: Dict):
|
||||||
"nfo_tags": {
|
"nfo_tags": {
|
||||||
"tags": {"key-3": "file_preset"},
|
"tags": {"key-3": "file_preset"},
|
||||||
},
|
},
|
||||||
"overrides": {"test_override": "original"},
|
"overrides": {
|
||||||
|
"test_file_subscription_value": "original",
|
||||||
|
"test_config_subscription_value": "original",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
"__value__": "test_override",
|
|
||||||
"test_preset": {
|
"test_preset": {
|
||||||
"preset": "parent_preset_3",
|
"preset": "parent_preset_3",
|
||||||
"nfo_tags": {
|
"nfo_tags": {
|
||||||
|
|
@ -34,6 +54,28 @@ def preset_file(youtube_video: Dict, output_options: Dict):
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def preset_with_subscription_value(youtube_video: Dict, output_options: Dict):
|
||||||
|
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
||||||
|
mock_load_yaml.return_value = {
|
||||||
|
"__preset__": {
|
||||||
|
"preset": "parent_preset_3",
|
||||||
|
"download": youtube_video,
|
||||||
|
"output_options": output_options,
|
||||||
|
"nfo_tags": {
|
||||||
|
"tags": {"key-3": "file_preset"},
|
||||||
|
},
|
||||||
|
"overrides": {
|
||||||
|
"test_file_subscription_value": "original",
|
||||||
|
"test_config_subscription_value": "original",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"__value__": "test_file_subscription_value",
|
||||||
|
"test_value": "is_overwritten",
|
||||||
|
}
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def preset_file_with_value(youtube_video: Dict, output_options: Dict):
|
def preset_file_with_value(youtube_video: Dict, output_options: Dict):
|
||||||
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
||||||
|
|
@ -45,37 +87,17 @@ def preset_file_with_value(youtube_video: Dict, output_options: Dict):
|
||||||
"nfo_tags": {
|
"nfo_tags": {
|
||||||
"tags": {"key-3": "file_preset"},
|
"tags": {"key-3": "file_preset"},
|
||||||
},
|
},
|
||||||
"overrides": {"test_override": "original"},
|
"overrides": {
|
||||||
|
"test_file_subscription_value": "original",
|
||||||
|
"test_config_subscription_value": "original",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
"__value__": "test_override",
|
"__value__": "test_file_subscription_value",
|
||||||
"test_value": "is_overwritten",
|
"test_value": "is_overwritten",
|
||||||
}
|
}
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def preset_file_invalid_value():
|
|
||||||
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
|
||||||
mock_load_yaml.return_value = {
|
|
||||||
"__value__": {"should be": "string"},
|
|
||||||
}
|
|
||||||
yield
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def preset_file_subscription_using_value_when_not_defined():
|
|
||||||
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
|
||||||
mock_load_yaml.return_value = {"sub_name": "single value, __value__ not defined"}
|
|
||||||
yield
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def preset_file_subscription_with_invalid_form():
|
|
||||||
with patch("ytdl_sub.subscriptions.subscription.load_yaml") as mock_load_yaml:
|
|
||||||
mock_load_yaml.return_value = {"sub_name": 4332}
|
|
||||||
yield
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(preset_file.__name__)
|
@pytest.mark.usefixtures(preset_file.__name__)
|
||||||
def test_subscription_file_preset_applies(config_file: ConfigFile):
|
def test_subscription_file_preset_applies(config_file: ConfigFile):
|
||||||
subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
||||||
|
|
@ -103,12 +125,51 @@ def test_subscription_file_value_applies(config_file: ConfigFile):
|
||||||
|
|
||||||
# Test __value__ worked correctly
|
# Test __value__ worked correctly
|
||||||
value_sub = subs[0]
|
value_sub = subs[0]
|
||||||
assert value_sub.overrides.dict_with_format_strings.get("test_override") == "is_overwritten"
|
assert (
|
||||||
|
value_sub.overrides.dict_with_format_strings.get("test_file_subscription_value")
|
||||||
|
== "is_overwritten"
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
value_sub.overrides.dict_with_format_strings.get("test_config_subscription_value")
|
||||||
|
== "original"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures(preset_file_with_value.__name__)
|
||||||
|
def test_subscription_file_value_applies_sub_file_takes_precedence(
|
||||||
|
config_file_with_subscription_value: ConfigFile,
|
||||||
|
):
|
||||||
|
subs = Subscription.from_file_path(
|
||||||
|
config=config_file_with_subscription_value, subscription_path="mocked"
|
||||||
|
)
|
||||||
|
assert len(subs) == 1
|
||||||
|
|
||||||
|
# Test __value__ worked correctly
|
||||||
|
value_sub = subs[0]
|
||||||
|
assert (
|
||||||
|
value_sub.overrides.dict_with_format_strings.get("test_file_subscription_value")
|
||||||
|
== "is_overwritten"
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
value_sub.overrides.dict_with_format_strings.get("test_config_subscription_value")
|
||||||
|
== "original"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# @pytest.mark.usefixtures(preset_file.__name__)
|
||||||
|
# def test_subscription_file_value_applies_from_config(config_file: ConfigFile):
|
||||||
|
# subs = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
||||||
|
# assert len(subs) == 1
|
||||||
|
#
|
||||||
|
# # Test __value__ worked correctly
|
||||||
|
# value_sub = subs[0]
|
||||||
|
# assert value_sub.overrides.dict_with_format_strings.get("test_file_subscription_value") == "original"
|
||||||
|
# assert value_sub.overrides.dict_with_format_strings.get(
|
||||||
|
# "test_config_subscription_value") == "is_overwritten"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(preset_file_invalid_value.__name__)
|
|
||||||
def test_subscription_file_bad_value(config_file: ConfigFile):
|
def test_subscription_file_bad_value(config_file: ConfigFile):
|
||||||
with pytest.raises(
|
with mock_load_yaml(preset_dict={"__value__": {"should be": "string"}}), pytest.raises(
|
||||||
ValidationException,
|
ValidationException,
|
||||||
match=re.escape(
|
match=re.escape(
|
||||||
f"Using {FILE_SUBSCRIPTION_VALUE_KEY} in a subscription"
|
f"Using {FILE_SUBSCRIPTION_VALUE_KEY} in a subscription"
|
||||||
|
|
@ -118,9 +179,10 @@ def test_subscription_file_bad_value(config_file: ConfigFile):
|
||||||
_ = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
_ = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(preset_file_subscription_using_value_when_not_defined.__name__)
|
|
||||||
def test_subscription_file_using_value_when_not_defined(config_file: ConfigFile):
|
def test_subscription_file_using_value_when_not_defined(config_file: ConfigFile):
|
||||||
with pytest.raises(
|
with mock_load_yaml(
|
||||||
|
preset_dict={"sub_name": "single value, __value__ not defined"}
|
||||||
|
), pytest.raises(
|
||||||
ValidationException,
|
ValidationException,
|
||||||
match=re.escape(
|
match=re.escape(
|
||||||
f"Subscription sub_name is a string, but "
|
f"Subscription sub_name is a string, but "
|
||||||
|
|
@ -130,9 +192,8 @@ def test_subscription_file_using_value_when_not_defined(config_file: ConfigFile)
|
||||||
_ = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
_ = Subscription.from_file_path(config=config_file, subscription_path="mocked")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures(preset_file_subscription_with_invalid_form.__name__)
|
|
||||||
def test_subscription_file_invalid_form(config_file: ConfigFile):
|
def test_subscription_file_invalid_form(config_file: ConfigFile):
|
||||||
with pytest.raises(
|
with mock_load_yaml(preset_dict={"sub_name": 4332}), pytest.raises(
|
||||||
ValidationException,
|
ValidationException,
|
||||||
match=re.escape(f"Subscription sub_name should be in the form of a preset"),
|
match=re.escape(f"Subscription sub_name should be in the form of a preset"),
|
||||||
):
|
):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue