# E2E test environment — runs a second instance of the app on port 3553 with # Turnstile disabled so Playwright can log in without the bot challenge. # Shares the postgres + pgdata volume with production so seeded e2e test users # (email pattern *@ped-ai.test) persist across test runs. # # Bring up with: # docker compose -f docker-compose.yml -f docker-compose.e2e.yml up -d pediatric-scribe-e2e # # Tear down with: # docker compose -f docker-compose.yml -f docker-compose.e2e.yml down pediatric-scribe-e2e services: pediatric-scribe-e2e: build: . image: ped-ai-local:latest ports: - "127.0.0.1:3553:3000" env_file: - .env environment: # Disable Turnstile entirely — both server-side verification AND the # client-side widget. Without clearing the SITE_KEY the frontend tries # to initialise the Turnstile iframe against the prod domain and # throws error 110200, which Playwright's pageerror guard correctly # flags as an uncaught exception. TURNSTILE_SECRET_KEY: "" TURNSTILE_SITE_KEY: "" # Disable SMTP so register auto-verifies the user and returns a session SMTP_HOST: "" # Raise the login rate-limit so Playwright multi-worker runs don't # trip the production 10/15min cap. Only affects this e2e container. LOGIN_RATE_LIMIT_MAX: "500" # Also raise the global /api/ limit so multi-spec Playwright runs # that make hundreds of API calls don't burn through the 200/min cap. API_RATE_LIMIT_MAX: "5000" # Allow fetches from the two origins Playwright serves tests from — # the in-network hostname and the host-port loopback. Without this # the CORS middleware (scoped to /api) rejects any non-GET request # because .env's APP_URL points at the production domain. CORS_ORIGINS: "http://pediatric-ai-scribe-e2e:3000,http://host.docker.internal:3553,http://localhost:3553" volumes: - scribe-logs-e2e:/app/data/logs depends_on: postgres: condition: service_healthy container_name: pediatric-ai-scribe-e2e restart: unless-stopped healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/api/health"] interval: 30s timeout: 10s retries: 5 start_period: 20s volumes: scribe-logs-e2e: