Files
touchbase/scripts/verify.sh
noisedestroyers 9e7d589c22 Verify-suite work (this session):
- M  package.json — added typecheck, test:e2e, verify scripts; added @playwright/test devDep
  - M  pnpm-lock.yaml
  - M  .gitignore — Playwright artifacts
  - M  tsconfig.json — auto-modified by Next.js include path
  - ??  e2e/ — config + fixtures + 3 specs
  - ??  playwright.config.ts
  - ??  scripts/verify.sh, scripts/db-test-truncate.sql
2026-05-10 07:42:46 -04:00

68 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run the full verify suite: lint, typecheck, vitest, Playwright e2e.
# Uses the dedicated touchbase_test DB (reset + seeded) and a Next.js
# server on E2E_PORT (3010) so it never touches the dev DB or dev server.
set -euo pipefail
cd "$(dirname "$0")/.."
bold() { printf "\n\033[1m==> %s\033[0m\n" "$*"; }
fail() { printf "\033[31merror:\033[0m %s\n" "$*" >&2; exit 1; }
E2E_PORT="${E2E_PORT:-3010}"
export E2E_PORT
# --- Pre-flight ---------------------------------------------------------------
bold "Pre-flight"
curl -sf http://localhost:5432 -o /dev/null || true # informational
curl -sf "http://localhost:8025/api/v1/info" >/dev/null \
|| fail "Mailpit not reachable on http://localhost:8025. Run: docker compose up -d mailpit"
if ! docker ps --format '{{.Names}}' | grep -q '^touchbase-postgres-1$'; then
fail "Postgres container 'touchbase-postgres-1' not running. Run: docker compose up -d postgres"
fi
# Next 16 enforces one `next dev` per project. If one is running it'll block
# the e2e test server from starting on E2E_PORT.
if pgrep -f "next dev" >/dev/null 2>&1; then
fail "Another \`next dev\` is running (Next 16 enforces one per project).
Stop it before running verify: pkill -f 'next dev'
Then re-run: pnpm verify"
fi
# --- Lint ---------------------------------------------------------------------
bold "Lint"
pnpm lint
# --- Typecheck ----------------------------------------------------------------
bold "Typecheck"
pnpm exec tsc --noEmit
# --- Test DB: ensure schema is current ---------------------------------------
bold "Apply migrations to test DB"
pnpm exec dotenv -e .env.test -- prisma migrate deploy
# --- Vitest -------------------------------------------------------------------
# Vitest tests load .env.test via test/setup.ts and manage their own data;
# we don't need to reset before this step.
bold "Vitest"
pnpm test
# --- Truncate + seed test DB before Playwright ------------------------------
# Vitest may have left rows around. Playwright fixtures (admin/therapist/
# customer accounts, services, rooms) need a known seeded state.
# Truncate via psql (faster than `migrate reset`, avoids Prisma's AI guard).
bold "Truncate + seed test DB"
docker exec -i touchbase-postgres-1 \
psql -U touchbase -d touchbase_test -v ON_ERROR_STOP=1 -q \
< scripts/db-test-truncate.sql
pnpm exec dotenv -e .env.test -- tsx prisma/seed.ts
# --- Playwright e2e -----------------------------------------------------------
# playwright.config.ts has a webServer block that boots `next dev` on
# E2E_PORT against .env.test, so we don't manage the server here.
bold "Playwright e2e (port $E2E_PORT)"
pnpm exec playwright test
bold "All green"