129 lines
4.2 KiB
Python
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) |