Files

57 lines
2.5 KiB
Python
Raw Permalink Normal View History

"""R5 save · R6 log/diff of versions · R7 no secrets · R10 restore · R13 folder."""
import json
import pytest
from tver.cli import main
from tver.store import Store, StoreError
FAKE_KEY = "sk-" + "test-" + "a" * 24 # made here, never stored in a file of this repository
def test_save_twice_makes_one_commit(work, store_dir):
store = Store(store_dir)
assert store.save(work / "helpdesk.json")[0][1] == "saved"
assert store.save(work / "helpdesk.json")[0][1] == "no change"
assert len(store.log("helpdesk.json")) == 1
def test_versions_and_diff_between_them(work, store_dir, v2, capsys):
store = Store(store_dir)
store.save(work / "helpdesk.json")
(work / "helpdesk.json").write_text(json.dumps(v2), encoding="utf-8")
name, status, message = store.save(work / "helpdesk.json")[0]
assert status == "saved" and "model 1 · prompt 1 · flow 5" in message
versions = store.log("helpdesk.json")
assert [v.message.split(": ")[0] for v in versions] == ["helpdesk.json", "helpdesk.json"]
assert main(["--repo", str(store_dir), "diff", versions[1].rev, versions[0].rev, "helpdesk.json", "--short"]) == 1
assert "7 change(s) · model 1 · prompt 1 · flow 5" in capsys.readouterr().out
def test_secret_is_not_saved(work, store_dir):
data = json.loads((work / "helpdesk.json").read_text(encoding="utf-8"))
data["nodes"][0]["parameters"]["note"] = FAKE_KEY
(work / "helpdesk.json").write_text(json.dumps(data), encoding="utf-8")
with pytest.raises(StoreError) as error:
Store(store_dir).save(work / "helpdesk.json")
assert FAKE_KEY not in str(error.value)
assert not (store_dir / "helpdesk.json").exists()
def test_restore_writes_a_file_and_keeps_the_store(work, store_dir, v2, tmp_path):
store = Store(store_dir)
store.save(work / "helpdesk.json")
(work / "helpdesk.json").write_text(json.dumps(v2), encoding="utf-8")
store.save(work / "helpdesk.json")
oldest = store.log("helpdesk.json")[-1].rev
out = store.restore(oldest, "helpdesk.json", tmp_path / "back.json")
restored = json.loads(out.read_text(encoding="utf-8"))
model = next(n for n in restored["nodes"] if n["name"] == "Answer model")
assert model["parameters"]["model"]["value"] == "gpt-4.1-mini"
assert len(store.log("helpdesk.json")) == 2
def test_folder_save_skips_files_that_are_not_workflows(work, store_dir):
rows = Store(store_dir).save(work)
assert ("cases.json", "skipped", "not a workflow") in rows
assert [r[0] for r in rows if r[1] == "saved"] == ["helpdesk.json"]