Files
spiceflow/script/test

84 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# Test script - runs backend, frontend, and e2e tests
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
BACKEND_PID=""
FRONTEND_PID=""
TEST_EXIT_CODE=0
cleanup() {
echo -e "\n${YELLOW}Cleaning up...${NC}"
if [ -n "$FRONTEND_PID" ]; then
kill $FRONTEND_PID 2>/dev/null || true
wait $FRONTEND_PID 2>/dev/null || true
fi
if [ -n "$BACKEND_PID" ]; then
kill $BACKEND_PID 2>/dev/null || true
wait $BACKEND_PID 2>/dev/null || true
fi
# Remove test database
rm -f "$ROOT_DIR/server/test-e2e.db"
exit $TEST_EXIT_CODE
}
trap cleanup SIGINT SIGTERM EXIT
echo -e "${BLUE}=== Starting Spiceflow Test Environment ===${NC}\n"
# Clean up old test database
rm -f "$ROOT_DIR/server/test-e2e.db"
# Use different ports for e2e tests (matching playwright.config.ts)
E2E_BACKEND_PORT=3001
E2E_FRONTEND_PORT=5174
# Start backend with test database
echo -e "${GREEN}Starting backend server with test database...${NC}"
cd "$ROOT_DIR/server"
SPICEFLOW_DB="test-e2e.db" SPICEFLOW_PORT=$E2E_BACKEND_PORT clj -M:run &
BACKEND_PID=$!
# Wait for backend to be ready
echo -e "${YELLOW}Waiting for backend...${NC}"
until curl -s http://localhost:$E2E_BACKEND_PORT/api/health > /dev/null 2>&1; do
sleep 1
done
echo -e "${GREEN}Backend ready on http://localhost:$E2E_BACKEND_PORT${NC}"
# Start frontend
echo -e "${GREEN}Starting frontend server...${NC}"
cd "$ROOT_DIR/client"
VITE_API_URL="http://localhost:$E2E_BACKEND_PORT" npm run dev -- --port $E2E_FRONTEND_PORT &
FRONTEND_PID=$!
# Wait for frontend to be ready
echo -e "${YELLOW}Waiting for frontend...${NC}"
until curl -sk https://localhost:$E2E_FRONTEND_PORT > /dev/null 2>&1; do
sleep 1
done
echo -e "${GREEN}Frontend ready on https://localhost:$E2E_FRONTEND_PORT${NC}\n"
# Run e2e tests
echo -e "${BLUE}=== Running E2E Tests ===${NC}\n"
cd "$ROOT_DIR/e2e"
# Run playwright tests (skip global setup/teardown since we manage servers ourselves)
if SKIP_SERVER_SETUP=1 npx playwright test "$@"; then
echo -e "\n${GREEN}=== All tests passed ===${NC}"
TEST_EXIT_CODE=0
else
echo -e "\n${RED}=== Some tests failed ===${NC}"
TEST_EXIT_CODE=1
fi