141 lines
4.3 KiB
Bash
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
|