#!/usr/bin/env bash set -euo pipefail root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" keycloak_url="${KEYCLOAK_URL:-http://localhost:8081}" backend_url="${BACKEND_URL:-http://localhost:8080}" device_id="${IOS_DEVICE_ID:-$(xcrun simctl list devices booted -j | jq -r '.devices[][] | select(.state == "Booted") | .udid' | head -1)}" if [[ -z "${device_id}" ]]; then echo 'No booted iOS simulator. Boot one or set IOS_DEVICE_ID.' >&2 exit 1 fi curl --fail --silent "${backend_url}/actuator/health" >/dev/null token() { curl --fail --silent --show-error \ -X POST "${keycloak_url}/realms/aioa/protocol/openid-connect/token" \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode client_id=aioa-mobile \ --data-urlencode grant_type=password \ --data-urlencode "username=$1" \ --data-urlencode "password=$2" | jq -r .access_token } run_role() { local role="$1" local access_token="$2" local employee_access_token="$3" echo "Running iOS MVP scenario: ${role}" ( cd "${root_dir}/mobile" flutter test integration_test/mvp_business_test.dart \ -d "${device_id}" \ --dart-define="AIOA_E2E_ACCESS_TOKEN=${access_token}" \ --dart-define="AIOA_E2E_EMPLOYEE_TOKEN=${employee_access_token}" \ --dart-define="AIOA_E2E_ROLE=${role}" \ --dart-define="AIOA_API_BASE_URL=${backend_url}/api/v1" ) } employee_token="$(token employee 'Employee123!')" run_role employee "${employee_token}" "${employee_token}" employee_token="$(token employee 'Employee123!')" manager_token="$(token manager 'Manager123!')" run_role manager "${manager_token}" "${employee_token}" admin_token="$(token admin 'Admin123!')" run_role admin "${admin_token}" "${employee_token}" echo 'All iOS MVP frontend business scenarios passed.'