test: Correctly fall back to EDITOR or VISUAL env vars

This commit is contained in:
Marty Oehme 2025-11-28 22:42:31 +01:00
parent 620a7bc401
commit 46135f9325
Signed by: Marty
GPG key ID: 4E535BC19C61886E
2 changed files with 21 additions and 2 deletions

View file

@ -107,3 +107,16 @@ class TestTConf:
def test_default_notes_sub_dir(self):
cfg = TConf.from_dict({"task_data": "~/my/tasks", "task_id": 0})
assert cfg.notes_dir == Path("~/my/tasks/notes").expanduser()
@pytest.mark.parametrize(
"env,expected",
[
({"EDITOR": "vim"}, "vim"),
({"VISUAL": "emacs", "EDITOR": ""}, "emacs"),
({"VISUAL": "nvim", "EDITOR": "notepad"}, "notepad"),
],
)
def test_editor_env_resolution(isolate_env, monkeypatch, env, expected):
for k, v in env.items():
monkeypatch.setenv(k, v)
assert TConf(0).notes_editor == expected

View file

@ -188,7 +188,7 @@ OPTIONS: dict[str, Opt] = {
("--editor",),
"TOPEN_NOTES_EDITOR",
"notes.editor",
default=os.getenv("EDITOR") or os.getenv("VISUAL") or "nano",
default="nano",
metavar="CMD",
help_text="Program to open note files with",
),
@ -225,7 +225,7 @@ class TConf:
"""The extension of note files."""
notes_annot: str = OPTIONS["notes_annot"].default
"""The annotation to add to taskwarrior tasks with notes."""
notes_editor: str = OPTIONS["notes_editor"].default
notes_editor: str = "" # added in post-init
"""The editor to open note files with."""
notes_quiet: bool = OPTIONS["notes_quiet"].default
"""If set topen will give no feedback on note editing."""
@ -236,6 +236,12 @@ class TConf:
if self.notes_dir == NON_EXISTENT_PATH:
self.notes_dir = self._default_notes_dir()
self.notes_dir = _real_path(self.notes_dir)
if not self.notes_editor:
self.notes_editor = (
os.getenv("EDITOR")
or os.getenv("VISUAL")
or OPTIONS["notes_editor"].default
)
def __or__(self, other: Any, /) -> Self:
return self.__class__(**asdict(self) | asdict(other))