210 lines
4.7 KiB
Markdown
210 lines
4.7 KiB
Markdown
# SLA Testing Quick Start
|
|
|
|
Get started with realistic SLA testing in 5 minutes!
|
|
|
|
## Quick Setup
|
|
|
|
### 1. Verify Your Environment
|
|
|
|
```bash
|
|
# 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)
|
|
|
|
```bash
|
|
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)
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
python manage.py shell
|
|
```
|
|
|
|
```python
|
|
# 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**:
|
|
```bash
|
|
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:
|
|
```bash
|
|
cd /home/ismail/projects/HH
|
|
```
|
|
|
|
## Customize Your Test
|
|
|
|
### Change Time Compression
|
|
|
|
Edit the test script:
|
|
|
|
```python
|
|
# 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:
|
|
|
|
```python
|
|
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:**
|
|
|
|
```bash
|
|
python test_scenario_1_successful_explanation.py
|