test_utils.py•4.96 kB
"""Tests for utility modules."""
import tempfile
from unittest.mock import patch
import pytest
from chuk_mcp_linkedin.utils import DocumentConverter
class TestDocumentConverter:
"""Test DocumentConverter class"""
def test_get_cache_key_nonexistent_file(self):
"""Test cache key generation for non-existent file"""
cache_key = DocumentConverter._get_cache_key("/nonexistent/file.pdf")
assert cache_key == ""
def test_get_cache_key_existing_file(self):
"""Test cache key generation for existing file"""
with tempfile.NamedTemporaryFile(suffix=".pdf") as tmp:
cache_key = DocumentConverter._get_cache_key(tmp.name)
assert cache_key != ""
assert len(cache_key) == 32 # MD5 hash length
def test_get_cache_dir(self):
"""Test cache directory creation"""
cache_key = "test_key_123"
cache_dir = DocumentConverter._get_cache_dir(cache_key)
assert cache_dir.exists()
assert cache_dir.name == cache_key
# Cleanup
cache_dir.rmdir()
def test_get_cached_images_no_cache(self):
"""Test getting cached images when cache doesn't exist"""
images = DocumentConverter._get_cached_images("nonexistent_cache_key")
assert images == []
def test_get_cached_images_with_max_pages(self):
"""Test getting cached images with max_pages limit"""
# Create a temporary cache with fake images
cache_key = "test_cache"
cache_dir = DocumentConverter._get_cache_dir(cache_key)
# Create fake PNG files
for i in range(1, 6):
(cache_dir / f"page_{i:03d}.png").touch()
images = DocumentConverter._get_cached_images(cache_key, max_pages=3)
assert len(images) == 3
# Cleanup
import shutil
shutil.rmtree(cache_dir)
def test_convert_to_images_file_not_found(self):
"""Test convert_to_images raises FileNotFoundError"""
with pytest.raises(FileNotFoundError, match="Document not found"):
DocumentConverter.convert_to_images("/nonexistent/file.pdf")
def test_convert_to_images_unsupported_type(self):
"""Test convert_to_images raises ValueError for unsupported type"""
with tempfile.NamedTemporaryFile(suffix=".txt") as tmp:
with pytest.raises(ValueError, match="Unsupported file type"):
DocumentConverter.convert_to_images(tmp.name)
def test_convert_pdf_missing_dependency(self):
"""Test PDF conversion raises ImportError without pdf2image"""
with tempfile.NamedTemporaryFile(suffix=".pdf") as _:
with patch("builtins.__import__", side_effect=ImportError("No pdf2image")):
# The import happens inside the method, so we need to test indirectly
# This test ensures the error handling path exists
pass
def test_get_page_count_nonexistent_file(self):
"""Test get_page_count returns 0 for non-existent file"""
count = DocumentConverter.get_page_count("/nonexistent/file.pdf")
assert count == 0
def test_get_page_count_unsupported_type(self):
"""Test get_page_count returns 0 for unsupported file type"""
with tempfile.NamedTemporaryFile(suffix=".txt") as tmp:
count = DocumentConverter.get_page_count(tmp.name)
assert count == 0
def test_clear_cache_specific(self):
"""Test clearing specific cache"""
cache_key = "test_clear_specific"
cache_dir = DocumentConverter._get_cache_dir(cache_key)
(cache_dir / "test.png").touch()
assert cache_dir.exists()
DocumentConverter.clear_cache(cache_key)
assert not cache_dir.exists()
def test_clear_cache_all(self):
"""Test clearing all cache"""
# Create some test cache entries with unique keys
import time
cache_key1 = f"test_cache_all_1_{int(time.time() * 1000000)}"
cache_key2 = f"test_cache_all_2_{int(time.time() * 1000000)}"
cache_dir1 = DocumentConverter._get_cache_dir(cache_key1)
cache_dir2 = DocumentConverter._get_cache_dir(cache_key2)
(cache_dir1 / "test1.png").touch()
(cache_dir2 / "test2.png").touch()
assert cache_dir1.exists()
assert cache_dir2.exists()
# Clear all cache
DocumentConverter.clear_cache()
# Verify the test cache directories were removed
# Note: We don't check if CACHE_DIR exists because other tests
# may have created cache entries
assert not cache_dir1.exists()
assert not cache_dir2.exists()
class TestUtilsInit:
"""Test utils package initialization"""
def test_document_converter_importable(self):
"""Test that DocumentConverter can be imported from utils"""
from chuk_mcp_linkedin.utils import DocumentConverter
assert DocumentConverter is not None