70 lines
3.6 KiB
Bash
70 lines
3.6 KiB
Bash
#!/usr/bin/env bash
|
|
# Teste E2E: pedido FOSSBilling → provisionamento OpenPanel via bridge (Spec 024)
|
|
set -euo pipefail
|
|
|
|
FOSS_URL="${FOSS_URL:-https://financeiro.ligbox.com.br}"
|
|
ADMIN_EMAIL="${FOSS_ADMIN_EMAIL:-admin@ligbox.com.br}"
|
|
ADMIN_PASS="${FOSS_ADMIN_PASS:-LbFossAdmin805353}"
|
|
TEST_USER="test$(date +%s | tail -c 6)"
|
|
TEST_EMAIL="${TEST_USER}@testprovision.ligbox.com.br"
|
|
TEST_PASS="LbTest805353"
|
|
COOKIE_JAR="$(mktemp)"
|
|
trap 'rm -f "$COOKIE_JAR"' EXIT
|
|
|
|
echo "=== Spec 024 E2E: FOSS order → OpenPanel ==="
|
|
echo "Test user: ${TEST_USER}"
|
|
|
|
echo "[1/6] Login FOSS Admin..."
|
|
LOGIN=$(curl -sk -c "$COOKIE_JAR" -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/guest/staff/login" \
|
|
-d "email=${ADMIN_EMAIL}&password=${ADMIN_PASS}")
|
|
echo "$LOGIN" | grep -q '"role":"admin"' || { echo "Login falhou: $LOGIN"; exit 1; }
|
|
curl -sk -c "$COOKIE_JAR" -b "$COOKIE_JAR" "${FOSS_URL}/admin" >/dev/null
|
|
CSRF=$(awk '$6=="csrf_token" {print $7}' "$COOKIE_JAR" | tail -1)
|
|
|
|
echo "[2/6] Criar cliente..."
|
|
CLIENT=$(curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/client/create" \
|
|
-d "CSRFToken=${CSRF}&email=${TEST_EMAIL}&pass=${TEST_PASS}&first_name=Test&last_name=Provision&status=active¤cy=BRL")
|
|
CID=$(echo "$CLIENT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('result',''))" 2>/dev/null || true)
|
|
[ -n "$CID" ] || { echo "Cliente falhou: $CLIENT"; exit 1; }
|
|
echo " Client id=${CID}"
|
|
|
|
CONFIG=$(python3 -c "import json; print(json.dumps({'domain':{'action':'owndomain','owndomain_sld':'${TEST_USER}','owndomain_tld':'ligbox.com.br'}}))")
|
|
|
|
echo "[3/6] Encomendar produto hosting..."
|
|
ORDER=$(curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/order/create" \
|
|
-d "CSRFToken=${CSRF}&client_id=${CID}&product_id=2&period=1M¤cy=BRL&activate=1&config=${CONFIG}")
|
|
echo "$ORDER" | python3 -m json.tool 2>/dev/null || echo "$ORDER"
|
|
OID=$(echo "$ORDER" | python3 -c "import sys,json; r=json.load(sys.stdin).get('result'); print(r if r else '')" 2>/dev/null || true)
|
|
|
|
if [ -z "$OID" ]; then
|
|
echo " Order API falhou — a validar bridge directamente..."
|
|
TOKEN=$(curl -s -X POST http://127.0.0.1:18087/api -H "Content-Type: application/json" \
|
|
-d '{"username":"ligboxadmin","password":"LbOpen805353"}' | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
|
|
curl -s -X POST http://127.0.0.1:18087/api/users \
|
|
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
|
|
-d "{\"username\":\"${TEST_USER}\",\"password\":\"${TEST_PASS}\",\"email\":\"${TEST_EMAIL}\",\"plan_name\":\"ligbox-site-cms\"}" | grep -q success
|
|
echo " Bridge create OK"
|
|
else
|
|
echo "[4/6] Order id=${OID}"
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/order/activate" \
|
|
-d "CSRFToken=${CSRF}&id=${OID}" >/dev/null 2>&1 || true
|
|
sleep 5
|
|
fi
|
|
|
|
echo "[5/6] Verificar utilizador OpenPanel..."
|
|
if opencli user-list 2>/dev/null | grep -q "${TEST_USER}"; then
|
|
echo " OK — utilizador ${TEST_USER} existe no OpenPanel"
|
|
else
|
|
opencli user-list 2>/dev/null | tail -8
|
|
echo " AVISO — verificar manualmente"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[6/6] Limpeza teste..."
|
|
opencli user-delete "${TEST_USER}" -y 2>/dev/null || \
|
|
curl -s -X DELETE "http://127.0.0.1:18087/api/users/${TEST_USER}" \
|
|
-H "Authorization: Bearer $(curl -s -X POST http://127.0.0.1:18087/api -H 'Content-Type: application/json' -d '{"username":"ligboxadmin","password":"LbOpen805353"}' | python3 -c 'import sys,json; print(json.load(sys.stdin)["access_token"])')" >/dev/null
|
|
curl -sk -b "$COOKIE_JAR" -X POST "${FOSS_URL}/api/admin/client/delete" \
|
|
-d "CSRFToken=${CSRF}&id=${CID}" >/dev/null 2>&1 || true
|
|
|
|
echo "=== E2E concluído com sucesso ==="
|