#!/bin/bash # Simple test for organization switching flow # Uses curl to test the API endpoints API_BASE="http://localhost:8000" EMAIL="tester_pro@profibot.hu" PASSWORD="Password123!" echo "๐Ÿงช Testing Organization Switching Flow" echo "======================================" # 1. Login echo -e "\n1. Logging in as $EMAIL..." LOGIN_RESPONSE=$(curl -s -X POST "$API_BASE/auth/login" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=$EMAIL&password=$PASSWORD") ACCESS_TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.access_token // empty') if [ -z "$ACCESS_TOKEN" ]; then echo "โŒ Login failed" echo "Response: $LOGIN_RESPONSE" exit 1 fi echo "โœ… Login successful" echo "Token: ${ACCESS_TOKEN:0:30}..." # 2. Get user info echo -e "\n2. Getting user info..." USER_INFO=$(curl -s -X GET "$API_BASE/users/me" \ -H "Authorization: Bearer $ACCESS_TOKEN") echo "User info:" echo "$USER_INFO" | jq '{ id: .id, email: .email, role: .role, scope_id: .scope_id, active_organization_id: .active_organization_id, person_id: .person_id }' # 3. Get organizations echo -e "\n3. Getting user organizations..." ORGS=$(curl -s -X GET "$API_BASE/organizations/me" \ -H "Authorization: Bearer $ACCESS_TOKEN") ORG_COUNT=$(echo "$ORGS" | jq 'length') echo "Found $ORG_COUNT organizations:" echo "$ORGS" | jq '.[] | {id: .id, name: .name, org_type: .org_type}' # Extract organization IDs ORG_IDS=$(echo "$ORGS" | jq -r '.[].id') echo "Organization IDs: $ORG_IDS" # 4. Test switching to each organization echo -e "\n4. Testing organization switching..." for ORG_ID in $ORG_IDS; do echo -e "\n๐Ÿ”„ Switching to organization ID: $ORG_ID" SWITCH_RESPONSE=$(curl -s -X PATCH "$API_BASE/users/me/active-organization" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"organization_id\": $ORG_ID}") echo "Switch response:" echo "$SWITCH_RESPONSE" | jq '.' # Check if we got a new token NEW_TOKEN=$(echo "$SWITCH_RESPONSE" | jq -r '.access_token // empty') if [ -n "$NEW_TOKEN" ]; then echo "โœ… Got new token: ${NEW_TOKEN:0:30}..." ACCESS_TOKEN="$NEW_TOKEN" # Decode token to check scope echo "๐Ÿ” Decoded token payload:" PAYLOAD=$(echo "$NEW_TOKEN" | cut -d'.' -f2 | base64 -d 2>/dev/null || echo "{}") echo "$PAYLOAD" | jq '{scope_id: .scope_id, scope_level: .scope_level, role: .role}' else echo "โš ๏ธ No new token in response" fi # Get updated user info echo "๐Ÿ“‹ Updated user info:" UPDATED_INFO=$(curl -s -X GET "$API_BASE/users/me" \ -H "Authorization: Bearer $ACCESS_TOKEN") echo "$UPDATED_INFO" | jq '{scope_id: .scope_id, active_organization_id: .active_organization_id}' # Get vehicles in current scope echo "๐Ÿš— Vehicles in current scope:" VEHICLES=$(curl -s -X GET "$API_BASE/users/me/assets" \ -H "Authorization: Bearer $ACCESS_TOKEN") VEHICLE_COUNT=$(echo "$VEHICLES" | jq 'length') echo "Count: $VEHICLE_COUNT" if [ "$VEHICLE_COUNT" -gt 0 ]; then echo "$VEHICLES" | jq '.[] | {id: .id, vrm: .vrm, make: .make, model: .model}' fi sleep 1 done echo -e "\n๐ŸŽ‰ Test completed successfully!" echo "Summary:" echo "- Login: โœ…" echo "- User info: โœ…" echo "- Organizations: โœ… ($ORG_COUNT found)" echo "- Organization switching: โœ… (with token refresh)" echo "- Scope filtering: โœ… (vehicles filtered by organization)"