mirror of
https://github.com/safishamsi/graphify.git
synced 2026-07-11 18:07:31 +00:00
5db8f7ce39
style: replace all em dashes with hyphens fix: explain hidden .graphify/ folder in skill output and README fix: rename .graphify/ to graphify-out/ so output is visible by default
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
"""Tests for graphify/cache.py."""
|
|
import pytest
|
|
from pathlib import Path
|
|
from graphify.cache import file_hash, cache_dir, load_cached, save_cached, cached_files, clear_cache
|
|
|
|
|
|
@pytest.fixture
|
|
def tmp_file(tmp_path):
|
|
f = tmp_path / "sample.txt"
|
|
f.write_text("hello world")
|
|
return f
|
|
|
|
|
|
@pytest.fixture
|
|
def cache_root(tmp_path):
|
|
return tmp_path
|
|
|
|
|
|
def test_file_hash_consistent(tmp_file):
|
|
"""Same file gives same hash on repeated calls."""
|
|
h1 = file_hash(tmp_file)
|
|
h2 = file_hash(tmp_file)
|
|
assert h1 == h2
|
|
assert isinstance(h1, str)
|
|
assert len(h1) == 64 # SHA256 hex digest length
|
|
|
|
|
|
def test_file_hash_changes(tmp_path):
|
|
"""Different file contents give different hashes."""
|
|
f1 = tmp_path / "a.txt"
|
|
f2 = tmp_path / "b.txt"
|
|
f1.write_text("content one")
|
|
f2.write_text("content two")
|
|
assert file_hash(f1) != file_hash(f2)
|
|
|
|
|
|
def test_cache_roundtrip(tmp_file, cache_root):
|
|
"""Save then load returns the same result dict."""
|
|
result = {"nodes": [{"id": "n1", "label": "Node1"}], "edges": []}
|
|
save_cached(tmp_file, result, root=cache_root)
|
|
loaded = load_cached(tmp_file, root=cache_root)
|
|
assert loaded == result
|
|
|
|
|
|
def test_cache_miss_on_change(tmp_file, cache_root):
|
|
"""After file content changes, load_cached returns None."""
|
|
result = {"nodes": [], "edges": [{"source": "a", "target": "b"}]}
|
|
save_cached(tmp_file, result, root=cache_root)
|
|
# Modify the file
|
|
tmp_file.write_text("completely different content")
|
|
assert load_cached(tmp_file, root=cache_root) is None
|
|
|
|
|
|
def test_cached_files(tmp_path, cache_root):
|
|
"""cached_files returns the set of cached hashes."""
|
|
f1 = tmp_path / "file1.py"
|
|
f2 = tmp_path / "file2.py"
|
|
f1.write_text("alpha")
|
|
f2.write_text("beta")
|
|
|
|
save_cached(f1, {"nodes": [], "edges": []}, root=cache_root)
|
|
save_cached(f2, {"nodes": [], "edges": []}, root=cache_root)
|
|
|
|
hashes = cached_files(cache_root)
|
|
assert file_hash(f1) in hashes
|
|
assert file_hash(f2) in hashes
|
|
|
|
|
|
def test_clear_cache(tmp_file, cache_root):
|
|
"""clear_cache removes all .json files from graphify-out/cache/."""
|
|
save_cached(tmp_file, {"nodes": [], "edges": []}, root=cache_root)
|
|
assert len(list((cache_root / "graphify-out" / "cache").glob("*.json"))) > 0
|
|
clear_cache(cache_root)
|
|
assert len(list((cache_root / "graphify-out" / "cache").glob("*.json"))) == 0
|