HH/test_analytics_dashboard_fix.py
2026-02-22 08:35:53 +03:00

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)