#!/bin/bash # ============================================================================= # E2E Test: Create Account and Wait for Wallet Ready # ============================================================================= # # This script simulates the mobile app flow: # 1. Call POST /user/auto-create to create a new account # 2. Poll GET /user/wallet until wallet is ready (has mnemonic and 3 addresses) # # Usage: ./e2e_wallet_test.sh [BASE_URL] # Default BASE_URL: http://localhost:3000/api/v1 # ============================================================================= set -e # Configuration BASE_URL="${1:-http://localhost:3000/api/v1}" DEVICE_ID="test-device-$(date +%s)" MAX_RETRIES=60 RETRY_INTERVAL=5 echo "==============================================" echo "E2E Wallet Creation Test" echo "==============================================" echo "Base URL: $BASE_URL" echo "Device ID: $DEVICE_ID" echo "==============================================" echo "" # Step 1: Create Account echo "[Step 1] Creating account..." CREATE_RESPONSE=$(curl -s -X POST "${BASE_URL}/user/auto-create" \ -H "Content-Type: application/json" \ -d "{ \"deviceId\": \"${DEVICE_ID}\", \"deviceName\": { \"brand\": \"Test\", \"model\": \"E2E-Device\", \"platform\": \"android\", \"osVersion\": \"14\" } }") echo "Response: $CREATE_RESPONSE" echo "" # Parse response SUCCESS=$(echo "$CREATE_RESPONSE" | jq -r '.success // false') if [ "$SUCCESS" != "true" ]; then echo "❌ Failed to create account!" echo "Error: $(echo "$CREATE_RESPONSE" | jq -r '.message // .error // "Unknown error"')" exit 1 fi ACCESS_TOKEN=$(echo "$CREATE_RESPONSE" | jq -r '.data.accessToken') USER_SERIAL_NUM=$(echo "$CREATE_RESPONSE" | jq -r '.data.userSerialNum') USERNAME=$(echo "$CREATE_RESPONSE" | jq -r '.data.username') REFERRAL_CODE=$(echo "$CREATE_RESPONSE" | jq -r '.data.referralCode') echo "✅ Account created successfully!" echo " User Serial Number: $USER_SERIAL_NUM" echo " Username: $USERNAME" echo " Referral Code: $REFERRAL_CODE" echo "" # Step 2: Poll Wallet Status echo "[Step 2] Polling wallet status..." echo " Max retries: $MAX_RETRIES" echo " Retry interval: ${RETRY_INTERVAL}s" echo "" RETRY_COUNT=0 WALLET_READY=false while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do RETRY_COUNT=$((RETRY_COUNT + 1)) WALLET_RESPONSE=$(curl -s -X GET "${BASE_URL}/user/wallet" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${ACCESS_TOKEN}") WALLET_STATUS=$(echo "$WALLET_RESPONSE" | jq -r '.data.status // "unknown"') echo "[Attempt $RETRY_COUNT/$MAX_RETRIES] Wallet status: $WALLET_STATUS" if [ "$WALLET_STATUS" == "ready" ]; then WALLET_READY=true break elif [ "$WALLET_STATUS" == "failed" ]; then echo "❌ Wallet generation failed!" echo "Error: $(echo "$WALLET_RESPONSE" | jq -r '.data.error // "Unknown error"')" exit 1 fi # Still generating, wait and retry sleep $RETRY_INTERVAL done if [ "$WALLET_READY" != "true" ]; then echo "❌ Timeout waiting for wallet to be ready!" exit 1 fi echo "" echo "==============================================" echo "✅ WALLET READY!" echo "==============================================" echo "" # Extract wallet data MNEMONIC=$(echo "$WALLET_RESPONSE" | jq -r '.data.mnemonic // "N/A"') KAVA_ADDRESS=$(echo "$WALLET_RESPONSE" | jq -r '.data.walletAddresses.kava // "N/A"') DST_ADDRESS=$(echo "$WALLET_RESPONSE" | jq -r '.data.walletAddresses.dst // "N/A"') BSC_ADDRESS=$(echo "$WALLET_RESPONSE" | jq -r '.data.walletAddresses.bsc // "N/A"') echo "📝 Mnemonic (12 words):" echo " $MNEMONIC" echo "" echo "💰 Wallet Addresses:" echo " KAVA: $KAVA_ADDRESS" echo " DST: $DST_ADDRESS" echo " BSC: $BSC_ADDRESS" echo "" echo "==============================================" echo "Test completed successfully!" echo "==============================================" # Validate results if [ "$MNEMONIC" == "N/A" ] || [ -z "$MNEMONIC" ]; then echo "⚠️ Warning: Mnemonic is empty or N/A" fi WORD_COUNT=$(echo "$MNEMONIC" | wc -w) if [ "$WORD_COUNT" -ne 12 ] && [ "$MNEMONIC" != "N/A" ] && [ -n "$MNEMONIC" ]; then echo "⚠️ Warning: Mnemonic word count is $WORD_COUNT (expected 12)" fi if [ "$KAVA_ADDRESS" == "N/A" ] || [ "$DST_ADDRESS" == "N/A" ] || [ "$BSC_ADDRESS" == "N/A" ]; then echo "⚠️ Warning: Some wallet addresses are missing" fi