106 lines
3.3 KiB
Python
106 lines
3.3 KiB
Python
#!/usr/bin/env python
|
|
"""Test script to verify the analytics dashboard FieldError fix"""
|
|
|
|
import os
|
|
import sys
|
|
import django
|
|
|
|
# Setup Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PX360.settings')
|
|
sys.path.insert(0, '/home/ismail/projects/HH')
|
|
django.setup()
|
|
|
|
from django.db.models import Avg, Count, Q
|
|
from apps.organizations.models import Department
|
|
from apps.surveys.models import SurveyInstance
|
|
|
|
def test_department_rankings_query():
|
|
"""Test the department rankings query that was causing the FieldError"""
|
|
print("Testing department rankings query...")
|
|
|
|
try:
|
|
# Test the exact query from the fixed code
|
|
department_rankings = Department.objects.filter(
|
|
status='active'
|
|
).annotate(
|
|
avg_score=Avg(
|
|
'journey_instances__surveys__total_score',
|
|
filter=Q(journey_instances__surveys__status='completed')
|
|
),
|
|
survey_count=Count(
|
|
'journey_instances__surveys',
|
|
filter=Q(journey_instances__surveys__status='completed')
|
|
)
|
|
).filter(
|
|
survey_count__gt=0
|
|
).order_by('-avg_score')[:5]
|
|
|
|
# Execute the query
|
|
results = list(department_rankings)
|
|
|
|
print(f"✓ Query executed successfully!")
|
|
print(f"✓ Found {len(results)} departments with surveys")
|
|
|
|
if results:
|
|
print("\nTop departments by survey score:")
|
|
for i, dept in enumerate(results[:3], 1):
|
|
print(f" {i}. {dept.name} - Avg: {dept.avg_score:.2f}, Count: {dept.survey_count}")
|
|
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"✗ Query failed with error: {type(e).__name__}: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
def test_survey_query():
|
|
"""Test that we can query surveys by journey instance"""
|
|
print("\nTesting survey query through journey instances...")
|
|
|
|
try:
|
|
# Test a simpler query
|
|
surveys = SurveyInstance.objects.filter(
|
|
status='completed',
|
|
journey_instance__isnull=False
|
|
).select_related('journey_instance', 'journey_instance__department')[:5]
|
|
|
|
results = list(surveys)
|
|
print(f"✓ Found {len(results)} completed surveys with journey instances")
|
|
|
|
if results:
|
|
for survey in results[:2]:
|
|
dept = survey.journey_instance.department if survey.journey_instance else None
|
|
print(f" - Survey {survey.id}: Score={survey.total_score}, Dept={dept.name if dept else 'None'}")
|
|
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"✗ Query failed with error: {type(e).__name__}: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
if __name__ == '__main__':
|
|
print("=" * 60)
|
|
print("Testing Analytics Dashboard FieldError Fix")
|
|
print("=" * 60)
|
|
|
|
success = True
|
|
|
|
# Test 1: Department rankings query
|
|
if not test_department_rankings_query():
|
|
success = False
|
|
|
|
# Test 2: Survey query
|
|
if not test_survey_query():
|
|
success = False
|
|
|
|
print("\n" + "=" * 60)
|
|
if success:
|
|
print("✓ All tests passed!")
|
|
else:
|
|
print("✗ Some tests failed!")
|
|
print("=" * 60)
|
|
|
|
sys.exit(0 if success else 1) |