Initial upload with CI/CD workflow
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-02 18:27:18 +00:00
parent 21381be481
commit 25fd3b70ab

127
tests/test_cache_manager.py Normal file
View File

@@ -0,0 +1,127 @@
"""Tests for the cache manager."""
import tempfile
import time
from pathlib import Path
import pytest
from src.cache_manager import CacheManager
class TestCacheManager:
"""Tests for CacheManager class."""
@pytest.fixture
def temp_cache_dir(self):
"""Create a temporary cache directory."""
with tempfile.TemporaryDirectory() as tmpdir:
yield Path(tmpdir)
@pytest.fixture
def cache_manager(self, temp_cache_dir):
"""Create a cache manager with temp directory."""
return CacheManager(cache_dir=temp_cache_dir, ttl=60)
def test_set_and_get(self, cache_manager):
"""Test setting and getting values."""
cache_manager.set("test_key", "test_value")
result = cache_manager.get("test_key")
assert result == "test_value"
def test_get_nonexistent_key(self, cache_manager):
"""Test getting a key that doesn't exist."""
result = cache_manager.get("nonexistent_key")
assert result is None
def test_set_complex_value(self, cache_manager):
"""Test setting and getting complex values."""
data = {
"repo": "test/repo",
"matches": ["match1", "match2"],
"count": 5,
}
cache_manager.set("complex_key", data)
result = cache_manager.get("complex_key")
assert result == data
def test_delete(self, cache_manager):
"""Test deleting a value."""
cache_manager.set("delete_key", "value")
assert cache_manager.get("delete_key") == "value"
result = cache_manager.delete("delete_key")
assert result is True
assert cache_manager.get("delete_key") is None
def test_delete_nonexistent(self, cache_manager):
"""Test deleting a key that doesn't exist."""
result = cache_manager.delete("nonexistent")
assert result is False
def test_clear(self, cache_manager):
"""Test clearing all cache values."""
cache_manager.set("key1", "value1")
cache_manager.set("key2", "value2")
result = cache_manager.clear()
assert result is True
assert cache_manager.get("key1") is None
assert cache_manager.get("key2") is None
def test_get_stats(self, cache_manager):
"""Test getting cache statistics."""
cache_manager.set("key", "value")
stats = cache_manager.get_stats()
assert "size" in stats
assert "hits" in stats
assert "misses" in stats
assert "cache_size_mb" in stats
assert isinstance(stats["cache_size_mb"], float)
def test_get_all(self, cache_manager):
"""Test getting all cached entries."""
cache_manager.set("key1", "value1")
cache_manager.set("key2", "value2")
entries = cache_manager.get_all()
assert len(entries) >= 2
def test_key_is_hashed(self, cache_manager):
"""Test that keys are hashed."""
cache_manager.set("test_key", "value")
entries = cache_manager.get_all()
assert "test_key" not in entries
def test_cleanup(self, cache_manager):
"""Test cleaning up expired entries."""
cache_manager.set("key", "value")
removed = cache_manager.cleanup()
assert isinstance(removed, int)
class TestCacheManagerTTL:
"""Tests for cache TTL functionality."""
@pytest.fixture
def temp_cache_dir(self):
"""Create a temporary cache directory."""
with tempfile.TemporaryDirectory() as tmpdir:
yield Path(tmpdir)
def test_ttl_expiration(self, temp_cache_dir):
"""Test that cached values expire after TTL."""
cache_manager = CacheManager(cache_dir=temp_cache_dir, ttl=1)
cache_manager.set("expiring_key", "value")
assert cache_manager.get("expiring_key") == "value"
time.sleep(1.5)
assert cache_manager.get("expiring_key") is None