rwadurian/tools/e2e_wallet_test.sh

141 lines
4.3 KiB
Bash

#!/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