Files
pos-system/services/iam-service/scripts/test-integration.sh

122 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# Integration Test Runner for IAM Service
# This script sets up test infrastructure and runs integration tests
set -e
echo "🚀 Starting IAM Service Integration Tests"
echo "========================================="
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
print_error "Docker is not running. Please start Docker first."
exit 1
fi
# Set test environment variables
export TEST_DATABASE_URL="postgresql://test:test@localhost:5433/test_iam_db"
export TEST_REDIS_URL="redis://localhost:6380"
export NODE_ENV="test"
export LOG_LEVEL="error" # Reduce log noise during tests
# Export DATABASE_URL for Prisma
export DATABASE_URL=$TEST_DATABASE_URL
print_status "Setting up test infrastructure..."
# Start test database containers
print_status "Starting PostgreSQL and Redis test containers..."
docker compose -f docker-compose.test.yml up -d
# Wait for databases to be ready
print_status "Waiting for PostgreSQL to be ready..."
timeout=60
counter=0
while ! docker exec postgres-test-iam pg_isready -U test -d test_iam_db >/dev/null 2>&1; do
if [ $counter -gt $timeout ]; then
print_error "PostgreSQL failed to start within ${timeout} seconds"
docker compose -f docker-compose.test.yml logs postgres-test
exit 1
fi
counter=$((counter + 1))
sleep 1
done
print_status "Waiting for Redis to be ready..."
counter=0
while ! docker exec redis-test-iam redis-cli ping >/dev/null 2>&1; do
if [ $counter -gt $timeout ]; then
print_error "Redis failed to start within ${timeout} seconds"
docker compose -f docker-compose.test.yml logs redis-test
exit 1
fi
counter=$((counter + 1))
sleep 1
done
print_success "Test infrastructure is ready!"
# Run database migrations
print_status "Running database migrations..."
# Assuming script is run from services/iam-service root if invoked via pnpm
# If invoked directly, we might need adjustment. But existing script does cd relative to script path.
# Let's keep existing cd logic but verify path.
SERVICE_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$SERVICE_ROOT"
if ! npx prisma migrate deploy --schema=prisma/schema.prisma; then
print_error "Database migration failed"
exit 1
fi
# Seed test data (optional - comment out if not needed)
# print_status "Seeding test data..."
# if ! pnpm prisma db seed; then
# print_warning "Test data seeding failed, but continuing..."
# fi
# Run integration tests
print_status "Running integration tests..."
if npx jest -c jest.integration.config.ts --runInBand --verbose; then
print_success "Integration tests passed!"
TEST_RESULT=0
else
print_error "Integration tests failed!"
TEST_RESULT=1
fi
# Cleanup
print_status "Cleaning up test infrastructure..."
docker compose -f docker-compose.test.yml down -v
if [ $TEST_RESULT -eq 0 ]; then
print_success "All integration tests completed successfully! 🎉"
exit 0
else
print_error "Integration tests failed! ❌"
exit 1
fi