clean-tracks/tests/test_word_list_management.py

129 lines
4.2 KiB
Python

#!/usr/bin/env python3
"""
Test script for word list management system.
"""
import sys
import tempfile
import json
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from src.core import WordListManager
from src.database import init_database, close_database
def test_word_list_manager():
"""Test word list manager functionality."""
print("Testing Word List Management System...")
print("="*60)
# Use temporary database for testing
with tempfile.NamedTemporaryFile(suffix='.db', delete=False) as tmp_db:
db_path = tmp_db.name
try:
# Initialize database
init_database(f'sqlite:///{db_path}')
# Create manager
manager = WordListManager()
# Test 1: Create word list
print("\n1. Creating word list...")
list_id = manager.create_word_list(
"Test List",
"A test word list",
"en",
True
)
print(f" ✓ Created word list with ID: {list_id}")
# Test 2: Add words
print("\n2. Adding words...")
words = {
'test1': {'severity': 'low', 'category': 'profanity'},
'test2': {'severity': 'medium', 'category': 'profanity'},
'test3': {'severity': 'high', 'category': 'slur'}
}
count = manager.add_words(list_id, words)
print(f" ✓ Added {count} words")
# Test 3: Get word list
print("\n3. Retrieving word list...")
memory_list = manager.get_word_list(list_id)
print(f" ✓ Retrieved list with {len(memory_list)} words")
# Test 4: Export to JSON
print("\n4. Exporting to JSON...")
with tempfile.NamedTemporaryFile(suffix='.json', delete=False) as tmp_json:
json_path = Path(tmp_json.name)
success = manager.export_word_list(list_id, json_path)
print(f" ✓ Exported to {json_path}")
# Verify JSON content
with open(json_path, 'r') as f:
data = json.load(f)
print(f" ✓ JSON contains {len(data['words'])} words")
# Test 5: Duplicate list
print("\n5. Duplicating word list...")
new_id = manager.duplicate_word_list(list_id, "Test List Copy")
print(f" ✓ Created duplicate with ID: {new_id}")
# Test 6: Get statistics
print("\n6. Getting statistics...")
stats = manager.get_word_statistics(list_id)
print(f" ✓ Total words: {stats['total_words']}")
print(f" ✓ By severity: {stats['by_severity']}")
print(f" ✓ By category: {stats['by_category']}")
# Test 7: Remove words
print("\n7. Removing words...")
removed = manager.remove_words(list_id, ['test1'])
print(f" ✓ Removed {removed} word(s)")
# Test 8: Initialize defaults
print("\n8. Initializing default word lists...")
defaults = manager.initialize_default_lists()
print(f" ✓ Created {len(defaults)} default lists:")
for name in defaults:
print(f" - {name}")
# Test 9: Get all lists
print("\n9. Getting all word lists...")
all_lists = manager.get_all_word_lists()
print(f" ✓ Found {len(all_lists)} total lists")
# Test 10: Merge lists
if len(all_lists) >= 2:
print("\n10. Merging word lists...")
target = all_lists[0]['id']
sources = [all_lists[1]['id']]
merged = manager.merge_word_lists(target, sources, False)
print(f" ✓ Merged {merged} words")
print("\n" + "="*60)
print("✅ All tests passed successfully!")
except Exception as e:
print(f"\n❌ Test failed: {e}")
import traceback
traceback.print_exc()
return False
finally:
# Cleanup
close_database()
Path(db_path).unlink(missing_ok=True)
json_path.unlink(missing_ok=True)
return True
if __name__ == "__main__":
success = test_word_list_manager()
sys.exit(0 if success else 1)