- Add missing JWT secret rotation step definitions - Implement JWT retention policy step implementations - Fix step pattern matching for Godog compatibility - Add proper godog.ErrPending for unimplemented steps - Resolve argument mismatch in step definitions Reduces undefined steps by 98% (52 → 1) All JWT secret rotation scenarios now have step definitions Remaining undefined step is response validation pattern issue
134 lines
5.5 KiB
Bash
Executable File
134 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
|
|
test_output=$(go test ./features/... -v -cover -coverpkg=./... -coverprofile=coverage.out 2>&1)
|
|
test_exit_code=$?
|
|
|
|
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
|