#!/bin/bash # Complete Integration Test Script for LittleShop, TeleBot, and SilverPay # Tests production endpoints with correct API paths set -e # Colors for output GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Configuration LITTLESHOP_URL="https://admin.thebankofdebbie.giize.com" SILVERPAY_URL="https://pay.thebankofdebbie.giize.com" TIMEOUT=15 # Test counters TESTS_PASSED=0 TESTS_FAILED=0 echo "================================================" echo "Complete Integration Test Suite" echo "================================================" echo "LittleShop: $LITTLESHOP_URL" echo "SilverPay: $SILVERPAY_URL" echo "================================================" echo "" # Function to run a test run_test() { local test_name="$1" local cmd="$2" echo -n "Testing $test_name... " # Run the command and capture output and status output=$(eval "$cmd" 2>&1) || status=$? # Extract HTTP code if present http_code=$(echo "$output" | grep -o "HTTP_CODE:[0-9]*" | cut -d: -f2) if [ -n "$http_code" ]; then # Check if it's a success code (2xx or 302 for redirects) if [[ "$http_code" =~ ^2[0-9][0-9]$ ]] || [ "$http_code" = "302" ]; then echo -e "${GREEN}✓${NC} (HTTP $http_code)" ((TESTS_PASSED++)) # Show preview for successful responses body=$(echo "$output" | sed '/HTTP_CODE:/d' | head -c 150) if [ -n "$body" ]; then echo " Response: ${body}..." fi else echo -e "${RED}✗${NC} (HTTP $http_code)" ((TESTS_FAILED++)) # Show error details error_body=$(echo "$output" | sed '/HTTP_CODE:/d' | head -c 200) if [ -n "$error_body" ]; then echo " Error: $error_body" fi fi else # Connection error or timeout echo -e "${RED}✗${NC} (Connection Error)" ((TESTS_FAILED++)) echo " Error: $(echo "$output" | head -1)" fi } # ============================================================ echo -e "${BLUE}[1] LittleShop Admin Authentication${NC}" echo "--------------------------------------------" # Test admin login run_test "Admin Login" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ -X POST '$LITTLESHOP_URL/Admin/Account/Login' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'Username=admin&Password=admin' \ -c /tmp/test_cookies.txt \ -L" # Test dashboard access with cookie run_test "Dashboard Access" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$LITTLESHOP_URL/Admin/Dashboard' \ -b /tmp/test_cookies.txt" echo "" # ============================================================ echo -e "${BLUE}[2] TeleBot-LittleShop Communication (Public APIs)${NC}" echo "--------------------------------------------" run_test "Categories API" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$LITTLESHOP_URL/api/catalog/categories' \ -H 'Accept: application/json'" run_test "Products API" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$LITTLESHOP_URL/api/catalog/products' \ -H 'Accept: application/json'" echo "" # ============================================================ echo -e "${BLUE}[3] SilverPay Core Operations${NC}" echo "--------------------------------------------" # Test health endpoint run_test "SilverPay Health" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$SILVERPAY_URL/health'" # Test wallet info run_test "Wallet Info" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$SILVERPAY_URL/api/v1/admin/wallet/info' \ -H 'Accept: application/json'" # Test list orders run_test "List Orders" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$SILVERPAY_URL/api/v1/orders' \ -H 'Accept: application/json'" # Test supported currencies run_test "Supported Currencies" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$SILVERPAY_URL/api/v1/currencies' \ -H 'Accept: application/json'" # Test exchange rate run_test "Exchange Rate (GBP/BTC)" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$SILVERPAY_URL/api/v1/exchange/rates/GBP/BTC' \ -H 'Accept: application/json'" echo "" # ============================================================ echo -e "${BLUE}[4] SilverPay Order Creation & Management${NC}" echo "--------------------------------------------" # Create a test order in SilverPay TIMESTAMP=$(date +%s) ORDER_JSON='{ "external_id": "test-'$TIMESTAMP'", "fiat_amount": 10.00, "fiat_currency": "GBP", "currency": "BTC", "customer_email": "test@integration.com", "description": "Integration Test Order" }' echo "Creating test order with external_id: test-$TIMESTAMP" CREATE_RESPONSE=$(curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ -X POST "$SILVERPAY_URL/api/v1/orders" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "$ORDER_JSON") HTTP_CODE=$(echo "$CREATE_RESPONSE" | grep -o "HTTP_CODE:[0-9]*" | cut -d: -f2) RESPONSE_BODY=$(echo "$CREATE_RESPONSE" | sed '/HTTP_CODE:/d') if [[ "$HTTP_CODE" =~ ^2[0-9][0-9]$ ]]; then echo -e "Create Test Order... ${GREEN}✓${NC} (HTTP $HTTP_CODE)" ((TESTS_PASSED++)) # Extract order ID ORDER_ID=$(echo "$RESPONSE_BODY" | grep -o '"id":"[^"]*"' | cut -d'"' -f4) PAYMENT_ADDRESS=$(echo "$RESPONSE_BODY" | grep -o '"payment_address":"[^"]*"' | cut -d'"' -f4) CRYPTO_AMOUNT=$(echo "$RESPONSE_BODY" | grep -o '"crypto_amount":"[^"]*"' | cut -d'"' -f4) if [ -n "$ORDER_ID" ]; then echo " Order ID: $ORDER_ID" echo " Payment Address: $PAYMENT_ADDRESS" echo " Amount: $CRYPTO_AMOUNT BTC" # Test getting the order run_test "Get Order Details" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ '$SILVERPAY_URL/api/v1/orders/$ORDER_ID' \ -H 'Accept: application/json'" # Test payment check run_test "Check Payment Status" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ -X POST '$SILVERPAY_URL/api/v1/payments/check' \ -H 'Content-Type: application/json' \ -d '{\"order_id\": \"$ORDER_ID\"}'" fi else echo -e "Create Test Order... ${RED}✗${NC} (HTTP $HTTP_CODE)" ((TESTS_FAILED++)) echo " Error: $(echo "$RESPONSE_BODY" | head -c 200)" fi echo "" # ============================================================ echo -e "${BLUE}[5] LittleShop Order Creation${NC}" echo "--------------------------------------------" # First, get a valid product ID PRODUCTS=$(curl -s "$LITTLESHOP_URL/api/catalog/products" -H "Accept: application/json" 2>/dev/null) PRODUCT_ID=$(echo "$PRODUCTS" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4) if [ -n "$PRODUCT_ID" ]; then echo "Using product ID: $PRODUCT_ID" # Create order in LittleShop LS_ORDER_JSON='{ "customerIdentity": "test-customer-'$TIMESTAMP'", "deliveryAddress": "123 Test Street, Test City, TC1 1TC", "items": [{ "productId": "'$PRODUCT_ID'", "quantity": 1 }] }' run_test "Create LittleShop Order" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ -X POST '$LITTLESHOP_URL/api/orders' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '$LS_ORDER_JSON'" # Extract order ID from response if successful LS_CREATE_RESPONSE=$(curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ -X POST "$LITTLESHOP_URL/api/orders" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "$LS_ORDER_JSON" 2>/dev/null) LS_HTTP_CODE=$(echo "$LS_CREATE_RESPONSE" | grep -o "HTTP_CODE:[0-9]*" | cut -d: -f2) LS_BODY=$(echo "$LS_CREATE_RESPONSE" | sed '/HTTP_CODE:/d') if [[ "$LS_HTTP_CODE" =~ ^2[0-9][0-9]$ ]]; then LS_ORDER_ID=$(echo "$LS_BODY" | grep -o '"id":"[^"]*"' | cut -d'"' -f4) if [ -n "$LS_ORDER_ID" ]; then echo " LittleShop Order ID: $LS_ORDER_ID" # Test payment creation through LittleShop PAYMENT_JSON='{ "cryptocurrency": "BTC", "customerEmail": "test@integration.com" }' run_test "Create Payment via LittleShop" "curl -s -w '\nHTTP_CODE:%{http_code}' \ --connect-timeout $TIMEOUT \ -X POST '$LITTLESHOP_URL/api/orders/$LS_ORDER_ID/payments' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ -d '$PAYMENT_JSON'" fi fi else echo -e "${YELLOW}Warning: No products found in LittleShop${NC}" fi echo "" # ============================================================ echo "================================================" echo -e "${BLUE}TEST SUMMARY${NC}" echo "================================================" echo -e "Passed: ${GREEN}$TESTS_PASSED${NC}" echo -e "Failed: ${RED}$TESTS_FAILED${NC}" echo "Total: $((TESTS_PASSED + TESTS_FAILED))" echo "" if [ $TESTS_FAILED -eq 0 ]; then echo -e "${GREEN}✓ ALL TESTS PASSED!${NC}" echo "" echo "All integrations are working correctly:" echo " • LittleShop admin authentication ✓" echo " • TeleBot can retrieve categories and products ✓" echo " • SilverPay can create and manage orders ✓" echo " • SilverPay provides wallet info and exchange rates ✓" echo " • LittleShop can communicate with SilverPay ✓" exit 0 else echo -e "${RED}✗ SOME TESTS FAILED${NC}" echo "" echo "Please review the failed tests above for details." exit 1 fi