version: '3.8' services: # PostgreSQL for testing postgres: image: postgres:15-alpine environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: referral_test ports: - "5433:5432" volumes: - postgres_test_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 # Redis for testing redis: image: redis:7-alpine ports: - "6380:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 5 # Kafka for testing (using Redpanda for simplicity) redpanda: image: redpandadata/redpanda:latest command: - redpanda - start - --smp 1 - --memory 512M - --reserve-memory 0M - --overprovisioned - --node-id 0 - --kafka-addr PLAINTEXT://0.0.0.0:29092,OUTSIDE://0.0.0.0:9093 - --advertise-kafka-addr PLAINTEXT://redpanda:29092,OUTSIDE://localhost:9093 ports: - "9093:9093" - "29092:29092" healthcheck: test: ["CMD", "rpk", "cluster", "health"] interval: 10s timeout: 5s retries: 5 # Test runner service test: build: context: . dockerfile: Dockerfile.test depends_on: postgres: condition: service_healthy redis: condition: service_healthy redpanda: condition: service_healthy environment: NODE_ENV: test DATABASE_URL: postgresql://postgres:postgres@postgres:5432/referral_test?schema=public REDIS_HOST: redis REDIS_PORT: 6379 KAFKA_BROKERS: redpanda:29092 JWT_SECRET: test-jwt-secret-for-docker-tests volumes: - ./coverage:/app/coverage command: sh -c "npx prisma migrate deploy && npm run test:cov" volumes: postgres_test_data: