Add tests
This commit is contained in:
parent
9aff3ae38e
commit
53445759f7
@ -1,59 +1,325 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
|
||||
import pytest
|
||||
|
||||
from comictaggerlib import settings as ctsettings
|
||||
import comictaggerlib.settings.manager
|
||||
|
||||
|
||||
def test_settings_manager():
|
||||
manager = ctsettings.Manager()
|
||||
manager = comictaggerlib.settings.manager.Manager()
|
||||
defaults = manager.defaults()
|
||||
assert manager is not None and defaults is not None
|
||||
|
||||
|
||||
settings_cases = [
|
||||
(
|
||||
{
|
||||
"test": (
|
||||
{
|
||||
"args": ["--test"],
|
||||
"kwargs": dict(
|
||||
action=None,
|
||||
nargs=None,
|
||||
const=None,
|
||||
default=None,
|
||||
type=None,
|
||||
choices=None,
|
||||
required=None,
|
||||
help=None,
|
||||
metavar=None,
|
||||
dest=None,
|
||||
cmdline=True,
|
||||
file=True,
|
||||
),
|
||||
},
|
||||
(
|
||||
("--test",),
|
||||
dict(
|
||||
action=None,
|
||||
nargs=None,
|
||||
const=None,
|
||||
default=None,
|
||||
type=None,
|
||||
choices=None,
|
||||
required=None,
|
||||
help=None,
|
||||
metavar=None,
|
||||
dest=None,
|
||||
cmdline=True,
|
||||
file=True,
|
||||
group="tst",
|
||||
exclusive=False,
|
||||
),
|
||||
),
|
||||
{
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"cmdline": True,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "test",
|
||||
"exclusive": False,
|
||||
"file": True,
|
||||
"group": "tst",
|
||||
"help": None,
|
||||
"internal_name": "tst_test",
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
"argparse_args": ("--test",),
|
||||
"argparse_kwargs": {
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "tst_test",
|
||||
"help": None,
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
},
|
||||
},
|
||||
dict({"test": {"test": {"names": ["--test"], "dest": "test", "default": None}}}),
|
||||
)
|
||||
),
|
||||
(
|
||||
(
|
||||
(
|
||||
"-t",
|
||||
"--test",
|
||||
),
|
||||
dict(
|
||||
action=None,
|
||||
nargs=None,
|
||||
const=None,
|
||||
default=None,
|
||||
type=None,
|
||||
choices=None,
|
||||
required=None,
|
||||
help=None,
|
||||
metavar=None,
|
||||
dest=None,
|
||||
cmdline=True,
|
||||
file=True,
|
||||
group="tst",
|
||||
exclusive=False,
|
||||
),
|
||||
),
|
||||
{
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"cmdline": True,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "test",
|
||||
"exclusive": False,
|
||||
"file": True,
|
||||
"group": "tst",
|
||||
"help": None,
|
||||
"internal_name": "tst_test",
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
"argparse_args": (
|
||||
"-t",
|
||||
"--test",
|
||||
),
|
||||
"argparse_kwargs": {
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "tst_test",
|
||||
"help": None,
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
(
|
||||
("test",),
|
||||
dict(
|
||||
action=None,
|
||||
nargs=None,
|
||||
const=None,
|
||||
default=None,
|
||||
type=None,
|
||||
choices=None,
|
||||
required=None,
|
||||
help=None,
|
||||
metavar=None,
|
||||
dest=None,
|
||||
cmdline=True,
|
||||
file=True,
|
||||
group="tst",
|
||||
exclusive=False,
|
||||
),
|
||||
),
|
||||
{
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"cmdline": True,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "test",
|
||||
"exclusive": False,
|
||||
"file": True,
|
||||
"group": "tst",
|
||||
"help": None,
|
||||
"internal_name": "tst_test",
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
"argparse_args": ("tst_test",),
|
||||
"argparse_kwargs": {
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": None,
|
||||
"help": None,
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
(
|
||||
("--test",),
|
||||
dict(
|
||||
action=None,
|
||||
nargs=None,
|
||||
const=None,
|
||||
default=None,
|
||||
type=None,
|
||||
choices=None,
|
||||
required=None,
|
||||
help=None,
|
||||
metavar=None,
|
||||
dest=None,
|
||||
cmdline=True,
|
||||
file=True,
|
||||
group="",
|
||||
exclusive=False,
|
||||
),
|
||||
),
|
||||
{
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"cmdline": True,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "test",
|
||||
"exclusive": False,
|
||||
"file": True,
|
||||
"group": "",
|
||||
"help": None,
|
||||
"internal_name": "test",
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
"argparse_args": ("--test",),
|
||||
"argparse_kwargs": {
|
||||
"action": None,
|
||||
"choices": None,
|
||||
"const": None,
|
||||
"default": None,
|
||||
"dest": "test",
|
||||
"help": None,
|
||||
"metavar": "TEST",
|
||||
"nargs": None,
|
||||
"required": None,
|
||||
"type": None,
|
||||
},
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize("settings, expected", settings_cases)
|
||||
def test_add_setting(settings, expected, settings_manager, tmp_path):
|
||||
for group, settings in settings.items():
|
||||
@pytest.mark.parametrize("arguments, expected", settings_cases)
|
||||
def test_setting(arguments, expected):
|
||||
assert vars(comictaggerlib.settings.manager.Setting(*arguments[0], **arguments[1])) == expected
|
||||
|
||||
def add_settings(parser):
|
||||
for setting in settings:
|
||||
settings_manager.add_setting(*setting["args"], **setting["kwargs"])
|
||||
|
||||
settings_manager.add_group(group, add_settings)
|
||||
def test_add_setting(settings_manager):
|
||||
assert settings_manager.add_setting("--test") is None
|
||||
|
||||
parsed_settings = settings_manager.parse_options(ctsettings.ComicTaggerPaths(tmp_path), args=[])
|
||||
|
||||
# print(parsed_settings)
|
||||
# print(expected)
|
||||
for group, settings in expected.items():
|
||||
for setting_name, setting in settings.items():
|
||||
assert parsed_settings[group][setting_name] == setting["default"]
|
||||
assert False
|
||||
def test_get_defaults(settings_manager):
|
||||
settings_manager.add_setting("--test", default="hello")
|
||||
defaults = settings_manager.defaults()
|
||||
assert defaults[""]["test"] == "hello"
|
||||
|
||||
|
||||
def test_get_namespace(settings_manager):
|
||||
settings_manager.add_setting("--test", default="hello")
|
||||
defaults = settings_manager.get_namespace(settings_manager.defaults())
|
||||
assert defaults.test == "hello"
|
||||
|
||||
|
||||
def test_get_defaults_group(settings_manager):
|
||||
settings_manager.add_group("tst", lambda parser: parser.add_setting("--test", default="hello"))
|
||||
defaults = settings_manager.defaults()
|
||||
assert defaults["tst"]["test"] == "hello"
|
||||
|
||||
|
||||
def test_get_namespace_group(settings_manager):
|
||||
settings_manager.add_group("tst", lambda parser: parser.add_setting("--test", default="hello"))
|
||||
defaults = settings_manager.get_namespace(settings_manager.defaults())
|
||||
assert defaults.tst_test == "hello"
|
||||
|
||||
|
||||
def test_cmdline_only(settings_manager):
|
||||
settings_manager.add_group("tst", lambda parser: parser.add_setting("--test", default="hello", file=False))
|
||||
settings_manager.add_group("tst2", lambda parser: parser.add_setting("--test2", default="hello", cmdline=False))
|
||||
|
||||
file_normalized = settings_manager.normalize_options({}, file=True)
|
||||
cmdline_normalized = settings_manager.normalize_options({}, cmdline=True)
|
||||
assert "test" not in file_normalized["tst"]
|
||||
assert "test" in cmdline_normalized["tst"]
|
||||
assert "test2" in file_normalized["tst2"]
|
||||
assert "test2" not in cmdline_normalized["tst2"]
|
||||
|
||||
|
||||
def test_normalize(settings_manager):
|
||||
settings_manager.add_group("tst", lambda parser: parser.add_setting("--test", default="hello"))
|
||||
|
||||
defaults = settings_manager.defaults()
|
||||
defaults["test"] = "fail"
|
||||
|
||||
defaults_namespace = settings_manager.get_namespace(defaults)
|
||||
defaults_namespace.test = "fail"
|
||||
|
||||
normalized = settings_manager.normalize_options(defaults, True)
|
||||
normalized_namespace = settings_manager.get_namespace(settings_manager.normalize_options(defaults, True))
|
||||
|
||||
assert "test" not in normalized
|
||||
assert "tst" in normalized
|
||||
assert "test" in normalized["tst"]
|
||||
assert normalized["tst"]["test"] == "hello"
|
||||
assert not hasattr(normalized_namespace, "test")
|
||||
assert hasattr(normalized_namespace, "tst_test")
|
||||
assert normalized_namespace.tst_test == "hello"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"raw, raw2, expected",
|
||||
[
|
||||
({"tst": {"test": "fail"}}, argparse.Namespace(tst_test="success"), "success"),
|
||||
({"tst": {"test": "success"}}, argparse.Namespace(tst_test="hello"), "success"),
|
||||
(argparse.Namespace(tst_test="fail"), {"tst": {"test": "success"}}, "success"),
|
||||
(argparse.Namespace(tst_test="success"), {"tst": {"test": "hello"}}, "success"),
|
||||
],
|
||||
)
|
||||
def test_normalize_merge(raw, raw2, expected, settings_manager):
|
||||
settings_manager.add_group("tst", lambda parser: parser.add_setting("--test", default="hello"))
|
||||
|
||||
normalized = settings_manager.normalize_options(raw, True, raw_options_2=raw2)
|
||||
|
||||
assert normalized["tst"]["test"] == expected
|
||||
|
||||
|
||||
def test_parse_options(settings_manager, tmp_path):
|
||||
settings_file = tmp_path / "settings.json"
|
||||
settings_file.write_text(json.dumps({"tst2": {"test2": "success"}}))
|
||||
settings_manager.add_group("tst", lambda parser: parser.add_setting("--test", default="hello", file=False))
|
||||
settings_manager.add_group("tst2", lambda parser: parser.add_setting("--test2", default="hello", cmdline=False))
|
||||
|
||||
normalized = settings_manager.parse_options(settings_file, ["--test", "success"])
|
||||
|
||||
assert "test" in normalized["tst"]
|
||||
assert normalized["tst"]["test"] == "success"
|
||||
assert "test2" in normalized["tst2"]
|
||||
assert normalized["tst2"]["test2"] == "success"
|
||||
|
Loading…
x
Reference in New Issue
Block a user