version: '3.8'

services:
  # Mock GitHub API server for controlled testing
  mock-github:
    image: pulse-mock-github:test
    container_name: pulse-mock-github
    ports:
      - "8080:8080"
    environment:
      - PORT=8080
      - MOCK_BASE_URL=http://mock-github:8080
      # Control test scenarios via environment variables
      - MOCK_CHECKSUM_ERROR=${MOCK_CHECKSUM_ERROR:-false}
      - MOCK_NETWORK_ERROR=${MOCK_NETWORK_ERROR:-false}
      - MOCK_RATE_LIMIT=${MOCK_RATE_LIMIT:-false}
      - MOCK_STALE_RELEASE=${MOCK_STALE_RELEASE:-false}
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"]
      interval: 5s
      timeout: 3s
      retries: 3
      start_period: 5s
    networks:
      - test-network

  # Pulse server under test
  pulse-test:
    image: pulse:test
    container_name: pulse-test-server
    ports:
      - "7655:7655"
    environment:
      - TZ=UTC
      # Point to mock GitHub server
      - PULSE_UPDATE_SERVER=http://mock-github:8080
      # Use /data which is already owned by pulse user via entrypoint
      - PULSE_DATA_DIR=/data
      # Enable debug logging
      - PULSE_LOG_LEVEL=debug
      # Mock mode for faster testing
      - PULSE_MOCK_MODE=true
      - PULSE_ALLOW_DOCKER_UPDATES=true
      - PULSE_UPDATE_STAGE_DELAY_MS=250
      # Pre-configure authentication to bypass first-run setup
      - PULSE_AUTH_USER=admin
      - PULSE_AUTH_PASS=admin
    volumes:
      - test-data:/data
    depends_on:
      mock-github:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:7655/api/health"]
      interval: 5s
      timeout: 3s
      retries: 5
      start_period: 10s
    networks:
      - test-network

volumes:
  test-data:
    driver: local

networks:
  test-network:
    driver: bridge
