#!/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)