68 lines
2.8 KiB
Bash
Executable File
68 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# Route smoke test: curl + art test (no browser)
|
||
set -uo pipefail
|
||
cd "$(dirname "$0")/.."
|
||
|
||
FAIL=0; OK=0
|
||
|
||
echo "══════════════════════════════════════"
|
||
echo " Nimuli — Route Smoke Test"
|
||
echo " $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||
echo "══════════════════════════════════════"
|
||
|
||
# ── Run RouteSmokeTest via artisan (no browser, actingAs) ────
|
||
echo ""
|
||
echo "[ PHP ROUTE SMOKE TESTS ]"
|
||
RESULT=$(docker compose exec -T app php artisan test tests/Feature/RouteSmokeTest.php --no-coverage 2>&1)
|
||
echo "$RESULT"
|
||
|
||
if echo "$RESULT" | grep -qE 'FAILED|FAIL|Error'; then
|
||
FAILED_COUNT=$(echo "$RESULT" | grep -cE '✗|FAIL|× ' || true)
|
||
echo "❌ RouteSmokeTest FAILED ($FAILED_COUNT failures)"
|
||
FAIL=$((FAIL+1))
|
||
else
|
||
PASS_COUNT=$(echo "$RESULT" | grep -oE '[0-9]+ passed' | grep -oE '[0-9]+' || echo "?")
|
||
echo "✅ RouteSmokeTest passed ($PASS_COUNT tests)"
|
||
OK=$((OK+1))
|
||
fi
|
||
|
||
# ── Curl check for public / redirects ────────────────────────
|
||
echo ""
|
||
echo "[ CURL PUBLIC ROUTES ]"
|
||
BASE=https://app.nimuli.com
|
||
|
||
for ROUTE in "" "login" "forgot-password"; do
|
||
S=$(curl -sk -o /tmp/b.html -w "%{http_code}" "$BASE/$ROUTE")
|
||
if [[ "$S" =~ ^(200|302|301)$ ]] && ! grep -qE 'Undefined|ErrorException|Whoops|Class.*not found|Target class' /tmp/b.html; then
|
||
echo "✅ /$ROUTE → $S"
|
||
OK=$((OK+1))
|
||
else
|
||
DETAIL=$(grep -oE 'Undefined.{0,60}|ErrorException.{0,60}|Class.*not found.{0,40}' /tmp/b.html | head -1 || true)
|
||
echo "❌ /$ROUTE → $S $DETAIL"
|
||
FAIL=$((FAIL+1))
|
||
fi
|
||
done
|
||
|
||
# ── Bio public route (if slug exists) ────────────────────────
|
||
BIO_SLUG=$(docker compose exec -T mysql mysql -unimuli -pnimuli nimuli -se \
|
||
"SELECT bp.slug FROM bio_pages bp JOIN workspace_members wm ON wm.workspace_id=bp.workspace_id JOIN users u ON u.id=wm.user_id WHERE u.email='nexxo@nimuli.com' AND bp.is_published=1 LIMIT 1" 2>/dev/null | tr -d '[:space:]')
|
||
if [[ -n "$BIO_SLUG" ]]; then
|
||
S=$(curl -sk -o /tmp/b.html -w "%{http_code}" "$BASE/b/$BIO_SLUG")
|
||
if [[ "$S" =~ ^(200|301|302)$ ]] && ! grep -qE 'Undefined|ErrorException|Whoops|Class.*not found' /tmp/b.html; then
|
||
echo "✅ /b/$BIO_SLUG → $S"
|
||
OK=$((OK+1))
|
||
else
|
||
echo "❌ /b/$BIO_SLUG → $S"
|
||
FAIL=$((FAIL+1))
|
||
fi
|
||
else
|
||
echo " — no bio pages in DB"
|
||
fi
|
||
|
||
echo ""
|
||
echo "══════════════════════════════════════"
|
||
echo " OK: $OK FAIL: $FAIL"
|
||
echo "══════════════════════════════════════"
|
||
[ "$FAIL" -gt 0 ] && exit 1
|
||
exit 0
|