#!/usr/bin/env python3 """ Test Email System Independent testing of email functionality """ import os import sys import time import logging import requests from datetime import datetime # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def test_email_automation_service(): """Test the email automation service""" logger.info("๐Ÿงช Testing Email Automation Service...") base_url = "http://localhost:5001" # Test health check try: response = requests.get(f"{base_url}/api/email/health", timeout=10) if response.status_code == 200: logger.info("โœ… Email automation service is running") else: logger.error(f"โŒ Email automation service health check failed: {response.status_code}") return False except Exception as e: logger.error(f"โŒ Cannot connect to email automation service: {e}") return False # Test email sending try: response = requests.post(f"{base_url}/api/email/test", timeout=30) if response.status_code == 200: result = response.json() if result.get('success'): logger.info("โœ… Test email sent successfully") logger.info(f"๐Ÿ“ง Recipient: {result.get('recipient')}") logger.info(f"๐Ÿ“ง Subject: {result.get('subject')}") return True else: logger.error(f"โŒ Test email failed: {result.get('error')}") return False else: logger.error(f"โŒ Test email request failed: {response.status_code}") return False except Exception as e: logger.error(f"โŒ Test email request failed: {e}") return False def test_automated_email(): """Test automated email generation""" logger.info("๐Ÿงช Testing Automated Email Generation...") base_url = "http://localhost:5001" # Test automated email for customer 105 test_data = { 'customer_id': 105, 'email_type': 'behavioral_trigger', 'recipient_email': 'sameermujahid7777@gmail.com' } try: response = requests.post(f"{base_url}/api/email/automated", json=test_data, timeout=60) if response.status_code == 200: result = response.json() if result.get('success'): logger.info("โœ… Automated email sent successfully") logger.info(f"๐Ÿ“ง Customer ID: {result.get('customer_id')}") logger.info(f"๐Ÿ“ง Email Type: {result.get('email_type')}") logger.info(f"๐Ÿ“ง Subject: {result.get('subject')}") return True else: logger.error(f"โŒ Automated email failed: {result.get('error')}") return False else: logger.error(f"โŒ Automated email request failed: {response.status_code}") return False except Exception as e: logger.error(f"โŒ Automated email request failed: {e}") return False def test_api_service(): """Test the main API service""" logger.info("๐Ÿงช Testing Main API Service...") base_url = "http://localhost:5000" # Test health check try: response = requests.get(f"{base_url}/api/health", timeout=10) if response.status_code == 200: logger.info("โœ… Main API service is running") return True else: logger.error(f"โŒ Main API service health check failed: {response.status_code}") return False except Exception as e: logger.error(f"โŒ Cannot connect to main API service: {e}") return False def test_customer_analysis(): """Test customer analysis functionality""" logger.info("๐Ÿงช Testing Customer Analysis...") base_url = "http://localhost:5000" # Test customer 105 analysis try: response = requests.get(f"{base_url}/api/customer/105", timeout=30) if response.status_code == 200: result = response.json() if result.get('success'): logger.info("โœ… Customer analysis successful") lead_data = result.get('data', {}).get('lead_qualification', {}) logger.info(f"๐Ÿ“Š Lead Status: {lead_data.get('lead_status')}") logger.info(f"๐Ÿ“Š Lead Score: {lead_data.get('lead_score')}") return True else: logger.error(f"โŒ Customer analysis failed: {result.get('error')}") return False else: logger.error(f"โŒ Customer analysis request failed: {response.status_code}") return False except Exception as e: logger.error(f"โŒ Customer analysis request failed: {e}") return False def test_ai_analysis(): """Test AI analysis functionality""" logger.info("๐Ÿงช Testing AI Analysis...") base_url = "http://localhost:5000" # Test AI analysis for customer 105 try: response = requests.get(f"{base_url}/api/ai-customer/105", timeout=60) if response.status_code == 200: result = response.json() if result.get('success'): logger.info("โœ… AI analysis successful") ai_insights = result.get('data', {}).get('ai_insights', {}) logger.info(f"๐Ÿง  Personality Type: {ai_insights.get('ai_personality_type')}") logger.info(f"๐Ÿง  Buying Motivation: {ai_insights.get('buying_motivation')}") return True else: logger.error(f"โŒ AI analysis failed: {result.get('error')}") return False else: logger.error(f"โŒ AI analysis request failed: {response.status_code}") return False except Exception as e: logger.error(f"โŒ AI analysis request failed: {e}") return False def main(): """Main test function""" logger.info("=" * 80) logger.info("๐Ÿงช AI Lead Analysis System - Email Testing Suite") logger.info("=" * 80) logger.info(f"๐Ÿ“… Test Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") logger.info("") # Test results tests = { 'API Service': test_api_service, 'Customer Analysis': test_customer_analysis, 'AI Analysis': test_ai_analysis, 'Email Automation Service': test_email_automation_service, 'Test Email': test_email_automation_service, 'Automated Email': test_automated_email } results = {} for test_name, test_func in tests.items(): logger.info(f"๐Ÿ” Running {test_name} test...") try: result = test_func() results[test_name] = result if result: logger.info(f"โœ… {test_name} test PASSED") else: logger.error(f"โŒ {test_name} test FAILED") except Exception as e: logger.error(f"โŒ {test_name} test ERROR: {e}") results[test_name] = False logger.info("") # Summary logger.info("=" * 80) logger.info("๐Ÿ“Š TEST SUMMARY") logger.info("=" * 80) passed = sum(1 for result in results.values() if result) total = len(results) for test_name, result in results.items(): status = "โœ… PASSED" if result else "โŒ FAILED" logger.info(f"{test_name}: {status}") logger.info("") logger.info(f"๐Ÿ“ˆ Overall Result: {passed}/{total} tests passed") if passed == total: logger.info("๐ŸŽ‰ All tests passed! Email system is working correctly.") else: logger.warning("โš ๏ธ Some tests failed. Please check the logs above.") logger.info("=" * 80) return passed == total if __name__ == "__main__": try: success = main() sys.exit(0 if success else 1) except KeyboardInterrupt: logger.info("๐Ÿ›‘ Testing interrupted by user") sys.exit(1) except Exception as e: logger.error(f"โŒ Testing failed: {e}") sys.exit(1)