Add tests

This commit is contained in:
Timmy Welch 2022-12-05 23:48:38 -08:00
parent 9aff3ae38e
commit 53445759f7
No known key found for this signature in database

View File

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