#!/usr/bin/env python """ Test script for admin evaluation dashboard """ import os import django import sys # Setup Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PX360.settings') sys.path.insert(0, '/home/ismail/projects/HH') django.setup() from django.test import RequestFactory from django.contrib.auth import get_user_model from apps.dashboard.views import admin_evaluation User = get_user_model() def test_admin_evaluation_view(): """Test the admin evaluation view""" print("=" * 60) print("Testing Admin Evaluation Dashboard") print("=" * 60) # Get one of the test admin users admin_user = User.objects.filter(username='rahaf').first() if not admin_user: print("āŒ Admin user 'rahaf' not found!") return False print(f"\nāœ… Found admin user: {admin_user.username}") print(f" Email: {admin_user.email}") print(f" Role: {admin_user.role}") # Create a fake request factory = RequestFactory() request = factory.get('/admin-evaluation/') request.user = admin_user try: # Call the view print("\nšŸ“Š Calling admin_evaluation view...") response = admin_evaluation(request) print(f"āœ… View executed successfully!") print(f" Status code: {response.status_code}") # Check response data if hasattr(response, 'context_data'): context = response.context_data if 'performance_data' in context: perf_data = context['performance_data'] print(f"\nāœ… Performance data found") print(f" Staff metrics count: {len(perf_data.get('staff_metrics', []))}") print(f" Start date: {perf_data.get('start_date')}") print(f" End date: {perf_data.get('end_date')}") print(f" Date range: {perf_data.get('date_range')}") # Display staff metrics staff_metrics = perf_data.get('staff_metrics', []) if staff_metrics: print(f"\nšŸ“ˆ Staff Performance:") for staff in staff_metrics: print(f"\n - {staff['name']}") print(f" Hospital: {staff['hospital']}") print(f" Department: {staff['department']}") print(f" Complaints: {staff['complaints']['total']}") print(f" Inquiries: {staff['inquiries']['total']}") # Complaint breakdown comp = staff['complaints'] if comp['total'] > 0: print(f" Status: Open={comp['status']['open']}, " f"In Progress={comp['status']['in_progress']}, " f"Resolved={comp['status']['resolved']}, " f"Closed={comp['status']['closed']}") print(f" Activation (≤2h): {comp['activation_time']['within_2h']}, " f"(>2h): {comp['activation_time']['more_than_2h']}") else: print(f" No complaints assigned") # Inquiry breakdown inq = staff['inquiries'] if inq['total'] > 0: print(f" Status: Open={inq['status']['open']}, " f"In Progress={inq['status']['in_progress']}, " f"Resolved={inq['status']['resolved']}, " f"Closed={inq['status']['closed']}") else: print(f" No inquiries assigned") return True else: print("āŒ 'performance_data' not found in context") return False else: print("āŒ Response has no context_data") return False except Exception as e: print(f"\nāŒ Error executing view:") print(f" {type(e).__name__}: {str(e)}") import traceback traceback.print_exc() return False def check_test_data(): """Check that test data exists""" print("\n" + "=" * 60) print("Checking Test Data") print("=" * 60) from apps.complaints.models import Complaint, Inquiry from apps.accounts.models import User # Check admin users admin_users = User.objects.filter(role='admin') print(f"\nšŸ‘„ Admin users: {admin_users.count()}") for user in admin_users: print(f" - {user.username} ({user.email})") # Check complaints complaints = Complaint.objects.filter(assigned_to__role='admin') print(f"\nšŸ“ Total complaints assigned to admins: {complaints.count()}") for user in admin_users: user_complaints = complaints.filter(assigned_to=user) print(f" - {user.username}: {user_complaints.count()} complaints") # Check inquiries inquiries = Inquiry.objects.filter(assigned_to__role='admin') print(f"\nā“ Total inquiries assigned to admins: {inquiries.count()}") for user in admin_users: user_inquiries = inquiries.filter(assigned_to=user) print(f" - {user.username}: {user_inquiries.count()} inquiries") return True if __name__ == '__main__': print("\nšŸš€ Admin Evaluation Dashboard Test\n") # First check test data check_test_data() # Then test the view success = test_admin_evaluation_view() print("\n" + "=" * 60) if success: print("āœ… All tests passed!") print(" The admin evaluation dashboard is working correctly.") else: print("āŒ Tests failed!") print(" Please check the error messages above.") print("=" * 60 + "\n")