clean up tests, WIP

This commit is contained in:
Jesse Bannon 2023-09-25 23:13:41 -07:00
parent 3c105c11cc
commit 5ff239bc0e
2 changed files with 98 additions and 35 deletions

View file

@ -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(

View file

@ -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"),
): ):