snotes updates, actions, attachments, easy user space
This commit is contained in:
89
tests/test_actions.py
Normal file
89
tests/test_actions.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from backend import actions
|
||||
|
||||
|
||||
def test_load_actions(tmp_path, monkeypatch):
|
||||
f = tmp_path / "snotes.toml"
|
||||
f.write_text(
|
||||
'[[actions]]\nname = "task"\n'
|
||||
'uri = "http://tasky.loc/new?title=#string1#"\n'
|
||||
'link = "http://tasky.loc/?title=#string1#"\n'
|
||||
'[[actions]]\nname = "other"\nuri = "http://x.loc/?q=#string1#"\n'
|
||||
)
|
||||
monkeypatch.setattr(actions.settings, "actions_file", str(f))
|
||||
got = actions.load_actions(reload=True)
|
||||
assert set(got) == {"task", "other"}
|
||||
assert got["task"]["uri"] == "http://tasky.loc/new?title=#string1#"
|
||||
assert got["task"]["link"] == "http://tasky.loc/?title=#string1#"
|
||||
# "other" has no link -> link defaults to uri
|
||||
assert got["other"]["link"] == "http://x.loc/?q=#string1#"
|
||||
|
||||
|
||||
async def test_process_actions(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
actions,
|
||||
"load_actions",
|
||||
lambda: {
|
||||
"task": {
|
||||
"uri": "http://tasky.loc/new?title=#string1#",
|
||||
"link": "http://tasky.loc/?title=#string1#",
|
||||
}
|
||||
},
|
||||
)
|
||||
called = []
|
||||
|
||||
async def fake_perform(uri):
|
||||
called.append(uri)
|
||||
return True
|
||||
|
||||
monkeypatch.setattr(actions, "_perform", fake_perform)
|
||||
|
||||
out = await actions.process_actions("before\n/task Go to the supermarket\nafter")
|
||||
assert called == ["http://tasky.loc/new?title=Go%20to%20the%20supermarket"]
|
||||
assert (
|
||||
"[Go to the supermarket](http://tasky.loc/?title=Go%20to%20the%20supermarket)"
|
||||
in out
|
||||
)
|
||||
|
||||
|
||||
async def test_process_actions_colon_separator(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
actions,
|
||||
"load_actions",
|
||||
lambda: {"task": {"uri": "http://x/?t=#string1#", "link": "http://x/?t=#string1#"}},
|
||||
)
|
||||
monkeypatch.setattr(actions, "_perform", lambda uri: _ok(uri))
|
||||
|
||||
out = await actions.process_actions("/task: shop milk")
|
||||
assert "[shop milk](http://x/?t=shop%20milk)" in out
|
||||
|
||||
|
||||
async def test_process_actions_failure_leaves_line(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
actions,
|
||||
"load_actions",
|
||||
lambda: {"task": {"uri": "http://x/?t=#string1#", "link": "http://x/?t=#string1#"}},
|
||||
)
|
||||
|
||||
async def fail(uri):
|
||||
return False
|
||||
|
||||
monkeypatch.setattr(actions, "_perform", fail)
|
||||
out = await actions.process_actions("/task keep this line")
|
||||
assert out == "/task keep this line"
|
||||
|
||||
|
||||
async def test_process_actions_unknown_keyword(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
actions,
|
||||
"load_actions",
|
||||
lambda: {"task": {"uri": "http://x/?t=#string1#", "link": "http://x/?t=#string1#"}},
|
||||
)
|
||||
monkeypatch.setattr(actions, "_perform", lambda uri: _ok(uri))
|
||||
out = await actions.process_actions("/nope do nothing")
|
||||
assert out == "/nope do nothing"
|
||||
|
||||
|
||||
async def _ok(uri):
|
||||
return True
|
||||
Reference in New Issue
Block a user