test_frontend_role_api.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/env python3
  2. import requests
  3. import json
  4. # Test the exact API call that the frontend makes
  5. admin_login_data = {
  6. 'username': 'admin',
  7. 'password': 'Admin123456'
  8. }
  9. try:
  10. # Login as admin
  11. login_response = requests.post('http://localhost:8000/api/v1/auth/login', json=admin_login_data)
  12. if login_response.status_code == 200:
  13. login_result = login_response.json()
  14. if login_result.get('code') == 0:
  15. token = login_result['data']['access_token']
  16. print('✅ Admin login successful')
  17. headers = {'Authorization': f'Bearer {token}'}
  18. # First get all menus (what frontend loads for the tree)
  19. print('\n=== Testing All Menus API (for tree data) ===')
  20. all_menus_response = requests.get('http://localhost:8000/api/v1/admin/menus?page_size=1000', headers=headers)
  21. if all_menus_response.status_code == 200:
  22. all_menus_result = all_menus_response.json()
  23. if all_menus_result.get('code') == 0:
  24. all_menus = all_menus_result['data']['items']
  25. print(f'✅ All menus API: {len(all_menus)} total menus')
  26. # Count menu types
  27. main_menus = [m for m in all_menus if m['menu_type'] == 'menu' and not m['parent_id']]
  28. sub_menus = [m for m in all_menus if m['menu_type'] == 'menu' and m['parent_id']]
  29. buttons = [m for m in all_menus if m['menu_type'] == 'button']
  30. print(f' Main menus: {len(main_menus)}')
  31. print(f' Sub menus: {len(sub_menus)}')
  32. print(f' Buttons: {len(buttons)}')
  33. else:
  34. print(f'❌ All menus API error: {all_menus_result.get("message")}')
  35. else:
  36. print(f'❌ All menus API HTTP error: {all_menus_response.status_code}')
  37. # Get user role ID
  38. roles_response = requests.get('http://localhost:8000/api/v1/admin/roles', headers=headers)
  39. if roles_response.status_code == 200:
  40. roles_result = roles_response.json()
  41. if roles_result.get('code') == 0:
  42. roles = roles_result['data']['items']
  43. user_role = next((r for r in roles if r['name'] == 'user'), None)
  44. if user_role:
  45. user_role_id = user_role['id']
  46. print(f'\n=== Testing User Role Permissions API ===')
  47. print(f'User role ID: {user_role_id}')
  48. # Get role permissions (what frontend uses for checked keys)
  49. role_perms_response = requests.get(
  50. f'http://localhost:8000/api/v1/admin/roles/{user_role_id}/menus',
  51. headers=headers
  52. )
  53. if role_perms_response.status_code == 200:
  54. role_perms_result = role_perms_response.json()
  55. if role_perms_result.get('code') == 0:
  56. data = role_perms_result['data']
  57. menu_ids = data.get('menu_ids', [])
  58. print(f'✅ Role permissions API successful')
  59. print(f'📋 Returned menu_ids: {menu_ids}')
  60. print(f'📊 Count: {len(menu_ids)} permissions')
  61. # Check if any problematic menu IDs are in the list
  62. problematic_ids = []
  63. if all_menus:
  64. for menu in all_menus:
  65. if menu['name'] in ['user-management', 'role-management', 'menu-management', 'permission-management', 'app-management', 'log-management']:
  66. if menu['id'] in menu_ids:
  67. problematic_ids.append(menu['name'])
  68. if problematic_ids:
  69. print(f'❌ PROBLEM: Found problematic menu IDs in response: {problematic_ids}')
  70. else:
  71. print('✅ No problematic menu IDs found in API response')
  72. # Show first few menu IDs for debugging
  73. print(f'📝 First 10 menu IDs: {menu_ids[:10]}')
  74. else:
  75. print(f'❌ Role permissions API error: {role_perms_result.get("message")}')
  76. else:
  77. print(f'❌ Role permissions API HTTP error: {role_perms_response.status_code}')
  78. print(f'Response: {role_perms_response.text}')
  79. else:
  80. print('❌ User role not found in roles list')
  81. else:
  82. print(f'❌ Roles API error: {roles_result.get("message")}')
  83. else:
  84. print(f'❌ Roles API HTTP error: {roles_response.status_code}')
  85. else:
  86. print(f'❌ Login error: {login_result.get("message")}')
  87. else:
  88. print(f'❌ Login HTTP error: {login_response.status_code}')
  89. except Exception as e:
  90. print(f'❌ Request error: {e}')