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