jrnl/tests/test_config.py
Suhas 6e658c31df
Simplify config override syntax (#5)
* update tests and expected behavior

* clean up arg parsing tests

* update deserialization

* update deserialization

* config argparse action

* update override application logic

* update tests; delete unused imports

* override param must be list

* update docstring

* update test input to SUT

* update remaining override unittests

* make format

* forgot to update CLI syntax
2021-01-31 20:17:02 -05:00

97 lines
2.6 KiB
Python

import shlex
import pytest
import mock
from jrnl.args import parse_args
from jrnl.jrnl import run
from jrnl import install
from jrnl import jrnl
@pytest.fixture()
def minimal_config():
cfg = {
"colors": {"body": "red", "date": "green"},
"default": "/tmp/journal.jrnl",
"editor": "vim",
"encrypt": False,
"journals": {"default": "/tmp/journals/journal.jrnl"},
}
yield cfg
@pytest.fixture()
def expected_override(minimal_config):
exp_out_cfg = minimal_config.copy()
exp_out_cfg["editor"] = "nano"
exp_out_cfg["journal"] = "/tmp/journals/journal.jrnl"
yield exp_out_cfg
@mock.patch("sys.stdin.isatty")
@mock.patch.object(install, "load_or_install_jrnl")
@mock.patch("subprocess.call")
def test_override_configured_editor(
mock_subprocess_call,
mock_load_or_install,
mock_isatty,
minimal_config,
expected_override,
capsys,
):
mock_load_or_install.return_value = minimal_config
mock_isatty.return_value = True
cli_args = shlex.split('--config-override editor "nano"')
parser = parse_args(cli_args)
assert parser.config_override.__len__() == 1
assert {"editor": "nano"} in parser.config_override
def mock_editor_launch(editor):
print("%s launched! Success!" % editor)
with mock.patch.object(
jrnl,
"_write_in_editor",
side_effect=mock_editor_launch("TODO: replace"),
return_value="note_contents",
) as mock_write_in_editor:
run(parser)
mock_write_in_editor.assert_called_once_with(expected_override)
@pytest.fixture()
def expected_color_override(minimal_config):
exp_out_cfg = minimal_config.copy()
exp_out_cfg["colors"]["body"] = "blue"
exp_out_cfg["journal"] = "/tmp/journals/journal.jrnl"
yield exp_out_cfg
@mock.patch("sys.stdin.isatty")
@mock.patch(
"jrnl.install.load_or_install_jrnl", wraps=jrnl.install.load_or_install_jrnl
)
@mock.patch("subprocess.call")
def test_override_configured_colors(
mock_isatty,
mock_load_or_install,
mock_subprocess_call,
minimal_config,
expected_color_override,
capsys,
):
mock_load_or_install.return_value = minimal_config
cli_args = shlex.split("--config-override colors.body blue")
parser = parse_args(cli_args)
assert {"colors.body": "blue"} in parser.config_override
with mock.patch.object(
jrnl,
"_write_in_editor",
side_effect=print("side effect!"),
return_value="note_contents",
) as mock_write_in_editor:
run(parser)
mock_write_in_editor.assert_called_once_with(expected_color_override)