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

115 lines
3.0 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
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..."
cd "$(dirname "$0")/../.." # Go to iam-service directory
if ! pnpm 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 npm test -- --testPathPattern="integration" --testTimeout=60000 --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