139 lines
4.8 KiB
Python
139 lines
4.8 KiB
Python
"""
|
|
Test script for database functionality.
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
from services.database import init_database, get_db_session, close_database
|
|
from services.website_analysis_service import WebsiteAnalysisService
|
|
from models.onboarding import WebsiteAnalysis, OnboardingSession
|
|
|
|
def test_database_functionality():
|
|
"""Test database initialization and basic operations."""
|
|
try:
|
|
print("Testing database functionality...")
|
|
|
|
# Initialize database
|
|
init_database()
|
|
print("✅ Database initialized successfully")
|
|
|
|
# Get database session
|
|
db_session = get_db_session()
|
|
if not db_session:
|
|
print("❌ Failed to get database session")
|
|
return False
|
|
|
|
print("✅ Database session created successfully")
|
|
|
|
# Test website analysis service
|
|
analysis_service = WebsiteAnalysisService(db_session)
|
|
print("✅ Website analysis service created successfully")
|
|
|
|
# Test creating a session
|
|
session = OnboardingSession(user_id=1, current_step=2, progress=25.0)
|
|
db_session.add(session)
|
|
db_session.commit()
|
|
print(f"✅ Created onboarding session with ID: {session.id}")
|
|
|
|
# Test saving analysis
|
|
test_analysis_data = {
|
|
'style_analysis': {
|
|
'writing_style': {
|
|
'tone': 'professional',
|
|
'voice': 'active',
|
|
'complexity': 'moderate',
|
|
'engagement_level': 'high'
|
|
},
|
|
'target_audience': {
|
|
'demographics': ['professionals', 'business owners'],
|
|
'expertise_level': 'intermediate',
|
|
'industry_focus': 'technology',
|
|
'geographic_focus': 'global'
|
|
},
|
|
'content_type': {
|
|
'primary_type': 'blog',
|
|
'secondary_types': ['article', 'guide'],
|
|
'purpose': 'informational',
|
|
'call_to_action': 'subscribe'
|
|
},
|
|
'recommended_settings': {
|
|
'writing_tone': 'professional',
|
|
'target_audience': 'business professionals',
|
|
'content_type': 'blog posts',
|
|
'creativity_level': 'balanced',
|
|
'geographic_location': 'global'
|
|
}
|
|
},
|
|
'crawl_result': {
|
|
'content': 'Sample website content...',
|
|
'word_count': 1500
|
|
},
|
|
'style_patterns': {
|
|
'sentence_length': 'medium',
|
|
'paragraph_structure': 'well-organized'
|
|
},
|
|
'style_guidelines': {
|
|
'tone_guidelines': 'Maintain professional tone',
|
|
'structure_guidelines': 'Use clear headings'
|
|
}
|
|
}
|
|
|
|
analysis_id = analysis_service.save_analysis(
|
|
session_id=session.id,
|
|
website_url='https://example.com',
|
|
analysis_data=test_analysis_data
|
|
)
|
|
|
|
if analysis_id:
|
|
print(f"✅ Saved analysis with ID: {analysis_id}")
|
|
else:
|
|
print("❌ Failed to save analysis")
|
|
return False
|
|
|
|
# Test retrieving analysis
|
|
analysis = analysis_service.get_analysis(analysis_id)
|
|
if analysis:
|
|
print("✅ Retrieved analysis successfully")
|
|
print(f" Website URL: {analysis['website_url']}")
|
|
print(f" Writing Style: {analysis['writing_style']['tone']}")
|
|
else:
|
|
print("❌ Failed to retrieve analysis")
|
|
return False
|
|
|
|
# Test checking existing analysis
|
|
existing_check = analysis_service.check_existing_analysis(
|
|
session_id=session.id,
|
|
website_url='https://example.com'
|
|
)
|
|
|
|
if existing_check and existing_check.get('exists'):
|
|
print("✅ Existing analysis check works")
|
|
else:
|
|
print("❌ Existing analysis check failed")
|
|
return False
|
|
|
|
# Clean up
|
|
if analysis_id:
|
|
analysis_service.delete_analysis(analysis_id)
|
|
db_session.delete(session)
|
|
db_session.commit()
|
|
print("✅ Cleanup completed")
|
|
|
|
print("\n🎉 All database tests passed!")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"❌ Database test failed: {str(e)}")
|
|
return False
|
|
finally:
|
|
close_database()
|
|
|
|
if __name__ == "__main__":
|
|
success = test_database_functionality()
|
|
if success:
|
|
print("\n✅ Database functionality is working correctly!")
|
|
else:
|
|
print("\n❌ Database functionality has issues!")
|
|
sys.exit(1) |