test_user_role_menus_api.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #!/usr/bin/env python3
  2. import requests
  3. import json
  4. # Test the role menus API for user role
  5. admin_login_data = {
  6. 'username': 'admin',
  7. 'password': 'Admin123456'
  8. }
  9. try:
  10. # Login as admin to get access to role management APIs
  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. # Get user role ID first
  18. headers = {'Authorization': f'Bearer {token}'}
  19. roles_response = requests.get('http://localhost:8000/api/v1/admin/roles', headers=headers)
  20. if roles_response.status_code == 200:
  21. roles_result = roles_response.json()
  22. if roles_result.get('code') == 0:
  23. roles = roles_result['data']['items']
  24. user_role_id = None
  25. for role in roles:
  26. if role['name'] == 'user':
  27. user_role_id = role['id']
  28. print(f'✅ Found user role ID: {user_role_id}')
  29. break
  30. if user_role_id:
  31. # Get role menu permissions
  32. role_menus_response = requests.get(
  33. f'http://localhost:8000/api/v1/admin/roles/{user_role_id}/menus',
  34. headers=headers
  35. )
  36. if role_menus_response.status_code == 200:
  37. role_menus_result = role_menus_response.json()
  38. if role_menus_result.get('code') == 0:
  39. data = role_menus_result['data']
  40. menu_ids = data.get('menu_ids', [])
  41. menu_details = data.get('menu_details', [])
  42. print(f'✅ Role menus API successful')
  43. print(f'📊 User role has {len(menu_ids)} menu permissions')
  44. print(f'📋 Menu IDs: {menu_ids[:5]}...' if len(menu_ids) > 5 else f'📋 Menu IDs: {menu_ids}')
  45. # Categorize menus
  46. main_menus = []
  47. sub_menus = []
  48. buttons = []
  49. for menu in menu_details:
  50. if menu['menu_type'] == 'menu' and menu['parent_id'] is None:
  51. main_menus.append(menu)
  52. elif menu['menu_type'] == 'menu' and menu['parent_id'] is not None:
  53. sub_menus.append(menu)
  54. elif menu['menu_type'] == 'button':
  55. buttons.append(menu)
  56. print(f'\n📁 Main Menus ({len(main_menus)}):')
  57. for menu in main_menus:
  58. print(f' - {menu["title"]} ({menu["name"]})')
  59. print(f'\n📄 Sub Menus ({len(sub_menus)}):')
  60. for menu in sub_menus:
  61. print(f' - {menu["title"]} ({menu["name"]})')
  62. print(f'\n🔘 Buttons ({len(buttons)}):')
  63. for menu in buttons[:10]: # Show first 10 buttons
  64. print(f' - {menu["title"]} ({menu["name"]})')
  65. if len(buttons) > 10:
  66. print(f' ... and {len(buttons) - 10} more buttons')
  67. # Check for problematic menus
  68. problematic_menu_names = [
  69. 'user-management', 'role-management', 'menu-management',
  70. 'permission-management', 'app-management', 'log-management'
  71. ]
  72. print(f'\n🔍 Checking for problematic menus:')
  73. found_problematic = []
  74. for menu in menu_details:
  75. if menu['name'] in problematic_menu_names:
  76. found_problematic.append(menu['name'])
  77. print(f' ❌ FOUND: {menu["title"]} ({menu["name"]})')
  78. if not found_problematic:
  79. print(' ✅ No problematic menus found - API is correct!')
  80. else:
  81. print(f' ❌ Found {len(found_problematic)} problematic menus in API response!')
  82. else:
  83. print(f'❌ Role menus API error: {role_menus_result.get("message")}')
  84. else:
  85. print(f'❌ Role menus API HTTP error: {role_menus_response.status_code}')
  86. print(f'Response: {role_menus_response.text}')
  87. else:
  88. print('❌ User role not found!')
  89. else:
  90. print(f'❌ Roles API error: {roles_result.get("message")}')
  91. else:
  92. print(f'❌ Roles API HTTP error: {roles_response.status_code}')
  93. else:
  94. print(f'❌ Login error: {login_result.get("message")}')
  95. else:
  96. print(f'❌ Login HTTP error: {login_response.status_code}')
  97. except Exception as e:
  98. print(f'❌ Request error: {e}')