#!/usr/bin/env bash
# scripts/test.sh —— 合并到默认分支（main / master）前的测试闸门。
# 顺序：setup-db → build → lint → unit+integration → e2e → reset-db
# 由 .githooks/pre-push 和 test-gate skill（通过子会话）调用。

set -euo pipefail

PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$PROJECT_ROOT"

# 加载 .env.local（DB_HOST/DB_PORT/JWT_SECRET 等），让 mvn / setup-test-db.sh 都能读到
if [ -f .env.local ]; then
  set -a; . ./.env.local; set +a
fi

echo "[test.sh] 1/6 setup test db"
./scripts/setup-test-db.sh

echo "[test.sh] 2/6 build"
(cd backend && mvn -B -DskipTests clean package)
if [ -d frontend ]; then
  (cd frontend && npm ci && npm run build)
else
  echo "[test.sh] skip frontend build (frontend/ not initialized yet)"
fi

echo "[test.sh] 3/6 lint"
if [ -d frontend ]; then
  (cd frontend && npm run lint)
else
  echo "[test.sh] skip frontend lint (frontend/ not initialized yet)"
fi

echo "[test.sh] 4/6 unit + integration"
(cd backend && mvn -B test)
if [ -d frontend ]; then
  (cd frontend && npm test -- --run)
else
  echo "[test.sh] skip frontend unit tests (frontend/ not initialized yet)"
fi

echo "[test.sh] 5/6 E2E"
echo "[test.sh] e2e 略"

echo "[test.sh] 6/6 reset test db"
./scripts/setup-test-db.sh

echo "[test.sh] GREEN"
