#!/usr/bin/env python3 import requests import json # Test the exact API call that the frontend makes admin_login_data = { 'username': 'admin', 'password': 'Admin123456' } try: # Login as admin login_response = requests.post('http://localhost:8000/api/v1/auth/login', json=admin_login_data) if login_response.status_code == 200: login_result = login_response.json() if login_result.get('code') == 0: token = login_result['data']['access_token'] print('✅ Admin login successful') headers = {'Authorization': f'Bearer {token}'} # First get all menus (what frontend loads for the tree) print('\n=== Testing All Menus API (for tree data) ===') all_menus_response = requests.get('http://localhost:8000/api/v1/admin/menus?page_size=1000', headers=headers) if all_menus_response.status_code == 200: all_menus_result = all_menus_response.json() if all_menus_result.get('code') == 0: all_menus = all_menus_result['data']['items'] print(f'✅ All menus API: {len(all_menus)} total menus') # Count menu types main_menus = [m for m in all_menus if m['menu_type'] == 'menu' and not m['parent_id']] sub_menus = [m for m in all_menus if m['menu_type'] == 'menu' and m['parent_id']] buttons = [m for m in all_menus if m['menu_type'] == 'button'] print(f' Main menus: {len(main_menus)}') print(f' Sub menus: {len(sub_menus)}') print(f' Buttons: {len(buttons)}') else: print(f'❌ All menus API error: {all_menus_result.get("message")}') else: print(f'❌ All menus API HTTP error: {all_menus_response.status_code}') # Get user role ID roles_response = requests.get('http://localhost:8000/api/v1/admin/roles', headers=headers) if roles_response.status_code == 200: roles_result = roles_response.json() if roles_result.get('code') == 0: roles = roles_result['data']['items'] user_role = next((r for r in roles if r['name'] == 'user'), None) if user_role: user_role_id = user_role['id'] print(f'\n=== Testing User Role Permissions API ===') print(f'User role ID: {user_role_id}') # Get role permissions (what frontend uses for checked keys) role_perms_response = requests.get( f'http://localhost:8000/api/v1/admin/roles/{user_role_id}/menus', headers=headers ) if role_perms_response.status_code == 200: role_perms_result = role_perms_response.json() if role_perms_result.get('code') == 0: data = role_perms_result['data'] menu_ids = data.get('menu_ids', []) print(f'✅ Role permissions API successful') print(f'📋 Returned menu_ids: {menu_ids}') print(f'📊 Count: {len(menu_ids)} permissions') # Check if any problematic menu IDs are in the list problematic_ids = [] if all_menus: for menu in all_menus: if menu['name'] in ['user-management', 'role-management', 'menu-management', 'permission-management', 'app-management', 'log-management']: if menu['id'] in menu_ids: problematic_ids.append(menu['name']) if problematic_ids: print(f'❌ PROBLEM: Found problematic menu IDs in response: {problematic_ids}') else: print('✅ No problematic menu IDs found in API response') # Show first few menu IDs for debugging print(f'📝 First 10 menu IDs: {menu_ids[:10]}') else: print(f'❌ Role permissions API error: {role_perms_result.get("message")}') else: print(f'❌ Role permissions API HTTP error: {role_perms_response.status_code}') print(f'Response: {role_perms_response.text}') else: print('❌ User role not found in roles list') else: print(f'❌ Roles API error: {roles_result.get("message")}') else: print(f'❌ Roles API HTTP error: {roles_response.status_code}') else: print(f'❌ Login error: {login_result.get("message")}') else: print(f'❌ Login HTTP error: {login_response.status_code}') except Exception as e: print(f'❌ Request error: {e}')