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