#!/bin/bash # Docker-based test database setup for DBIS Core Lite set -e echo "🐳 DBIS Core Lite - Docker Test Database Setup" echo "==============================================" echo "" # Colors GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color # Check if Docker is available if ! command -v docker &> /dev/null; then echo -e "${RED}❌ Docker is not installed${NC}" echo " Please install Docker or use manual PostgreSQL setup" exit 1 fi echo -e "${GREEN}✅ Docker found${NC}" echo "" # Check if docker-compose is available if command -v docker-compose &> /dev/null; then COMPOSE_CMD="docker-compose" elif docker compose version &> /dev/null; then COMPOSE_CMD="docker compose" else echo -e "${RED}❌ Docker Compose is not available${NC}" exit 1 fi echo -e "${GREEN}✅ Docker Compose found${NC}" echo "" # Start PostgreSQL container echo "🚀 Starting PostgreSQL container..." $COMPOSE_CMD -f docker-compose.test.yml up -d postgres-test echo "" echo "⏳ Waiting for PostgreSQL to be ready..." sleep 5 # Wait for PostgreSQL to be healthy MAX_WAIT=30 WAITED=0 while [ $WAITED -lt $MAX_WAIT ]; do if docker exec dbis_core_test_db pg_isready -U postgres > /dev/null 2>&1; then echo -e "${GREEN}✅ PostgreSQL is ready${NC}" break fi echo -n "." sleep 1 WAITED=$((WAITED + 1)) done if [ $WAITED -ge $MAX_WAIT ]; then echo -e "${RED}❌ PostgreSQL did not become ready in time${NC}" exit 1 fi echo "" # Create test database echo "📦 Creating test database..." docker exec dbis_core_test_db psql -U postgres -c "CREATE DATABASE dbis_core_test;" 2>/dev/null || { echo -e "${YELLOW}⚠️ Database may already exist${NC}" } echo -e "${GREEN}✅ Test database created${NC}" echo "" # Apply schema echo "📋 Applying database schema..." docker exec -i dbis_core_test_db psql -U postgres -d dbis_core_test < src/database/schema.sql > /dev/null 2>&1 echo -e "${GREEN}✅ Schema applied${NC}" echo "" # Update .env.test with Docker connection TEST_DB_URL="postgresql://postgres:postgres@localhost:5434/dbis_core_test" echo "📝 Updating .env.test with Docker connection..." cat > .env.test << EOF # Test Database Configuration (Docker) TEST_DATABASE_URL=${TEST_DB_URL} # Test Environment Variables NODE_ENV=test JWT_SECRET=test-secret-key-for-testing-only EOF echo -e "${GREEN}✅ .env.test updated${NC}" echo "" # Run migrations (if any) echo "🔄 Running database migrations..." export TEST_DATABASE_URL="${TEST_DB_URL}" export DATABASE_URL="${TEST_DB_URL}" if npm run migrate > /dev/null 2>&1; then echo -e "${GREEN}✅ Migrations completed${NC}" else echo -e "${YELLOW}⚠️ Migrations completed (or none needed)${NC}" fi echo "" # Verify tables echo "🔍 Verifying database schema..." TABLE_COUNT=$(docker exec dbis_core_test_db psql -U postgres -d dbis_core_test -t -c "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';" 2>/dev/null | tr -d ' ') if [ -n "$TABLE_COUNT" ] && [ "$TABLE_COUNT" -gt "0" ]; then echo -e "${GREEN}✅ Database schema verified (${TABLE_COUNT} tables)${NC}" else echo -e "${YELLOW}⚠️ No tables found - please check schema${NC}" fi echo "" echo -e "${GREEN}✅ Docker test database setup complete!${NC}" echo "" echo "📋 Connection Details:" echo " Host: localhost" echo " Port: 5434" echo " Database: dbis_core_test" echo " User: postgres" echo " Password: postgres" echo "" echo "🚀 Next steps:" echo " 1. Run tests: npm test" echo " 2. Stop container: $COMPOSE_CMD -f docker-compose.test.yml down" echo " 3. Start container: $COMPOSE_CMD -f docker-compose.test.yml up -d" echo ""