#!/usr/bin/env python """ Test script for job closing reminder system """ import os import sys import django from datetime import datetime, timedelta from django.utils import timezone # Setup Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NorahUniversity.settings') django.setup() from recruitment.models import JobPosting, Application from django_q.models import Schedule from django.contrib.auth import get_user_model User = get_user_model() def test_reminder_scheduling(): """Test that reminders are properly scheduled when a job is created/updated""" print("๐Ÿงช Testing Job Closing Reminder System") print("=" * 50) # Get or create a test user test_user, created = User.objects.get_or_create( username='test_recruiter', defaults={ 'email': 'test@example.com', 'is_staff': True } ) # Create a test job with deadline in 2 days deadline = timezone.now() + timedelta(days=2) print(f"๐Ÿ“… Creating test job with deadline: {deadline}") job = JobPosting.objects.create( title='Test Software Engineer Position', description='Test job for reminder system', qualifications='Python, Django, PostgreSQL', status='ACTIVE', application_deadline=deadline, assigned_to=test_user, created_by='Test User' ) print(f"โœ… Created job: {job.title} (ID: {job.pk})") # Check if schedules were created schedules = Schedule.objects.filter( name__in=[ f"one_day_reminder_{job.pk}", f"fifteen_min_reminder_{job.pk}", f"job_closing_{job.pk}" ] ) print(f"\n๐Ÿ“‹ Scheduled Tasks ({schedules.count()} found):") for schedule in schedules: print(f" - {schedule.name}: {schedule.next_run}") # Test deadline update print(f"\n๐Ÿ”„ Testing deadline update...") new_deadline = deadline + timedelta(hours=6) job.application_deadline = new_deadline job.save() # Check if schedules were updated updated_schedules = Schedule.objects.filter( name__in=[ f"one_day_reminder_{job.pk}", f"fifteen_min_reminder_{job.pk}", f"job_closing_{job.pk}" ] ) print(f"๐Ÿ“‹ Updated Scheduled Tasks ({updated_schedules.count()} found):") for schedule in updated_schedules: print(f" - {schedule.name}: {schedule.next_run}") # Test job deactivation print(f"\n๐Ÿ›‘ Testing job deactivation...") job.status = 'CLOSED' job.save() remaining_schedules = Schedule.objects.filter( name__in=[ f"one_day_reminder_{job.pk}", f"fifteen_min_reminder_{job.pk}", f"job_closing_{job.pk}" ] ) print(f"๐Ÿ“‹ Remaining Scheduled Tasks after deactivation: {remaining_schedules.count()}") # Cleanup print(f"\n๐Ÿงน Cleaning up test data...") job.delete() print("โœ… Test completed successfully!") def test_email_functions(): """Test the email functions directly""" print("\n๐Ÿงช Testing Email Functions") print("=" * 50) # Create a test job test_user, _ = User.objects.get_or_create( username='test_recruiter_email', defaults={'email': 'test_email@example.com', 'is_staff': True} ) job = JobPosting.objects.create( title='Test Email Job', description='Test job for email functions', status='ACTIVE', application_deadline=timezone.now() + timedelta(hours=1), assigned_to=test_user, created_by='Test User' ) print(f"๐Ÿ“ง Testing email functions for job: {job.pk}") # Import and test email functions from recruitment.tasks import ( send_one_day_reminder, send_fifteen_minute_reminder, send_job_closed_notification ) try: print("๐Ÿ“ค Testing 1-day reminder...") send_one_day_reminder(job.pk) print("โœ… 1-day reminder sent successfully") except Exception as e: print(f"โŒ 1-day reminder failed: {e}") try: print("๐Ÿ“ค Testing 15-minute reminder...") send_fifteen_minute_reminder(job.pk) print("โœ… 15-minute reminder sent successfully") except Exception as e: print(f"โŒ 15-minute reminder failed: {e}") try: print("๐Ÿ“ค Testing job closed notification...") send_job_closed_notification(job.pk) print("โœ… Job closed notification sent successfully") except Exception as e: print(f"โŒ Job closed notification failed: {e}") # Cleanup job.delete() print("๐Ÿงน Test data cleaned up") if __name__ == '__main__': try: test_reminder_scheduling() test_email_functions() print("\n๐ŸŽ‰ All tests completed!") except Exception as e: print(f"\nโŒ Test failed with error: {e}") import traceback traceback.print_exc()