231 lines
7.6 KiB
Python
231 lines
7.6 KiB
Python
"""
|
|
Test script for PX Action creation from complaints using AI service.
|
|
|
|
This script tests the AI-powered PX Action creation feature.
|
|
"""
|
|
import os
|
|
import django
|
|
import sys
|
|
|
|
# Setup Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PX360.settings')
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
django.setup()
|
|
|
|
from apps.complaints.models import Complaint
|
|
from apps.core.ai_service import AIService
|
|
from apps.px_action_center.models import PXAction
|
|
from apps.accounts.models import User
|
|
|
|
|
|
def test_ai_service():
|
|
"""Test the AI service method directly"""
|
|
print("=" * 80)
|
|
print("TEST 1: AI Service - create_px_action_from_complaint()")
|
|
print("=" * 80)
|
|
|
|
# Get a sample complaint
|
|
complaint = Complaint.objects.first()
|
|
|
|
if not complaint:
|
|
print("❌ No complaints found in database. Please seed complaints first.")
|
|
return False
|
|
|
|
print(f"\nUsing Complaint:")
|
|
print(f" ID: {complaint.id}")
|
|
print(f" Title: {complaint.title}")
|
|
print(f" Description: {complaint.description[:100]}...")
|
|
print(f" Category: {complaint.category.name_en if complaint.category else 'N/A'}")
|
|
print(f" Severity: {complaint.severity}")
|
|
print(f" Priority: {complaint.priority}")
|
|
|
|
try:
|
|
# Call AI service
|
|
print("\n🔄 Calling AI service to generate action data...")
|
|
action_data = AIService.create_px_action_from_complaint(complaint)
|
|
|
|
print("\n✅ AI Service Response:")
|
|
print(f" Title: {action_data['title']}")
|
|
print(f" Description: {action_data['description'][:100]}...")
|
|
print(f" Category: {action_data['category']}")
|
|
print(f" Priority: {action_data['priority']}")
|
|
print(f" Severity: {action_data['severity']}")
|
|
print(f" Reasoning: {action_data['reasoning']}")
|
|
|
|
return action_data
|
|
except Exception as e:
|
|
print(f"\n❌ AI Service Error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return None
|
|
|
|
|
|
def test_px_action_creation(action_data, complaint):
|
|
"""Test creating a PX Action from the generated data"""
|
|
print("\n" + "=" * 80)
|
|
print("TEST 2: PX Action Creation")
|
|
print("=" * 80)
|
|
|
|
try:
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
# Get content type
|
|
complaint_content_type = ContentType.objects.get_for_model(Complaint)
|
|
|
|
# Create PX Action
|
|
print("\n🔄 Creating PX Action...")
|
|
action = PXAction.objects.create(
|
|
source_type='complaint',
|
|
content_type=complaint_content_type,
|
|
object_id=complaint.id,
|
|
title=action_data['title'],
|
|
description=action_data['description'],
|
|
hospital=complaint.hospital,
|
|
department=complaint.department,
|
|
category=action_data['category'],
|
|
priority=action_data['priority'],
|
|
severity=action_data['severity'],
|
|
assigned_to=None,
|
|
status='open',
|
|
metadata={
|
|
'source_complaint_id': str(complaint.id),
|
|
'source_complaint_title': complaint.title,
|
|
'ai_generated': True,
|
|
'ai_reasoning': action_data.get('reasoning', ''),
|
|
'created_from_ai_suggestion': True
|
|
}
|
|
)
|
|
|
|
print("\n✅ PX Action Created:")
|
|
print(f" Action ID: {action.id}")
|
|
print(f" Title: {action.title}")
|
|
print(f" Category: {action.category}")
|
|
print(f" Priority: {action.priority}")
|
|
print(f" Severity: {action.severity}")
|
|
print(f" Status: {action.status}")
|
|
print(f" Hospital: {action.hospital.name}")
|
|
print(f" Department: {action.department.name if action.department else 'N/A'}")
|
|
|
|
return action
|
|
except Exception as e:
|
|
print(f"\n❌ PX Action Creation Error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return None
|
|
|
|
|
|
def test_api_endpoint():
|
|
"""Test the API endpoint for creating PX Actions"""
|
|
print("\n" + "=" * 80)
|
|
print("TEST 3: API Endpoint - /api/complaints/{id}/create_action_from_ai/")
|
|
print("=" * 80)
|
|
|
|
# Get a test complaint
|
|
complaint = Complaint.objects.first()
|
|
|
|
if not complaint:
|
|
print("❌ No complaints found in database.")
|
|
return False
|
|
|
|
print(f"\nUsing Complaint ID: {complaint.id}")
|
|
|
|
# Get a PX Admin user for testing
|
|
user = User.objects.filter(groups__name='PX Admin').first()
|
|
|
|
if not user:
|
|
print("❌ No PX Admin user found. Creating test user...")
|
|
from django.contrib.auth.models import Group
|
|
px_admin_group, _ = Group.objects.get_or_create(name='PX Admin')
|
|
user = User.objects.create_user(
|
|
username='test_px_admin',
|
|
email='test@example.com',
|
|
first_name='Test',
|
|
last_name='Admin'
|
|
)
|
|
user.groups.add(px_admin_group)
|
|
user.hospital = complaint.hospital
|
|
user.save()
|
|
print(f"✅ Created test PX Admin: {user.email}")
|
|
|
|
try:
|
|
from rest_framework.test import APIRequestFactory
|
|
from apps.complaints.views import ComplaintViewSet
|
|
|
|
# Create a mock request
|
|
factory = APIRequestFactory()
|
|
request = factory.post(f'/api/complaints/{complaint.id}/create_action_from_ai/')
|
|
request.user = user
|
|
|
|
# Create viewset instance
|
|
viewset = ComplaintViewSet()
|
|
viewset.kwargs = {'pk': str(complaint.id)}
|
|
viewset.request = request
|
|
viewset.format_kwarg = None
|
|
|
|
# Call the action
|
|
print("\n🔄 Calling API endpoint...")
|
|
response = viewset.create_action_from_ai(request, pk=complaint.id)
|
|
|
|
if response.status_code == 201:
|
|
print("\n✅ API Endpoint Success!")
|
|
print(f" Response Status: {response.status_code}")
|
|
print(f" Response Data: {response.data}")
|
|
return True
|
|
else:
|
|
print(f"\n❌ API Endpoint Failed:")
|
|
print(f" Status Code: {response.status_code}")
|
|
print(f" Response: {response.data}")
|
|
return False
|
|
|
|
except Exception as e:
|
|
print(f"\n❌ API Endpoint Error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
|
|
def main():
|
|
"""Run all tests"""
|
|
print("\n" + "=" * 80)
|
|
print("PX ACTION AI CREATION TEST SUITE")
|
|
print("=" * 80)
|
|
|
|
# Test 1: AI Service
|
|
action_data = test_ai_service()
|
|
if not action_data:
|
|
print("\n❌ Cannot continue with other tests without AI service working.")
|
|
return
|
|
|
|
# Test 2: PX Action Creation
|
|
complaint = Complaint.objects.first()
|
|
action = test_px_action_creation(action_data, complaint)
|
|
if not action:
|
|
print("\n❌ PX Action creation failed.")
|
|
else:
|
|
print(f"\n✅ PX Action created successfully! Action ID: {action.id}")
|
|
|
|
# Test 3: API Endpoint
|
|
api_success = test_api_endpoint()
|
|
if api_success:
|
|
print("\n✅ API endpoint working correctly!")
|
|
else:
|
|
print("\n❌ API endpoint test failed.")
|
|
|
|
# Summary
|
|
print("\n" + "=" * 80)
|
|
print("TEST SUMMARY")
|
|
print("=" * 80)
|
|
print(f"✅ AI Service: {'PASS' if action_data else 'FAIL'}")
|
|
print(f"✅ PX Action Creation: {'PASS' if action else 'FAIL'}")
|
|
print(f"✅ API Endpoint: {'PASS' if api_success else 'FAIL'}")
|
|
print("=" * 80)
|
|
|
|
if action_data and action and api_success:
|
|
print("\n🎉 All tests passed! PX Action AI creation is working correctly.")
|
|
else:
|
|
print("\n⚠️ Some tests failed. Please review the errors above.")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|