Files
gitignore-generator-cli/tests/test_cache.py
7000pctAUTO 4940ad1c42
Some checks failed
CI / test (push) Successful in 12s
CI / build (push) Failing after 23s
fix: resolve CI test failures with proper mock patching
2026-01-30 15:57:24 +00:00

117 lines
3.7 KiB
Python

"""Tests for cache.py."""
from datetime import datetime, timedelta
import pytest
from gitignore_generator.cache import CacheManager
class TestCacheManager:
"""Tests for CacheManager class."""
@pytest.fixture
def cache_dir(self, tmp_path):
"""Create temp cache directory."""
return tmp_path
@pytest.fixture
def cache(self, cache_dir):
"""Create cache manager with temp directory."""
cache = CacheManager()
cache._cache_dir = cache_dir
return cache
def test_set_and_get(self, cache):
"""Test setting and getting cached items."""
cache.set('python', 'python content')
result = cache.get('python')
assert result == 'python content'
def test_get_nonexistent(self, cache):
"""Test getting non-existent item."""
result = cache.get('nonexistent_xyz_123')
assert result is None
def test_is_valid_fresh_cache(self, cache):
"""Test cache validity for fresh items."""
cache.set('python', 'content')
assert cache.is_valid('python') is True
def test_is_valid_expired_cache(self, cache):
"""Test cache validity for expired items."""
cache.set('python', 'content')
metadata = cache._load_metadata()
metadata['python']['cached_at'] = (datetime.now() - timedelta(days=10)).isoformat()
cache._save_metadata(metadata)
assert cache.is_valid('python') is False
def test_invalidate(self, cache):
"""Test invalidating cached item."""
cache.set('python', 'content')
assert cache.invalidate('python') is True
assert cache.get('python') is None
def test_invalidate_nonexistent(self, cache):
"""Test invalidating non-existent item."""
assert cache.invalidate('nonexistent_xyz_123') is False
def test_clear(self, cache, tmp_path):
"""Test clearing all cache."""
import uuid
suffix = str(uuid.uuid4())[:8]
cache.set(f'clear_test_{suffix}_python', 'content')
cache.set(f'clear_test_{suffix}_node', 'content')
cache.set(f'clear_test_{suffix}_django', 'content')
count = cache.clear()
assert count >= 3
assert cache.get(f'clear_test_{suffix}_python') is None
assert cache.get(f'clear_test_{suffix}_node') is None
assert cache.get(f'clear_test_{suffix}_django') is None
def test_get_stats(self, cache):
"""Test getting cache statistics."""
cache.set('python', 'content')
cache.set('node', 'content')
stats = cache.get_stats()
assert stats['total_items'] == 2
assert stats['valid_items'] == 2
assert stats['expired_items'] == 0
def test_get_age(self, cache):
"""Test getting cache age."""
cache.set('python', 'content')
age = cache.get_age('python')
assert age is not None
assert age >= 0
def test_get_age_nonexistent(self, cache):
"""Test getting age of non-existent item."""
age = cache.get_age('nonexistent_xyz_123')
assert age is None
def test_cleanup_expired(self, cache):
"""Test cleaning up expired entries."""
cache.set('fresh', 'content')
metadata = cache._load_metadata()
metadata['expired'] = {
'cached_at': (datetime.now() - timedelta(days=10)).isoformat(),
'size': 100
}
cache._save_metadata(metadata)
count = cache.cleanup_expired()
assert count == 1
assert cache.get('expired') is None
assert cache.get('fresh') == 'content'
def test_cache_directory_creation(self, cache):
"""Test that cache directory is created."""
cache.set('test', 'content')
assert cache._cache_dir.exists()