#!/usr/bin/env python3 """ Test script for Admin Dashboard Professional Management Tests all CRUD operations for professional management """ import requests import json import time # Configuration API_BASE_URL = "https://prodevroger-ishingiro.hf.space" ADMIN_EMAIL = "eliasfeza@gmail.com" ADMIN_PASSWORD = "EliasFeza@12301" def test_admin_login(): """Test admin login""" print("๐Ÿ” Testing admin login...") try: response = requests.post(f"{API_BASE_URL}/admin/login", json={ "email": ADMIN_EMAIL, "password": ADMIN_PASSWORD }) if response.status_code == 200: data = response.json() if data.get('success'): print("โœ… Admin login successful") return data.get('token') else: print(f"โŒ Admin login failed: {data.get('error')}") return None else: print(f"โŒ Admin login failed: {response.status_code}") return None except Exception as e: print(f"โŒ Admin login error: {e}") return None def test_get_professionals(token): """Test getting all professionals""" print("\n๐Ÿ“‹ Testing get professionals...") try: headers = {"Authorization": f"Bearer {token}"} response = requests.get(f"{API_BASE_URL}/admin/professionals", headers=headers) if response.status_code == 200: data = response.json() print(f"โœ… Retrieved {len(data.get('professionals', []))} professionals") return data.get('professionals', []) else: print(f"โŒ Get professionals failed: {response.status_code}") return [] except Exception as e: print(f"โŒ Get professionals error: {e}") return [] def test_create_professional(token): """Test creating a new professional""" print("\nโž• Testing create professional...") professional_data = { "username": "test_professional", "password": "password123", "first_name": "Test", "last_name": "Professional", "email": "test.professional@example.com", "phone": "+250788123456", "specialization": "counselor", "expertise_areas": ["depression", "anxiety"], "experience_years": 5, "district": "Gasabo", "consultation_fee": 50000, "bio": "Test professional for automated testing", "languages": ["english"], "qualifications": ["Masters in Counseling"], "availability_schedule": {} } try: headers = {"Authorization": f"Bearer {token}"} response = requests.post(f"{API_BASE_URL}/admin/professionals", json=professional_data, headers=headers) if response.status_code == 200: data = response.json() if data.get('success'): print("โœ… Professional created successfully") return data.get('professional', {}).get('id') else: print(f"โŒ Create professional failed: {data.get('error')}") return None else: print(f"โŒ Create professional failed: {response.status_code}") print(f"Response: {response.text}") return None except Exception as e: print(f"โŒ Create professional error: {e}") return None def test_update_professional(token, professional_id): """Test updating a professional""" print("\nโœ๏ธ Testing update professional...") update_data = { "first_name": "Updated", "last_name": "Professional", "email": "updated.professional@example.com", "phone": "+250788654321", "specialization": "psychologist", "expertise_areas": ["ptsd", "trauma"], "experience_years": 7, "district": "Kicukiro", "consultation_fee": 75000, "bio": "Updated professional for automated testing" } try: headers = {"Authorization": f"Bearer {token}"} response = requests.put(f"{API_BASE_URL}/admin/professionals/{professional_id}", json=update_data, headers=headers) if response.status_code == 200: data = response.json() if data.get('success'): print("โœ… Professional updated successfully") return True else: print(f"โŒ Update professional failed: {data.get('error')}") return False else: print(f"โŒ Update professional failed: {response.status_code}") print(f"Response: {response.text}") return False except Exception as e: print(f"โŒ Update professional error: {e}") return False def test_toggle_professional_status(token, professional_id): """Test toggling professional status""" print("\n๐Ÿ”„ Testing toggle professional status...") try: headers = {"Authorization": f"Bearer {token}"} response = requests.post(f"{API_BASE_URL}/admin/professionals/{professional_id}/status", json={"is_active": False}, headers=headers) if response.status_code == 200: data = response.json() if data.get('success'): print("โœ… Professional status toggled successfully") return True else: print(f"โŒ Toggle status failed: {data.get('error')}") return False else: print(f"โŒ Toggle status failed: {response.status_code}") print(f"Response: {response.text}") return False except Exception as e: print(f"โŒ Toggle status error: {e}") return False def test_delete_professional(token, professional_id): """Test deleting a professional""" print("\n๐Ÿ—‘๏ธ Testing delete professional...") try: headers = {"Authorization": f"Bearer {token}"} response = requests.delete(f"{API_BASE_URL}/admin/professionals/{professional_id}", headers=headers) if response.status_code == 200: data = response.json() if data.get('success'): print("โœ… Professional deleted successfully") return True else: print(f"โŒ Delete professional failed: {data.get('error')}") return False else: print(f"โŒ Delete professional failed: {response.status_code}") print(f"Response: {response.text}") return False except Exception as e: print(f"โŒ Delete professional error: {e}") return False def test_sms_status(token): """Test SMS service status""" print("\n๐Ÿ“ฑ Testing SMS service status...") try: headers = {"Authorization": f"Bearer {token}"} response = requests.get(f"{API_BASE_URL}/admin/sms/status", headers=headers) if response.status_code == 200: data = response.json() print(f"โœ… SMS Status: {data.get('status')}") print(f"๐Ÿ“ฑ API ID: {data.get('api_id')}") print(f"๐Ÿ”‘ API Key: {data.get('api_key_masked')}") print(f"๐Ÿ”— Connection Test: {data.get('connection_test')}") return True else: print(f"โŒ SMS status check failed: {response.status_code}") return False except Exception as e: print(f"โŒ SMS status error: {e}") return False def main(): """Run all tests""" print("๐Ÿงช Testing Admin Dashboard Professional Management") print("=" * 60) # Test admin login token = test_admin_login() if not token: print("โŒ Cannot proceed without admin authentication") return # Test getting professionals professionals = test_get_professionals(token) # Test creating a professional professional_id = test_create_professional(token) if not professional_id: print("โŒ Cannot proceed without creating a professional") return # Test updating the professional test_update_professional(token, professional_id) # Test toggling status test_toggle_professional_status(token, professional_id) # Test SMS status test_sms_status(token) # Test deleting the professional test_delete_professional(token, professional_id) print("\n" + "=" * 60) print("๐ŸŽ‰ Admin Dashboard Professional Management Tests Complete!") print("\n๐Ÿ“‹ Summary:") print("โœ… Admin authentication working") print("โœ… Professional CRUD operations working") print("โœ… Status toggle working") print("โœ… SMS service accessible") print("\n๐Ÿš€ The admin dashboard professional management is now fully functional!") if __name__ == "__main__": main()