45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
import sys, os, json, tempfile, pytest
|
|
sys.path.insert(0, 'bin')
|
|
from log_append import append_entry, read_entries, LOG_PATH
|
|
|
|
def test_append_creates_file(tmp_path):
|
|
log = str(tmp_path / "log.jsonl")
|
|
append_entry({"project": "test"}, path=log)
|
|
assert os.path.exists(log)
|
|
|
|
def test_append_writes_valid_json(tmp_path):
|
|
log = str(tmp_path / "log.jsonl")
|
|
append_entry({"project": "x", "kept": True}, path=log)
|
|
with open(log) as f:
|
|
data = json.loads(f.read().strip())
|
|
assert data["project"] == "x"
|
|
assert data["kept"] is True
|
|
|
|
def test_append_adds_timestamp(tmp_path):
|
|
log = str(tmp_path / "log.jsonl")
|
|
append_entry({"project": "x"}, path=log)
|
|
with open(log) as f:
|
|
data = json.loads(f.read().strip())
|
|
assert "ts" in data
|
|
|
|
def test_append_multiple_entries(tmp_path):
|
|
log = str(tmp_path / "log.jsonl")
|
|
for i in range(3):
|
|
append_entry({"n": i}, path=log)
|
|
entries = read_entries(path=log)
|
|
assert len(entries) == 3
|
|
assert entries[1]["n"] == 1
|
|
|
|
def test_read_entries_empty_if_no_file(tmp_path):
|
|
log = str(tmp_path / "nonexistent.jsonl")
|
|
assert read_entries(path=log) == []
|
|
|
|
def test_read_entries_skips_malformed_lines(tmp_path):
|
|
log = str(tmp_path / "log.jsonl")
|
|
with open(log, 'w') as f:
|
|
f.write('{"project": "ok"}\n')
|
|
f.write('not-valid-json\n')
|
|
f.write('{"project": "also-ok"}\n')
|
|
entries = read_entries(path=log)
|
|
assert len(entries) == 2
|