import os import shutil from pathlib import Path from src.summary_cache import SummaryCache, get_file_hash def test_get_file_hash(): content = "hello world" # sha256 of "hello world" expected = "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" assert get_file_hash(content) == expected def test_summary_cache(): cache_dir = Path(".test_cache") if cache_dir.exists(): shutil.rmtree(cache_dir) cache_file = cache_dir / "cache.json" cache = SummaryCache(str(cache_file)) file_path = "test.py" content = "print('hello')" content_hash = get_file_hash(content) summary = "**Python** - 1 lines" # Test empty cache assert cache.get_summary(file_path, content_hash) is None # Test set and get cache.set_summary(file_path, content_hash, summary) assert cache.get_summary(file_path, content_hash) == summary # Test cache invalidation assert cache.get_summary(file_path, "different_hash") is None # Test persistence cache2 = SummaryCache(str(cache_file)) assert cache2.get_summary(file_path, content_hash) == summary # Cleanup if cache_dir.exists(): shutil.rmtree(cache_dir) def test_summary_cache_lru(): cache_dir = Path(".test_cache_lru") if cache_dir.exists(): shutil.rmtree(cache_dir) cache_file = cache_dir / "cache.json" # Create cache with max 2 entries cache = SummaryCache(str(cache_file), max_entries=2) cache.set_summary("file1.py", "hash1", "summary1") cache.set_summary("file2.py", "hash2", "summary2") cache.set_summary("file3.py", "hash3", "summary3") # This should evict file1.py assert cache.get_summary("file1.py", "hash1") is None assert cache.get_summary("file2.py", "hash2") == "summary2" assert cache.get_summary("file3.py", "hash3") == "summary3" # Access file2.py, then add file4.py. file3.py should be evicted cache.get_summary("file2.py", "hash2") cache.set_summary("file4.py", "hash4", "summary4") assert cache.get_summary("file3.py", "hash3") is None assert cache.get_summary("file2.py", "hash2") == "summary2" assert cache.get_summary("file4.py", "hash4") == "summary4" if cache_dir.exists(): shutil.rmtree(cache_dir) if __name__ == "__main__": test_get_file_hash() test_summary_cache() test_summary_cache_lru() print("Tests passed!")