177 lines
5.7 KiB
Python
177 lines
5.7 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Test script for HTML email template functionality
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import django
|
|
|
|
# Setup Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings')
|
|
django.setup()
|
|
|
|
from django.template.loader import render_to_string
|
|
from django.utils.html import strip_tags
|
|
from recruitment.models import Candidate, JobPosting
|
|
from recruitment.email_service import send_interview_invitation_email
|
|
|
|
def test_html_template():
|
|
"""Test the HTML email template rendering"""
|
|
print("Testing HTML email template...")
|
|
|
|
# Create test context
|
|
context = {
|
|
'candidate_name': 'John Doe',
|
|
'candidate_email': 'john.doe@example.com',
|
|
'candidate_phone': '+966 50 123 4567',
|
|
'job_title': 'Senior Software Developer',
|
|
'department': 'Information Technology',
|
|
'company_name': 'Norah University',
|
|
'meeting_topic': 'Interview for Senior Software Developer',
|
|
'meeting_date_time': 'November 15, 2025 at 2:00 PM',
|
|
'meeting_duration': '60 minutes',
|
|
'join_url': 'https://zoom.us/j/123456789',
|
|
}
|
|
|
|
try:
|
|
# Test template rendering
|
|
html_content = render_to_string('emails/interview_invitation.html', context)
|
|
plain_content = strip_tags(html_content)
|
|
|
|
print("✅ HTML template rendered successfully!")
|
|
print(f"HTML content length: {len(html_content)} characters")
|
|
print(f"Plain text length: {len(plain_content)} characters")
|
|
|
|
# Save rendered HTML to file for inspection
|
|
with open('test_interview_email.html', 'w', encoding='utf-8') as f:
|
|
f.write(html_content)
|
|
print("✅ HTML content saved to 'test_interview_email.html'")
|
|
|
|
# Save plain text to file for inspection
|
|
with open('test_interview_email.txt', 'w', encoding='utf-8') as f:
|
|
f.write(plain_content)
|
|
print("✅ Plain text content saved to 'test_interview_email.txt'")
|
|
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error rendering template: {e}")
|
|
return False
|
|
|
|
def test_email_service_function():
|
|
"""Test the email service function with mock data"""
|
|
print("\nTesting email service function...")
|
|
|
|
try:
|
|
# Get a real candidate and job for testing
|
|
candidate = Candidate.objects.first()
|
|
job = JobPosting.objects.first()
|
|
|
|
if not candidate:
|
|
print("❌ No candidates found in database")
|
|
return False
|
|
|
|
if not job:
|
|
print("❌ No jobs found in database")
|
|
return False
|
|
|
|
print(f"Using candidate: {candidate.name}")
|
|
print(f"Using job: {job.title}")
|
|
|
|
# Test meeting details
|
|
meeting_details = {
|
|
'topic': f'Interview for {job.title}',
|
|
'date_time': 'November 15, 2025 at 2:00 PM',
|
|
'duration': '60 minutes',
|
|
'join_url': 'https://zoom.us/j/test123456',
|
|
}
|
|
|
|
# Test the email function (without actually sending)
|
|
result = send_interview_invitation_email(
|
|
candidate=candidate,
|
|
job=job,
|
|
meeting_details=meeting_details,
|
|
recipient_list=['test@example.com']
|
|
)
|
|
|
|
if result['success']:
|
|
print("✅ Email service function executed successfully!")
|
|
print(f"Recipients: {result.get('recipients_count', 'N/A')}")
|
|
print(f"Message: {result.get('message', 'N/A')}")
|
|
else:
|
|
print(f"❌ Email service function failed: {result.get('error', 'Unknown error')}")
|
|
|
|
return result['success']
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error testing email service: {e}")
|
|
return False
|
|
|
|
def test_template_variables():
|
|
"""Test all template variables"""
|
|
print("\nTesting template variables...")
|
|
|
|
# Test with minimal data
|
|
minimal_context = {
|
|
'candidate_name': 'Test Candidate',
|
|
'candidate_email': 'test@example.com',
|
|
'job_title': 'Test Position',
|
|
}
|
|
|
|
try:
|
|
html_content = render_to_string('emails/interview_invitation.html', minimal_context)
|
|
print("✅ Template works with minimal data")
|
|
|
|
# Check for required variables
|
|
required_vars = ['candidate_name', 'candidate_email', 'job_title']
|
|
missing_vars = []
|
|
|
|
for var in required_vars:
|
|
if f'{{ {var} }}' in html_content:
|
|
missing_vars.append(var)
|
|
|
|
if missing_vars:
|
|
print(f"⚠️ Missing variables: {missing_vars}")
|
|
else:
|
|
print("✅ All required variables are present")
|
|
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"❌ Error with minimal data: {e}")
|
|
return False
|
|
|
|
def main():
|
|
"""Run all tests"""
|
|
print("🧪 Testing HTML Email Template System")
|
|
print("=" * 50)
|
|
|
|
# Test 1: Template rendering
|
|
test1_passed = test_html_template()
|
|
|
|
# Test 2: Template variables
|
|
test2_passed = test_template_variables()
|
|
|
|
# Test 3: Email service function
|
|
test3_passed = test_email_service_function()
|
|
|
|
# Summary
|
|
print("\n" + "=" * 50)
|
|
print("📊 TEST SUMMARY")
|
|
print(f"Template Rendering: {'✅ PASS' if test1_passed else '❌ FAIL'}")
|
|
print(f"Template Variables: {'✅ PASS' if test2_passed else '❌ FAIL'}")
|
|
print(f"Email Service: {'✅ PASS' if test3_passed else '❌ FAIL'}")
|
|
|
|
overall_success = test1_passed and test2_passed and test3_passed
|
|
print(f"\nOverall Result: {'✅ ALL TESTS PASSED' if overall_success else '❌ SOME TESTS FAILED'}")
|
|
|
|
if overall_success:
|
|
print("\n🎉 HTML email template system is ready!")
|
|
print("You can now send professional interview invitations using the new template.")
|
|
else:
|
|
print("\n🔧 Please fix the issues before using the template system.")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|