# E2E Testing Configuration with Workflow Worker # This extends the basic infrastructure with workflow worker service # Adjusted for running from server directory services: # Test-specific PostgreSQL instance postgres: image: ankane/pgvector:latest container_name: ${APP_NAME:-sebastian}_postgres_test environment: POSTGRES_DB: server POSTGRES_USER: postgres POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password secrets: - postgres_password ports: - "5433:5432" networks: - app-network healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d server"] interval: 10s timeout: 5s retries: 5 # Test-specific Redis instance redis-test: build: context: .. dockerfile: redis/Dockerfile container_name: ${APP_NAME:-sebastian}_redis_test environment: REDIS_PASSWORD_FILE: /run/secrets/redis_password secrets: - redis_password ports: - "6380:6379" networks: - app-network healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 10s timeout: 3s retries: 5 # Test setup service (database migrations and seeding) setup-test: build: context: .. dockerfile: setup/Dockerfile args: SERVER_IMAGE_REPO: ${ALGA_SETUP_IMAGE_REPO:-ghcr.io/nine-minds/alga-psa-ce} ALGA_IMAGE_TAG: ${ALGA_IMAGE_TAG:-latest} networks: - app-network environment: # Database configuration - setup script expects DB_HOST to be used for connection DB_TYPE: postgres DB_HOST: postgres DB_PORT: 5432 DB_NAME_SERVER: server DB_USER_SERVER: app_user DB_USER_ADMIN: postgres POSTGRES_USER: postgres # Logging LOG_LEVEL: debug NODE_OPTIONS: --experimental-vm-modules # App info APP_NAME: ${APP_NAME:-sebastian} APP_ENV: test VERSION: e2e-test volumes: - type: bind source: ../secrets/postgres_password target: /run/secrets/postgres_password read_only: true - type: bind source: ../secrets/db_password_server target: /run/secrets/db_password_server read_only: true secrets: - postgres_password - db_password_server entrypoint: ["/opt/setup/entrypoint.sh"] depends_on: postgres: condition: service_healthy # Workflow Worker Service workflow-worker-test: build: context: .. dockerfile: services/workflow-worker/Dockerfile container_name: ${APP_NAME:-sebastian}_workflow_worker_test environment: # Database configuration DB_TYPE: postgres DB_HOST: postgres DB_PORT: 5432 DB_NAME_SERVER: server DB_USER_SERVER: app_user # Redis configuration REDIS_HOST: redis-test REDIS_PORT: 6379 # Workflow worker configuration WORKER_COUNT: 2 POLL_INTERVAL_MS: 500 BATCH_SIZE: 5 MAX_RETRIES: 3 CONCURRENCY_LIMIT: 3 HEALTH_CHECK_INTERVAL_MS: 10000 METRICS_REPORTING_INTERVAL_MS: 30000 # Logging LOG_LEVEL: debug LOG_IS_FORMAT_JSON: false LOG_IS_FULL_DETAILS: true # App info APP_NAME: ${APP_NAME:-sebastian} APP_ENV: test NODE_ENV: test VERSION: e2e-test # Security CRYPTO_SALT_BYTES: 32 CRYPTO_ITERATION: 10000 CRYPTO_KEY_LENGTH: 64 CRYPTO_ALGORITHM: aes-256-gcm TOKEN_EXPIRES: 3600 networks: - app-network volumes: - type: bind source: ../secrets/db_password_server target: /run/secrets/db_password_server read_only: true secrets: - db_password_server - redis_password - crypto_key - token_secret_key depends_on: postgres: condition: service_healthy redis-test: condition: service_healthy setup-test: condition: service_completed_successfully ports: - "4001:3001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s # MailHog for email testing mailhog: image: mailhog/mailhog:latest container_name: ${APP_NAME:-sebastian}_mailhog_test ports: - "1025:1025" # SMTP - "8025:8025" # Web UI networks: - app-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025"] interval: 30s timeout: 10s retries: 3 # WireMock for webhook mocking webhook-mock: image: wiremock/wiremock:latest container_name: ${APP_NAME:-sebastian}_webhook_mock_test ports: - "8080:8080" volumes: - ../test-config/wiremock:/home/wiremock networks: - app-network command: ["--global-response-templating", "--verbose"] healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/__admin/health"] interval: 30s timeout: 10s retries: 3 secrets: postgres_password: file: ../secrets/postgres_password db_password_server: file: ../secrets/db_password_server redis_password: file: ../secrets/redis_password crypto_key: file: ../secrets/crypto_key token_secret_key: file: ../secrets/token_secret_key networks: app-network: name: ${APP_NAME:-sebastian}_app-network-test driver: bridge