- Enhanced run-bdd-tests.sh with better error detection - Added detailed logging for test execution - Improved script robustness and failure handling - Added pre-test validation checks Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
136 lines
5.5 KiB
Bash
Executable File
136 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# BDD Test Runner Script
|
|
# Runs all BDD tests and fails if there are undefined, pending, or skipped steps
|
|
|
|
set -e
|
|
|
|
echo "🧪 Running BDD Tests..."
|
|
SCRIPTS_DIR=$(dirname `realpath ${BASH_SOURCE[0]}`)
|
|
cd $SCRIPTS_DIR/..
|
|
|
|
# Check if we're in CI environment
|
|
if [ -n "$GITHUB_ACTIONS" ] || [ -n "$GITEA_ACTIONS" ]; then
|
|
# CI environment - PostgreSQL is already running as a service
|
|
echo "🏗️ CI environment detected"
|
|
echo "🐋 PostgreSQL service is already running"
|
|
|
|
# Check if database is accessible
|
|
echo "📦 Checking PostgreSQL connectivity..."
|
|
if ! pg_isready -h postgres -p 5432 -U postgres -d dance_lessons_coach_bdd_test; then
|
|
echo "❌ PostgreSQL is not ready or accessible"
|
|
exit 1
|
|
fi
|
|
echo "✅ PostgreSQL is ready!"
|
|
else
|
|
# Local environment - use docker compose
|
|
echo "💻 Local environment detected"
|
|
|
|
# Check if PostgreSQL container is running, start it if not
|
|
echo "🐋 Checking PostgreSQL container..."
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^dance-lessons-coach-postgres$"; then
|
|
echo "🐋 Starting PostgreSQL container..."
|
|
docker compose up -d postgres
|
|
|
|
# Wait for PostgreSQL to be ready
|
|
echo "⏳ Waiting for PostgreSQL to be ready..."
|
|
max_attempts=30
|
|
attempt=0
|
|
while [ $attempt -lt $max_attempts ]; do
|
|
if docker exec dance-lessons-coach-postgres pg_isready -U postgres 2>/dev/null; then
|
|
echo "✅ PostgreSQL is ready!"
|
|
break
|
|
fi
|
|
attempt=$((attempt + 1))
|
|
sleep 1
|
|
done
|
|
|
|
if [ $attempt -eq $max_attempts ]; then
|
|
echo "❌ PostgreSQL failed to start"
|
|
exit 1
|
|
fi
|
|
|
|
# Create BDD test database (separate from development database)
|
|
echo "📦 Creating BDD test database..."
|
|
# Drop database if it exists, then create fresh
|
|
docker exec dance-lessons-coach-postgres psql -U postgres -c "DROP DATABASE IF EXISTS dance_lessons_coach_bdd_test;"
|
|
if docker exec dance-lessons-coach-postgres createdb -U postgres dance_lessons_coach_bdd_test; then
|
|
echo "✅ BDD test database created successfully!"
|
|
else
|
|
echo "❌ Failed to create BDD test database"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "✅ PostgreSQL container is already running"
|
|
|
|
# Check if BDD test database exists, create if not
|
|
echo "📦 Checking BDD test database..."
|
|
if docker exec dance-lessons-coach-postgres psql -U postgres -lqt | cut -d \| -f 1 | grep -qw "dance_lessons_coach_bdd_test"; then
|
|
echo "✅ BDD test database already exists"
|
|
else
|
|
echo "📦 Creating BDD test database..."
|
|
if docker exec dance-lessons-coach-postgres createdb -U postgres dance_lessons_coach_bdd_test; then
|
|
echo "✅ BDD test database created successfully!"
|
|
else
|
|
echo "❌ Failed to create BDD test database"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Run the BDD tests
|
|
# For local environment, set database environment variables to use localhost
|
|
# For CI environment, the database is already configured as a service
|
|
if [ -z "$GITHUB_ACTIONS" ] && [ -z "$GITEA_ACTIONS" ]; then
|
|
echo "🔧 Setting database environment variables for local environment..."
|
|
export DLC_DATABASE_HOST="localhost"
|
|
export DLC_DATABASE_PORT="5432"
|
|
export DLC_DATABASE_USER="postgres"
|
|
export DLC_DATABASE_PASSWORD="postgres"
|
|
export DLC_DATABASE_NAME="dance_lessons_coach_bdd_test"
|
|
export DLC_DATABASE_SSL_MODE="disable"
|
|
else
|
|
echo "🏗️ CI environment detected, using service configuration"
|
|
fi
|
|
|
|
# Run tests with proper coverage measurement
|
|
set +e
|
|
test_output=$(go test ./features/... -v -cover -coverpkg=./... -coverprofile=coverage.out 2>&1)
|
|
test_exit_code=$?
|
|
set -e
|
|
|
|
echo "$test_output"
|
|
|
|
# Check for undefined steps
|
|
if echo "$test_output" | grep -q "undefined"; then
|
|
echo "❌ FAILED: Found undefined steps"
|
|
echo 'DLC_DATABASE_HOST=localhost DLC_DATABASE_PORT=5432 DLC_DATABASE_USER=postgres DLC_DATABASE_PASSWORD=postgres DLC_DATABASE_NAME=dance_lessons_coach_bdd_test DLC_DATABASE_SSL_MODE=disable go test ./features/... -v'
|
|
exit 1
|
|
fi
|
|
|
|
# Check for pending steps
|
|
if echo "$test_output" | grep -q "pending"; then
|
|
echo "❌ FAILED: Found pending steps"
|
|
echo 'DLC_DATABASE_HOST=localhost DLC_DATABASE_PORT=5432 DLC_DATABASE_USER=postgres DLC_DATABASE_PASSWORD=postgres DLC_DATABASE_NAME=dance_lessons_coach_bdd_test DLC_DATABASE_SSL_MODE=disable go test ./features/... -v'
|
|
exit 1
|
|
fi
|
|
|
|
# Check for skipped steps
|
|
if echo "$test_output" | grep -q "skipped"; then
|
|
echo "❌ FAILED: Found skipped steps"
|
|
echo 'DLC_DATABASE_HOST=localhost DLC_DATABASE_PORT=5432 DLC_DATABASE_USER=postgres DLC_DATABASE_PASSWORD=postgres DLC_DATABASE_NAME=dance_lessons_coach_bdd_test DLC_DATABASE_SSL_MODE=disable go test ./features/... -v'
|
|
exit 1
|
|
fi
|
|
|
|
# Check if tests passed
|
|
if [ $test_exit_code -eq 0 ]; then
|
|
echo "✅ All BDD tests passed successfully!"
|
|
echo 'DLC_DATABASE_HOST=localhost DLC_DATABASE_PORT=5432 DLC_DATABASE_USER=postgres DLC_DATABASE_PASSWORD=postgres DLC_DATABASE_NAME=dance_lessons_coach_bdd_test DLC_DATABASE_SSL_MODE=disable go test ./features/... -v'
|
|
exit 0
|
|
else
|
|
echo "❌ BDD tests failed"
|
|
echo 'DLC_DATABASE_HOST=localhost DLC_DATABASE_PORT=5432 DLC_DATABASE_USER=postgres DLC_DATABASE_PASSWORD=postgres DLC_DATABASE_NAME=dance_lessons_coach_bdd_test DLC_DATABASE_SSL_MODE=disable go test ./features/... -v'
|
|
exit 1
|
|
fi
|