nanobot: 2026-09-11 15:17:08
This commit is contained in:
@@ -21,10 +21,13 @@ def workspace(tmp_path, monkeypatch):
|
||||
return tmp_path
|
||||
|
||||
|
||||
def _run(text=None, argv_extra=None):
|
||||
def _run(workspace, text=None, argv_extra=None):
|
||||
"""Build argv the way the skill does: text in a file, only its path in the command."""
|
||||
argv = ["note_capture.py"]
|
||||
if text is not None:
|
||||
argv += ["--text", text]
|
||||
source = workspace / "note-capture.md"
|
||||
source.write_text(text, encoding="utf-8")
|
||||
argv += ["--file", str(source)]
|
||||
if argv_extra:
|
||||
argv += argv_extra
|
||||
return argv
|
||||
@@ -52,7 +55,7 @@ def test_capture_writes_inbox_file_and_log(workspace, monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
sys,
|
||||
"argv",
|
||||
_run("koupit kanistr na vodu", ["--channel", "telegram", "--chat-id", "42"]),
|
||||
_run(workspace, "koupit kanistr na vodu", ["--channel", "telegram", "--chat-id", "42"]),
|
||||
)
|
||||
assert note_capture.main() == 0
|
||||
|
||||
@@ -76,14 +79,14 @@ def test_capture_writes_inbox_file_and_log(workspace, monkeypatch):
|
||||
|
||||
|
||||
def test_capture_no_leftover_tmp_files(workspace, monkeypatch):
|
||||
monkeypatch.setattr(sys, "argv", _run("neco"))
|
||||
monkeypatch.setattr(sys, "argv", _run(workspace, "neco"))
|
||||
assert note_capture.main() == 0
|
||||
tmp_files = list((workspace / "notes" / "inbox").glob(".*"))
|
||||
assert tmp_files == []
|
||||
|
||||
|
||||
def test_capture_omits_absent_provenance(workspace, monkeypatch):
|
||||
monkeypatch.setattr(sys, "argv", _run("bez kanalu"))
|
||||
monkeypatch.setattr(sys, "argv", _run(workspace, "bez kanalu"))
|
||||
assert note_capture.main() == 0
|
||||
content = next((workspace / "notes" / "inbox").glob("*.md")).read_text(
|
||||
encoding="utf-8"
|
||||
@@ -93,6 +96,46 @@ def test_capture_omits_absent_provenance(workspace, monkeypatch):
|
||||
|
||||
|
||||
def test_capture_empty_input_fails(workspace, monkeypatch):
|
||||
monkeypatch.setattr(sys, "argv", _run(" "))
|
||||
monkeypatch.setattr(sys, "argv", _run(workspace, " "))
|
||||
assert note_capture.main() == 1
|
||||
assert list((workspace / "notes" / "inbox").glob("*.md")) == []
|
||||
|
||||
|
||||
def test_capture_accepts_text_the_exec_guard_would_reject_on_a_command_line(
|
||||
workspace, monkeypatch
|
||||
):
|
||||
"""Regression: a note like `Cíl: …` parses as a Windows drive path in the exec guard.
|
||||
|
||||
Capture takes the user's input verbatim, so such text must reach the script
|
||||
through a file, never as an argument, a heredoc or a pipe.
|
||||
"""
|
||||
text = "Cíl: koupit mléko. Závěr: zítra."
|
||||
monkeypatch.setattr(sys, "argv", _run(workspace, text))
|
||||
|
||||
assert note_capture.main() == 0
|
||||
|
||||
content = next((workspace / "notes" / "inbox").glob("*.md")).read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
assert text in content
|
||||
|
||||
|
||||
def test_capture_rejects_missing_file(workspace, monkeypatch, capsys):
|
||||
monkeypatch.setattr(
|
||||
sys, "argv", ["note_capture.py", "--file", str(workspace / "chybi.md")]
|
||||
)
|
||||
|
||||
assert note_capture.main() == 1
|
||||
|
||||
assert "No such file" in capsys.readouterr().err
|
||||
assert list((workspace / "notes" / "inbox").glob("*.md")) == []
|
||||
|
||||
|
||||
def test_capture_no_longer_accepts_text_on_the_command_line(monkeypatch):
|
||||
"""`--text` is gone for good: prose in argv is what the exec guard blocks."""
|
||||
monkeypatch.setattr(sys, "argv", ["note_capture.py", "--text", "něco"])
|
||||
|
||||
with pytest.raises(SystemExit) as excinfo:
|
||||
note_capture.main()
|
||||
|
||||
assert excinfo.value.code == 2
|
||||
|
||||
Reference in New Issue
Block a user