summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_override.py79
-rw-r--r--tests/test_parse_args.py57
2 files changed, 136 insertions, 0 deletions
diff --git a/tests/test_override.py b/tests/test_override.py
new file mode 100644
index 00000000..32ec0595
--- /dev/null
+++ b/tests/test_override.py
@@ -0,0 +1,79 @@
+import pytest
+
+from jrnl.override import (
+ apply_overrides,
+ _recursively_apply,
+ _get_config_node,
+ _get_key_and_value_from_pair,
+ _convert_dots_to_list,
+)
+
+
+@pytest.fixture()
+def minimal_config():
+ cfg = {
+ "colors": {"body": "red", "date": "green"},
+ "default": "/tmp/journal.jrnl",
+ "editor": "vim",
+ "journals": {"default": "/tmp/journals/journal.jrnl"},
+ }
+ return cfg
+
+
+def test_apply_override(minimal_config):
+ overrides = [["editor", "nano"]]
+ apply_overrides(overrides, minimal_config)
+ assert minimal_config["editor"] == "nano"
+
+
+def test_override_dot_notation(minimal_config):
+ overrides = [["colors.body", "blue"]]
+
+ cfg = apply_overrides(overrides=overrides, base_config=minimal_config)
+ assert cfg["colors"] == {"body": "blue", "date": "green"}
+
+
+def test_multiple_overrides(minimal_config):
+ overrides = [
+ ["colors.title", "magenta"],
+ ["editor", "nano"],
+ ["journals.burner", "/tmp/journals/burner.jrnl"],
+ ] # as returned by parse_args, saved in parser.config_override
+
+ cfg = apply_overrides(overrides, minimal_config)
+ assert cfg["editor"] == "nano"
+ assert cfg["colors"]["title"] == "magenta"
+ assert "burner" in cfg["journals"]
+ assert cfg["journals"]["burner"] == "/tmp/journals/burner.jrnl"
+
+
+def test_recursively_apply():
+ cfg = {"colors": {"body": "red", "title": "green"}}
+ cfg = _recursively_apply(cfg, ["colors", "body"], "blue")
+ assert cfg["colors"]["body"] == "blue"
+
+
+def test_get_config_node(minimal_config):
+ assert len(minimal_config.keys()) == 4
+ assert _get_config_node(minimal_config, "editor") == "vim"
+ assert _get_config_node(minimal_config, "display_format") == None
+
+
+def test_get_kv_from_pair():
+ pair = {"ab.cde": "fgh"}
+ k, v = _get_key_and_value_from_pair(pair)
+ assert k == "ab.cde"
+ assert v == "fgh"
+
+
+class TestDotNotationToList:
+ def test_unpack_dots_to_list(self):
+
+ keys = "a.b.c.d.e.f"
+ keys_list = _convert_dots_to_list(keys)
+ assert len(keys_list) == 6
+
+ def test_sequential_delimiters(self):
+ k = "g.r..h.v"
+ k_l = _convert_dots_to_list(k)
+ assert len(k_l) == 4
diff --git a/tests/test_parse_args.py b/tests/test_parse_args.py
index 252638c9..4b140fc1 100644
--- a/tests/test_parse_args.py
+++ b/tests/test_parse_args.py
@@ -3,6 +3,7 @@ import shlex
import pytest
from jrnl.args import parse_args
+from jrnl.config import make_yaml_valid_dict
def cli_as_dict(str):
@@ -35,6 +36,7 @@ def expected_args(**kwargs):
"strict": False,
"tags": False,
"text": [],
+ "config_override": [],
}
return {**default_args, **kwargs}
@@ -205,6 +207,31 @@ def test_version_alone():
assert cli_as_dict("--version") == expected_args(preconfig_cmd=preconfig_version)
+def test_editor_override():
+
+ parsed_args = cli_as_dict('--config-override editor "nano"')
+ assert parsed_args == expected_args(config_override=[["editor", "nano"]])
+
+
+def test_color_override():
+ assert cli_as_dict("--config-override colors.body blue") == expected_args(
+ config_override=[["colors.body", "blue"]]
+ )
+
+
+def test_multiple_overrides():
+ parsed_args = cli_as_dict(
+ '--config-override colors.title green --config-override editor "nano" --config-override journal.scratchpad "/tmp/scratchpad"'
+ )
+ assert parsed_args == expected_args(
+ config_override=[
+ ["colors.title", "green"],
+ ["editor", "nano"],
+ ["journal.scratchpad", "/tmp/scratchpad"],
+ ]
+ )
+
+
# @see https://github.com/jrnl-org/jrnl/issues/520
@pytest.mark.parametrize(
"cli",
@@ -233,3 +260,33 @@ def test_and_ordering(cli):
def test_edit_ordering(cli):
result = expected_args(edit=True, text=["second", "@oldtag", "@newtag"])
assert cli_as_dict(cli) == result
+
+
+class TestDeserialization:
+ @pytest.mark.parametrize(
+ "input_str",
+ [
+ ["editor", "nano"],
+ ["colors.title", "blue"],
+ ["default", "/tmp/egg.txt"],
+ ],
+ )
+ def test_deserialize_multiword_strings(self, input_str):
+
+ runtime_config = make_yaml_valid_dict(input_str)
+ assert runtime_config.__class__ == dict
+ assert input_str[0] in runtime_config.keys()
+ assert runtime_config[input_str[0]] == input_str[1]
+
+ def test_deserialize_multiple_datatypes(self):
+ cfg = make_yaml_valid_dict(["linewrap", "23"])
+ assert cfg["linewrap"] == 23
+
+ cfg = make_yaml_valid_dict(["encrypt", "false"])
+ assert cfg["encrypt"] == False
+
+ cfg = make_yaml_valid_dict(["editor", "vi -c startinsert"])
+ assert cfg["editor"] == "vi -c startinsert"
+
+ cfg = make_yaml_valid_dict(["highlight", "true"])
+ assert cfg["highlight"] == True