"""
Tests for the memory caching functionality.
"""
import time
import pytest
from penpot_mcp.utils.cache import MemoryCache
@pytest.fixture
def memory_cache():
"""Create a MemoryCache instance with a short TTL for testing."""
return MemoryCache(ttl_seconds=2)
def test_cache_set_get(memory_cache):
"""Test setting and getting a file from cache."""
test_data = {"test": "data"}
file_id = "test123"
# Set data in cache
memory_cache.set(file_id, test_data)
# Get data from cache
cached_data = memory_cache.get(file_id)
assert cached_data == test_data
def test_cache_expiration(memory_cache):
"""Test that cached files expire after TTL."""
test_data = {"test": "data"}
file_id = "test123"
# Set data in cache
memory_cache.set(file_id, test_data)
# Data should be available immediately
assert memory_cache.get(file_id) == test_data
# Wait for cache to expire
time.sleep(3)
# Data should be expired
assert memory_cache.get(file_id) is None
def test_cache_clear(memory_cache):
"""Test clearing the cache."""
test_data = {"test": "data"}
file_id = "test123"
# Set data in cache
memory_cache.set(file_id, test_data)
# Verify data is cached
assert memory_cache.get(file_id) == test_data
# Clear cache
memory_cache.clear()
# Verify data is gone
assert memory_cache.get(file_id) is None
def test_get_all_cached_files(memory_cache):
"""Test getting all cached files."""
test_data1 = {"test": "data1"}
test_data2 = {"test": "data2"}
# Set multiple files in cache
memory_cache.set("file1", test_data1)
memory_cache.set("file2", test_data2)
# Get all cached files
all_files = memory_cache.get_all_cached_files()
# Verify all files are present
assert len(all_files) == 2
assert all_files["file1"] == test_data1
assert all_files["file2"] == test_data2
# Wait for cache to expire
time.sleep(3)
# Verify expired files are removed
all_files = memory_cache.get_all_cached_files()
assert len(all_files) == 0
def test_cache_nonexistent_file(memory_cache):
"""Test getting a nonexistent file from cache."""
assert memory_cache.get("nonexistent") is None