HH/docs/SLA_TESTING_QUICKSTART.md

4.7 KiB

SLA Testing Quick Start

Get started with realistic SLA testing in 5 minutes!

Quick Setup

1. Verify Your Environment

# Check Django is configured
cat .env | grep DJANGO_SETTINGS_MODULE

# Should show: DJANGO_SETTINGS_MODULE=config.settings.dev

2. Run Scenario 1 (Happy Path - ~7 seconds)

python test_scenario_1_successful_explanation.py

What it tests: Staff submits explanation before deadline

Expected output:

  TEST SUMMARY
  Total Steps: 7
  Successful: 7
  Failed: 0
  Elapsed Time: 7.2s

  ✓✓✓ ALL TESTS PASSED ✓✓✓

3. Run Scenario 2 (Escalation - ~37 seconds)

python test_scenario_2_escalation_with_reminders.py

What it tests:

  • Staff doesn't respond ⚠️
  • First reminder sent ⚠️
  • Second reminder sent ⚠️
  • Escalates to manager 📈
  • Escalates to department head 📈

Expected output:

  TEST SUMMARY
  Total Steps: 12
  Successful: 12
  Failed: 0
  Elapsed Time: 37.5s

  ✓✓✓ ALL TESTS PASSED ✓✓✓

What Just Happened?

Time Compression Magic

The tests use 1 second = 1 hour time compression:

  • Real SLA: 48 hours → Test time: 48 seconds
  • Real SLA: 12 hours → Test time: 12 seconds

This means you can test a full 2-day workflow in under 1 minute!

Real System Execution

These are NOT mocks - they execute real code:

Real database operations
Real Celery tasks
Real email sending
Real SLA calculations
Real escalation logic

What Gets Created

Scenario 1 Creates:

  • 1 Hospital (Al Hammadi Hospital)
  • 1 Department (Emergency Department)
  • 1 Staff member (Omar Al-Harbi - Nurse)
  • 1 Complaint (Poor response time)
  • 1 Explanation request (submitted)
  • 1 ExplanationSLAConfig (10-hour deadline)
  • 1 ComplaintSLAConfig (72-hour SLA)

Scenario 2 Creates:

  • 1 Hospital (Al Hammadi Hospital)
  • 1 Department (Emergency Department)
  • 3 Staff members (Staff → Manager → Department Head)
  • 1 Complaint (High severity, high priority)
  • 1 Explanation request (overdue, escalated)
  • 1 ExplanationSLAConfig (12-hour deadline with reminders)
  • 1 SecondReminderConfig (3 hours before deadline)
  • 1 ComplaintSLAConfig (48-hour SLA)

Verify Results in Django Admin

# Start Django server
python manage.py runserver

# Visit: http://localhost:8000/admin
# Login with your admin credentials

# Check:
# - Complaints → All Complaints
# - Complaints → Explanations
# - Organizations → Staff
# - Complaints → SLA Configurations

Clean Up Test Data

python manage.py shell
# Delete test complaints
from apps.complaints.models import Complaint, ComplaintExplanation
Complaint.objects.filter(contact_name="Test Patient").delete()
Complaint.objects.filter(contact_name="Concerned Family Member").delete()

# Delete test staff (be careful!)
from apps.organizations.models import Staff
Staff.objects.filter(email__contains=".test").delete()

# Delete test SLA configs
from apps.complaints.models import ExplanationSLAConfig, ComplaintSLAConfig, SecondReminderConfig
ExplanationSLAConfig.objects.all().delete()
ComplaintSLAConfig.objects.all().delete()
SecondReminderConfig.objects.all().delete()

Common Issues

Issue: "Database error"

Solution:

python manage.py migrate

Issue: "Email failed to send"

Solution: Add to .env:

EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend

Issue: "Module not found"

Solution: Make sure you're in the project root:

cd /home/ismail/projects/HH

Customize Your Test

Change Time Compression

Edit the test script:

# Make it faster (1s = 2h)
test = Scenario1SuccessfulExplanation(time_compression_ratio=2)

# Make it slower (1s = 30min)
test = Scenario1SuccessfulExplanation(time_compression_ratio=0.5)

Change SLA Deadline

Edit the SLA config in the test:

self.create_explanation_sla_config(
    hospital=hospital,
    response_hours=24,  # Change from 10 to 24 hours
    reminder_hours_before=12,  # Change from 5 to 12 hours
    auto_escalate_enabled=True,
    escalation_hours_overdue=0,
    max_escalation_levels=3
)

Next Steps

  1. Run both scenarios successfully
  2. Review results in Django admin
  3. Check the email output (console or real email)
  4. Customize SLA settings to match your needs
  5. Read the full guide: docs/REAL_TIME_SLA_TESTING_GUIDE.md

Need Help?

  • Full documentation: docs/REAL_TIME_SLA_TESTING_GUIDE.md
  • SLA system overview: docs/SLA_SYSTEM_OVERVIEW.md
  • Celery tasks: apps/complaints/tasks.py
  • Models: apps/complaints/models.py

Ready to test? Run Scenario 1 now:

python test_scenario_1_successful_explanation.py