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
This commit is contained in:
22
scripts/db-test-truncate.sql
Normal file
22
scripts/db-test-truncate.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
-- Truncate all Prisma-managed application tables in touchbase_test.
|
||||
-- Used by `pnpm verify` to give Playwright a clean fixture-only DB state
|
||||
-- without triggering Prisma's AI-invocation guard on `migrate reset`.
|
||||
-- pg-boss tables (schema "pgboss") are intentionally left alone.
|
||||
TRUNCATE TABLE
|
||||
"AuditLog",
|
||||
"Notification",
|
||||
"Payment",
|
||||
"Booking",
|
||||
"AvailabilityOverride",
|
||||
"WorkingHours",
|
||||
"ServiceTherapist",
|
||||
"Service",
|
||||
"RoomBlock",
|
||||
"RoomTag",
|
||||
"Room",
|
||||
"TherapistTag",
|
||||
"Therapist",
|
||||
"Customer",
|
||||
"VerificationToken",
|
||||
"User"
|
||||
RESTART IDENTITY CASCADE;
|
||||
67
scripts/verify.sh
Executable file
67
scripts/verify.sh
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user