feat: add Playwright e2e smoke test covering signup → household → chore flow
- Added smoke.spec.js with Playwright test for full user flow: 1. Sign up (fill form, submit, click 'Go to Dashboard') 2. Create household (fill name, submit) 3. Create chore (fill name + date, submit) 4. Verify session persistence (revisit dashboard) - Server now supports --db flag for temp databases and SIS_FRESH_DB env to delete the db file on startup (for clean test runs) - Server reads SIS_PORT env var for port configuration - scripts/test-e2e: starts server with fresh db, runs tests, cleans up - playwright.config.js: minimal config pointing at test/e2e/
This commit is contained in:
Executable
+65
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
# Run Playwright end-to-end tests.
|
||||
#
|
||||
# Usage: ./scripts/test-e2e
|
||||
#
|
||||
# Starts the sis-server with a fresh database, runs the smoke test,
|
||||
# then shuts down. Set SIS_URL to test against a running instance:
|
||||
# SIS_URL=http://localhost:8080 ./scripts/test-e2e
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Build the server if needed
|
||||
BIN="./.stack-work/dist/x86_64-linux/ghc-9.10.3/build/sis-server/sis-server"
|
||||
if [ ! -f "$BIN" ]; then
|
||||
echo "[test-e2e] building server..."
|
||||
./hs stack build --fast
|
||||
fi
|
||||
|
||||
echo "[test-e2e] running Playwright tests..."
|
||||
|
||||
if [ -n "${SIS_URL:-}" ]; then
|
||||
npx playwright test --config=playwright.config.js "$@"
|
||||
else
|
||||
DB_PATH="/tmp/sis-test-$$.db"
|
||||
PORT=8081
|
||||
|
||||
# Kill anything already on our test port
|
||||
if lsof -ti:"$PORT" > /dev/null 2>&1; then
|
||||
echo "[test-e2e] killing existing process on port $PORT..."
|
||||
kill "$(lsof -ti:"$PORT")" 2>/dev/null || true
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
# Remove stale db
|
||||
rm -f "$DB_PATH"
|
||||
|
||||
# Clean up on exit
|
||||
cleanup() {
|
||||
rm -f "$DB_PATH"
|
||||
if [ -n "${SERVER_PID:-}" ]; then
|
||||
kill "$SERVER_PID" 2>/dev/null
|
||||
wait "$SERVER_PID" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "[test-e2e] starting server on port $PORT with fresh db..."
|
||||
SIS_FRESH_DB=1 SIS_PORT="$PORT" "$BIN" --db "$DB_PATH" &
|
||||
SERVER_PID=$!
|
||||
|
||||
# Wait for server to be ready
|
||||
echo "[test-e2e] waiting for server..."
|
||||
for i in $(seq 1 30); do
|
||||
if curl -sf http://localhost:$PORT/signup > /dev/null 2>&1; then
|
||||
echo "[test-e2e] server ready"
|
||||
break
|
||||
fi
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
# Run tests
|
||||
SIS_URL="http://localhost:$PORT" npx playwright test --config=playwright.config.js "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user