test_class_registration_fix.pyโข9.99 kB
#!/usr/bin/env python3
"""
Test Class Registration Fix
This script tests if the class registration fix resolves the
SQLAlchemy mapping issue.
"""
import sys
from datetime import datetime
def test_class_registration():
"""Test if class registration is working."""
print("=== TESTING CLASS REGISTRATION ===\n")
try:
# Clear any cached imports
if 'models_unified' in sys.modules:
del sys.modules['models_unified']
print("โ
Cleared cached imports")
# Import the fixed version
from models_unified import force_class_registration, SQLALCHEMY_AVAILABLE, Base
print("โ
Models imported successfully")
print(f" SQLAlchemy available: {SQLALCHEMY_AVAILABLE}")
print(f" Base class: {Base}")
if SQLALCHEMY_AVAILABLE and Base:
print("โ
SQLAlchemy ORM is available")
# Test class registration
result = force_class_registration()
if result:
print("โ
Class registration successful")
return True
else:
print("โ Class registration failed")
return False
else:
print("โ SQLAlchemy ORM not available")
return False
except Exception as e:
print(f"โ Class registration test failed: {e}")
return False
def test_global_database_with_class_registration():
"""Test if global database works with class registration."""
print("\n=== TESTING GLOBAL DATABASE WITH CLASS REGISTRATION ===\n")
try:
from models_unified import initialize_global_database, UnifiedInteraction, UnifiedSession
print("โ
Models imported successfully")
# Initialize global database (which should force class registration)
result = initialize_global_database()
if result:
print("โ
Global database initialized with class registration")
# Test if we can now query the mapped classes
try:
from models_unified import get_global_session
session = get_global_session()
print(f"โ
Session created: {type(session).__name__}")
# Test queries
interactions_count = session.query(UnifiedInteraction).count()
print(f"โ
Interactions query successful: {interactions_count}")
sessions_count = session.query(UnifiedSession).count()
print(f"โ
Sessions query successful: {sessions_count}")
print("๐ Class registration fix is working!")
return True
except Exception as e:
print(f"โ Session queries still failed: {e}")
return False
else:
print("โ Global database initialization failed")
return False
except Exception as e:
print(f"โ Global database test failed: {e}")
return False
def test_session_factory_with_class_registration():
"""Test if session factory works with class registration."""
print("\n=== TESTING SESSION FACTORY WITH CLASS REGISTRATION ===\n")
try:
from models_unified import UnifiedSessionFactory, UnifiedInteraction, UnifiedSession
# Create session factory
session_factory = UnifiedSessionFactory()
print("โ
Session factory created")
# Create a session
session = session_factory()
print(f"โ
Session created: {type(session).__name__}")
# Test if session recognizes mapped classes
try:
# Test querying interactions
interactions_count = session.query(UnifiedInteraction).count()
print(f"โ
Interactions query successful: {interactions_count}")
# Test querying sessions
sessions_count = session.query(UnifiedSession).count()
print(f"โ
Sessions query successful: {sessions_count}")
print("๐ Session factory with class registration is working!")
return True
except Exception as e:
print(f"โ Query still failed: {e}")
return False
except Exception as e:
print(f"โ Session factory test failed: {e}")
return False
def test_database_operations_with_class_registration():
"""Test if database operations work with class registration."""
print("\n=== TESTING DATABASE OPERATIONS WITH CLASS REGISTRATION ===\n")
try:
from models_unified import UnifiedSessionFactory, UnifiedInteraction
session_factory = UnifiedSessionFactory()
print("โ
Session factory retrieved")
with session_factory() as session:
print(f"โ
Session active: {type(session).__name__}")
# Test creating a real interaction
try:
test_interaction = UnifiedInteraction(
interaction_type="class_registration_test",
client_request="Test request with class registration fix",
agent_response="Test response with class registration fix",
timestamp=datetime.now(),
status="success",
metadata={"test": True, "class_registration": True, "verified": True}
)
print("โ
Test interaction created")
# Add to session
session.add(test_interaction)
print("โ
Test interaction added to session")
# Commit to database
session.commit()
print("โ
Test interaction committed to database")
# Verify it was stored
stored_count = session.query(UnifiedInteraction).count()
print(f"โ
Total interactions in database: {stored_count}")
# Look for our test interaction
stored_interaction = session.query(UnifiedInteraction).filter_by(
interaction_type="class_registration_test"
).first()
if stored_interaction:
print(f"โ
Test interaction found in database")
print(f" ID: {stored_interaction.id}")
print(f" Type: {stored_interaction.interaction_type}")
print(f" Timestamp: {stored_interaction.timestamp}")
print("๐ DATABASE OPERATIONS WITH CLASS REGISTRATION ARE WORKING!")
return True
else:
print("โ Test interaction not found in database")
return False
except Exception as e:
print(f"โ Database operations failed: {e}")
return False
except Exception as e:
print(f"โ Database operations test failed: {e}")
return False
def main():
"""Main test function."""
print("๐งช TESTING CLASS REGISTRATION FIX\n")
print("This script will test if the class registration fix resolves the SQLAlchemy mapping issue.\n")
# Test all components
tests = [
("Class Registration", test_class_registration),
("Global Database with Class Registration", test_global_database_with_class_registration),
("Session Factory with Class Registration", test_session_factory_with_class_registration),
("Database Operations with Class Registration", test_database_operations_with_class_registration)
]
success_count = 0
for name, test_func in tests:
try:
print(f"๐งช Running: {name}")
result = test_func()
if result:
success_count += 1
print(f" โ
{name} passed")
else:
print(f" โ {name} failed")
except Exception as e:
print(f" โ {name} failed with error: {e}")
print(f"\n๐ Test Results: {success_count}/{len(tests)} tests passed")
if success_count == len(tests):
print("\n๐ COMPLETE SUCCESS!")
print(" โข Class registration working")
print(" โข Global database working")
print(" โข Session factory working")
print(" โข Database operations working")
print("\n๐ **Your interaction tracking system is now fully functional!**")
print(" โข Interactions will be stored in real database")
print(" โข Context injection will work with real data")
print(" โข Conversation #107 will be properly tracked")
print("\n๐งช **Final Test Commands:**")
print("python diagnose_interaction_tracking.py")
print("python test_conversation_tracking.py")
print("\n๐ก **Expected Results:**")
print("โข Real SQLAlchemy sessions with mapped classes")
print("โข Interactions stored in real SQLite database")
print("โข Context injection working with actual conversation data")
print("โข Conversation #107 properly tracked and stored")
elif success_count > 0:
print("\nโ ๏ธ PARTIAL SUCCESS")
print(" โข Some components working, others need attention")
print(" โข Check the output above for specific failures")
else:
print("\nโ ALL TESTS FAILED")
print(" โข Class registration fix may not have worked")
print(" โข Check for syntax errors or import issues")
print(" โข Consider manual intervention")
if __name__ == "__main__":
main()