File size: 5,498 Bytes
9853396 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | #!/bin/bash
# One-command E2E test script
# Handles backend startup, test execution, and cleanup
set -e
echo "๐ Starting E2E Test Suite..."
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
FRONTEND_DIR="$PROJECT_ROOT/frontend"
# Prioritize environment variables from migration tests, fallback to command line args
DB_TYPE="${AXONHUB_E2E_DB_TYPE:-$DB_TYPE}"
# Parse command line arguments only if DB_TYPE not set via environment
if [[ -z "$DB_TYPE" ]]; then
DB_TYPE="sqlite"
fi
# Parse command line arguments
KEEP_DB="${AXONHUB_E2E_KEEP_DB:-false}"
ARGS=()
while [[ $# -gt 0 ]]; do
case $1 in
-d|--db-type)
if [[ -z "$AXONHUB_E2E_DB_TYPE" ]]; then
# Only override if not set via environment variable
DB_TYPE="$2"
fi
shift 2
;;
--keep-db)
if [[ -z "$AXONHUB_E2E_KEEP_DB" ]]; then
# Only override if not set via environment variable
KEEP_DB=true
fi
shift
;;
--help)
echo "Usage: $0 [OPTIONS] [PLAYWRIGHT_ARGS...]"
echo ""
echo "Options:"
echo " -d, --db-type TYPE Database type: sqlite, mysql, postgres (default: sqlite)"
echo " Can also be set via AXONHUB_E2E_DB_TYPE environment variable"
echo " --keep-db Keep database after tests complete (don't cleanup)"
echo " Can also be set via AXONHUB_E2E_KEEP_DB environment variable"
echo " --help Show this help message"
echo ""
echo "Environment Variables:"
echo " AXONHUB_E2E_DB_TYPE Database type (takes precedence over --db-type)"
echo " AXONHUB_E2E_DB_DSN Database DSN for MySQL/PostgreSQL"
echo " AXONHUB_E2E_USE_EXISTING_DB Use existing database (don't create new)"
echo " AXONHUB_E2E_KEEP_DB Keep database after tests (takes precedence over --keep-db)"
echo ""
echo "Examples:"
echo " $0 # Run tests with sqlite"
echo " $0 -d mysql # Run tests with MySQL"
echo " $0 --keep-db # Run tests and keep database"
echo " AXONHUB_E2E_DB_TYPE=mysql $0 # Set via environment variable"
echo " AXONHUB_E2E_KEEP_DB=true $0 # Keep database via environment variable"
exit 0
;;
*)
ARGS+=("$1")
shift
;;
esac
done
# Validate database type
case "$DB_TYPE" in
sqlite|mysql|postgres)
;;
*)
echo "โ Invalid database type: $DB_TYPE"
echo "Supported types: sqlite, mysql, postgres"
exit 1
;;
esac
# Function to cleanup on exit
cleanup() {
echo ""
echo "๐งน Cleaning up..."
cd "$PROJECT_ROOT"
if [ "$KEEP_DB" = true ]; then
echo "๐พ Keeping database (--keep-db flag set)"
# Only stop the server, don't cleanup database
./scripts/e2e/e2e-backend.sh stop > /dev/null 2>&1 || true
else
echo "๐๏ธ Removing database and stopping server..."
./scripts/e2e/e2e-backend.sh stop > /dev/null 2>&1 || true
fi
}
# Register cleanup function
trap cleanup EXIT
# Start backend server
echo "๐ฆ Starting E2E backend server..."
echo "๐๏ธ Database type: $DB_TYPE"
cd "$PROJECT_ROOT"
# Clean up any existing database type configuration
rm -f ./scripts/e2e/.e2e-backend-db-type
# Pass environment variables to backend script
export AXONHUB_E2E_DB_TYPE="$DB_TYPE"
export AXONHUB_E2E_DB_DSN="${AXONHUB_E2E_DB_DSN:-}"
export AXONHUB_E2E_DB_DIALECT="${AXONHUB_E2E_DB_DIALECT:-}"
export AXONHUB_E2E_USE_EXISTING_DB="${AXONHUB_E2E_USE_EXISTING_DB:-false}"
export AXONHUB_E2E_KEEP_DB="$KEEP_DB"
# Start backend with specified database type
./scripts/e2e/e2e-backend.sh start
if [ $? -ne 0 ]; then
echo "โ Failed to start E2E backend server"
exit 1
fi
echo ""
echo "โ
Backend server ready"
echo ""
# Run Playwright tests
cd "$FRONTEND_DIR"
echo "๐งช Running Playwright tests..."
echo ""
# Pass remaining arguments to playwright
pnpm playwright test "${ARGS[@]}"
TEST_EXIT_CODE=$?
echo ""
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo "โ
All tests passed!"
if [ "$KEEP_DB" = true ]; then
echo "๐พ Database preserved (--keep-db flag)"
echo "๐ Database location:"
case "$DB_TYPE" in
sqlite)
echo " SQLite: ./scripts/e2e/axonhub-e2e.db"
;;
mysql)
echo " MySQL container: axonhub-e2e-mysql (port 13306)"
;;
postgres)
echo " PostgreSQL container: axonhub-e2e-postgres (port 15432)"
;;
esac
fi
else
echo "โ Some tests failed (exit code: $TEST_EXIT_CODE)"
if [ "$KEEP_DB" = true ]; then
echo "๐พ Database preserved for debugging (--keep-db flag)"
echo "๐ Database location:"
case "$DB_TYPE" in
sqlite)
echo " SQLite: ./scripts/e2e/axonhub-e2e.db"
;;
mysql)
echo " MySQL container: axonhub-e2e-mysql (port 13306)"
;;
postgres)
echo " PostgreSQL container: axonhub-e2e-postgres (port 15432)"
;;
esac
else
echo ""
echo "๐ก Tips:"
echo " - View report: pnpm test:e2e:report"
echo " - Check backend logs: cat ../scripts/e2e/e2e-backend.log"
echo " - Inspect database: sqlite3 ../scripts/e2e/axonhub-e2e.db"
fi
fi
exit $TEST_EXIT_CODE
|