192 lines
7.5 KiB
Python
192 lines
7.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test Script for LinkedIn Image Generation Infrastructure
|
|
|
|
This script tests the basic functionality of the LinkedIn image generation services
|
|
to ensure they are properly initialized and can perform basic operations.
|
|
"""
|
|
|
|
import asyncio
|
|
import sys
|
|
import os
|
|
from pathlib import Path
|
|
|
|
# Add the backend directory to the Python path
|
|
backend_path = Path(__file__).parent
|
|
sys.path.insert(0, str(backend_path))
|
|
|
|
from loguru import logger
|
|
|
|
# Configure logging
|
|
logger.remove()
|
|
logger.add(sys.stdout, colorize=True, format="<level>{level}</level>| {message}")
|
|
|
|
|
|
async def test_linkedin_image_infrastructure():
|
|
"""Test the LinkedIn image generation infrastructure."""
|
|
|
|
logger.info("🧪 Testing LinkedIn Image Generation Infrastructure")
|
|
logger.info("=" * 60)
|
|
|
|
try:
|
|
# Test 1: Import LinkedIn Image Services
|
|
logger.info("📦 Test 1: Importing LinkedIn Image Services...")
|
|
|
|
from services.linkedin.image_generation import (
|
|
LinkedInImageGenerator,
|
|
LinkedInImageEditor,
|
|
LinkedInImageStorage
|
|
)
|
|
from services.linkedin.image_prompts import LinkedInPromptGenerator
|
|
|
|
logger.success("✅ All LinkedIn image services imported successfully")
|
|
|
|
# Test 2: Initialize Services
|
|
logger.info("🔧 Test 2: Initializing LinkedIn Image Services...")
|
|
|
|
# Initialize services (without API keys for testing)
|
|
image_generator = LinkedInImageGenerator()
|
|
image_editor = LinkedInImageEditor()
|
|
image_storage = LinkedInImageStorage()
|
|
prompt_generator = LinkedInPromptGenerator()
|
|
|
|
logger.success("✅ All LinkedIn image services initialized successfully")
|
|
|
|
# Test 3: Test Prompt Generation (without API calls)
|
|
logger.info("📝 Test 3: Testing Prompt Generation Logic...")
|
|
|
|
# Test content context
|
|
test_content = {
|
|
'topic': 'AI in Marketing',
|
|
'industry': 'Technology',
|
|
'content_type': 'post',
|
|
'content': 'Exploring how artificial intelligence is transforming modern marketing strategies.'
|
|
}
|
|
|
|
# Test fallback prompt generation
|
|
fallback_prompts = prompt_generator._get_fallback_prompts(test_content, "1:1")
|
|
|
|
if len(fallback_prompts) == 3:
|
|
logger.success(f"✅ Fallback prompt generation working: {len(fallback_prompts)} prompts created")
|
|
|
|
for i, prompt in enumerate(fallback_prompts):
|
|
logger.info(f" Prompt {i+1}: {prompt['style']} - {prompt['description']}")
|
|
else:
|
|
logger.error(f"❌ Fallback prompt generation failed: expected 3, got {len(fallback_prompts)}")
|
|
|
|
# Test 4: Test Image Storage Directory Creation
|
|
logger.info("📁 Test 4: Testing Image Storage Directory Creation...")
|
|
|
|
# Check if storage directories were created
|
|
storage_path = image_storage.base_storage_path
|
|
if storage_path.exists():
|
|
logger.success(f"✅ Storage base directory created: {storage_path}")
|
|
|
|
# Check subdirectories
|
|
for subdir in ['images', 'metadata', 'temp']:
|
|
subdir_path = storage_path / subdir
|
|
if subdir_path.exists():
|
|
logger.info(f" ✅ {subdir} directory exists: {subdir_path}")
|
|
else:
|
|
logger.warning(f" ⚠️ {subdir} directory missing: {subdir_path}")
|
|
else:
|
|
logger.error(f"❌ Storage base directory not created: {storage_path}")
|
|
|
|
# Test 5: Test Service Methods
|
|
logger.info("⚙️ Test 5: Testing Service Method Signatures...")
|
|
|
|
# Test image generator methods
|
|
if hasattr(image_generator, 'generate_image'):
|
|
logger.success("✅ LinkedInImageGenerator.generate_image method exists")
|
|
else:
|
|
logger.error("❌ LinkedInImageGenerator.generate_image method missing")
|
|
|
|
if hasattr(image_editor, 'edit_image_conversationally'):
|
|
logger.success("✅ LinkedInImageEditor.edit_image_conversationally method exists")
|
|
else:
|
|
logger.error("❌ LinkedInImageEditor.edit_image_conversationally method missing")
|
|
|
|
if hasattr(image_storage, 'store_image'):
|
|
logger.success("✅ LinkedInImageStorage.store_image method exists")
|
|
else:
|
|
logger.error("❌ LinkedInImageStorage.store_image method missing")
|
|
|
|
if hasattr(prompt_generator, 'generate_three_prompts'):
|
|
logger.success("✅ LinkedInPromptGenerator.generate_three_prompts method exists")
|
|
else:
|
|
logger.error("❌ LinkedInPromptGenerator.generate_three_prompts method missing")
|
|
|
|
# Test 6: Test Prompt Enhancement
|
|
logger.info("🎨 Test 6: Testing Prompt Enhancement Logic...")
|
|
|
|
test_prompt = {
|
|
'style': 'Professional',
|
|
'prompt': 'Create a business image',
|
|
'description': 'Professional style'
|
|
}
|
|
|
|
enhanced_prompt = prompt_generator._enhance_prompt_for_linkedin(
|
|
test_prompt, test_content, "1:1", 0
|
|
)
|
|
|
|
if enhanced_prompt and 'enhanced_at' in enhanced_prompt:
|
|
logger.success("✅ Prompt enhancement working")
|
|
logger.info(f" Enhanced prompt length: {len(enhanced_prompt['prompt'])} characters")
|
|
else:
|
|
logger.error("❌ Prompt enhancement failed")
|
|
|
|
# Test 7: Test Image Validation Logic
|
|
logger.info("🔍 Test 7: Testing Image Validation Logic...")
|
|
|
|
# Test aspect ratio validation
|
|
valid_ratios = [(1024, 1024), (1600, 900), (1200, 1600)]
|
|
invalid_ratios = [(500, 500), (2000, 500)]
|
|
|
|
for width, height in valid_ratios:
|
|
if image_generator._is_aspect_ratio_suitable(width, height):
|
|
logger.info(f" ✅ Valid ratio {width}:{height} correctly identified")
|
|
else:
|
|
logger.warning(f" ⚠️ Valid ratio {width}:{height} incorrectly rejected")
|
|
|
|
for width, height in invalid_ratios:
|
|
if not image_generator._is_aspect_ratio_suitable(width, height):
|
|
logger.info(f" ✅ Invalid ratio {width}:{height} correctly rejected")
|
|
else:
|
|
logger.warning(f" ⚠️ Invalid ratio {width}:{height} incorrectly accepted")
|
|
|
|
logger.info("=" * 60)
|
|
logger.success("🎉 LinkedIn Image Generation Infrastructure Test Completed Successfully!")
|
|
|
|
return True
|
|
|
|
except ImportError as e:
|
|
logger.error(f"❌ Import Error: {e}")
|
|
logger.error("This usually means there's an issue with the module structure or dependencies")
|
|
return False
|
|
|
|
except Exception as e:
|
|
logger.error(f"❌ Test Failed: {e}")
|
|
logger.error(f"Error type: {type(e).__name__}")
|
|
import traceback
|
|
logger.error(f"Traceback: {traceback.format_exc()}")
|
|
return False
|
|
|
|
|
|
async def main():
|
|
"""Main test function."""
|
|
logger.info("🚀 Starting LinkedIn Image Generation Infrastructure Tests")
|
|
|
|
success = await test_linkedin_image_infrastructure()
|
|
|
|
if success:
|
|
logger.success("✅ All tests passed! The infrastructure is ready for use.")
|
|
sys.exit(0)
|
|
else:
|
|
logger.error("❌ Some tests failed. Please check the errors above.")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Run the async test
|
|
asyncio.run(main())
|