# Docker Compose for HVAC Testing Framework # Provides hermetic testing environment with WordPress and dependencies version: '3.8' services: # WordPress Test Instance wordpress-test: image: wordpress:6.4-php8.2-apache container_name: hvac-wordpress-test restart: unless-stopped ports: - "8080:80" environment: WORDPRESS_DB_HOST: mysql-test WORDPRESS_DB_USER: hvac_test_user WORDPRESS_DB_PASSWORD: hvac_test_password WORDPRESS_DB_NAME: hvac_test_db WORDPRESS_DEBUG: 1 WORDPRESS_CONFIG_EXTRA: | define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); define('SCRIPT_DEBUG', true); define('CONCATENATE_SCRIPTS', false); // Test-specific configurations define('HVAC_TEST_MODE', true); define('HVAC_TEST_DATA_ISOLATION', true); volumes: - wordpress_test_data:/var/www/html - ./test-wordpress-config.php:/var/www/html/wp-config-test.php - ../:/var/www/html/wp-content/plugins/hvac-community-events - ./fixtures/uploads:/var/www/html/wp-content/uploads - ./logs:/var/log/wordpress depends_on: mysql-test: condition: service_healthy networks: - hvac-test-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost/wp-admin/install.php"] interval: 30s timeout: 10s retries: 5 start_period: 60s # MySQL Database for Testing mysql-test: image: mysql:8.0 container_name: hvac-mysql-test restart: unless-stopped ports: - "3307:3306" environment: MYSQL_DATABASE: hvac_test_db MYSQL_USER: hvac_test_user MYSQL_PASSWORD: hvac_test_password MYSQL_ROOT_PASSWORD: hvac_root_password MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - mysql_test_data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d - ./mysql-config/test.cnf:/etc/mysql/conf.d/test.cnf networks: - hvac-test-network healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "hvac_test_user", "--password=hvac_test_password"] interval: 10s timeout: 5s retries: 5 start_period: 30s # Redis for Caching (Optional) redis-test: image: redis:7-alpine container_name: hvac-redis-test restart: unless-stopped ports: - "6380:6379" command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: - redis_test_data:/data networks: - hvac-test-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 # PhpMyAdmin for Database Management (Development) phpmyadmin-test: image: phpmyadmin:5 container_name: hvac-phpmyadmin-test restart: unless-stopped ports: - "8081:80" environment: PMA_HOST: mysql-test PMA_PORT: 3306 PMA_USER: hvac_test_user PMA_PASSWORD: hvac_test_password MYSQL_ROOT_PASSWORD: hvac_root_password depends_on: mysql-test: condition: service_healthy networks: - hvac-test-network profiles: - development # Mailhog for Email Testing mailhog-test: image: mailhog/mailhog:v1.0.1 container_name: hvac-mailhog-test restart: unless-stopped ports: - "8025:8025" # Web UI - "1025:1025" # SMTP networks: - hvac-test-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8025/api/v1/messages"] interval: 30s timeout: 10s retries: 3 # WP-CLI Container for Database Operations wp-cli: image: wordpress:cli-2.9-php8.2 container_name: hvac-wp-cli-test volumes: - wordpress_test_data:/var/www/html - ../:/var/www/html/wp-content/plugins/hvac-community-events - ./wp-cli-scripts:/scripts environment: WORDPRESS_DB_HOST: mysql-test WORDPRESS_DB_USER: hvac_test_user WORDPRESS_DB_PASSWORD: hvac_test_password WORDPRESS_DB_NAME: hvac_test_db depends_on: wordpress-test: condition: service_healthy mysql-test: condition: service_healthy networks: - hvac-test-network profiles: - utilities # Playwright Test Runner playwright-tests: build: context: . dockerfile: Dockerfile.playwright container_name: hvac-playwright-tests volumes: - .:/app - ./evidence:/app/evidence - /app/node_modules environment: - TEST_ENVIRONMENT=docker - BASE_URL=http://wordpress-test - HEADLESS=true - CI=true depends_on: wordpress-test: condition: service_healthy networks: - hvac-test-network profiles: - testing volumes: wordpress_test_data: driver: local mysql_test_data: driver: local redis_test_data: driver: local networks: hvac-test-network: driver: bridge ipam: config: - subnet: 172.20.0.0/16