Specs stay at repo root (cross-VM). Move deploy and code into logical projects with README per domain, updated manifest.yaml, and symlinks at legacy paths for VM122 backward compatibility.
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 ==="
|