Implements automatic creation of required plugin pages (Community Login, Trainer Registration, Trainer Dashboard) upon plugin activation. This addresses E2E test failures caused by missing pages in the test environment. - Adds activation hook in `hvac-community-events.php` to call `hvac_ce_create_required_pages`. - The callback function checks for existing pages by slug and creates them using `wp_insert_post` if missing. Includes debug logging. Also fixes issues identified during E2E test debugging: - Corrects fatal error in `includes/community/class-login-handler.php` by replacing undefined constant `HVAC_COMMUNITY_EVENTS_PATH` with `HVAC_CE_PLUGIN_DIR`. - Updates `tests/e2e/tests/login.spec.ts` to use the correct selector `#wp-submit` for the login form submit button instead of `button[type="submit"]`. Documentation updates: - Adds `docs/automatic-page-creation-plan.md`. - Updates `README.md` regarding automatic page creation. - Updates Memory Bank files (`decisionLog.md`, `progress.md`, `activeContext.md`). Note: Activation hook logging did not appear during WP-CLI activation, requiring further investigation if page creation issues persist. E2E test confirmation pending.
		
			
				
	
	
		
			448 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			448 lines
		
	
	
	
		
			13 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Load environment variables from current directory
 | |
| if [ ! -f .env ]; then
 | |
|     echo "Error: .env file not found in current directory!"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| source .env
 | |
| 
 | |
| # Rest of the original script follows
 | |
| cat <<'EOF' >> /Users/ben/dev/upskill-event-manager/bin/verify-dev-fixed.sh
 | |
| # Colors for output
 | |
| GREEN='\033[0;32m'
 | |
| RED='\033[0;31m'
 | |
| YELLOW='\033[1;33m'
 | |
| BLUE='\033[0;34m'
 | |
| NC='\033[0m'
 | |
| 
 | |
| # Function to check if a command was successful
 | |
| check_status() {
 | |
|     if [ $? -eq 0 ]; then
 | |
|         echo -e "${GREEN}✓ $1${NC}"
 | |
|         return 0
 | |
|     else
 | |
|         echo -e "${RED}✗ $1${NC}"
 | |
|         return 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Function to monitor container logs
 | |
| monitor_container_logs() {
 | |
|     local container=$1
 | |
|     local lines=${2:-50}
 | |
|     local error_patterns=("error" "fatal" "exception" "failed" "warning")
 | |
|     local log_output
 | |
|     
 | |
|     echo -e "\n${BLUE}Analyzing logs for $container container...${NC}"
 | |
|     
 | |
|     # Get recent logs
 | |
|     log_output=$(docker-compose logs --tail="$lines" "$container")
 | |
|     
 | |
|     # Check for errors and warnings
 | |
|     local error_count=0
 | |
|     local warning_count=0
 | |
|     
 | |
|     for pattern in "${error_patterns[@]}"; do
 | |
|         local count
 | |
|         count=$(echo "$log_output" | grep -i "$pattern" | wc -l)
 | |
|         
 | |
|         if [ "$pattern" = "warning" ]; then
 | |
|             warning_count=$((warning_count + count))
 | |
|         else
 | |
|             error_count=$((error_count + count))
 | |
|         fi
 | |
|     done
 | |
|     
 | |
|     # Display log summary
 | |
|     echo "Log Summary:"
 | |
|     echo "- Last $lines lines analyzed"
 | |
|     echo "- Found $error_count errors"
 | |
|     echo "- Found $warning_count warnings"
 | |
|     
 | |
|     # Display recent errors if any
 | |
|     if [ $error_count -gt 0 ]; then
 | |
|         echo -e "\n${RED}Recent Errors:${NC}"
 | |
|         echo "$log_output" | grep -i -E "error|fatal|exception|failed" | tail -n 5
 | |
|     fi
 | |
|     
 | |
|     # Display recent warnings if any
 | |
|     if [ $warning_count -gt 0 ]; then
 | |
|         echo -e "\n${YELLOW}Recent Warnings:${NC}"
 | |
|         echo "$log_output" | grep -i "warning" | tail -n 5
 | |
|     fi
 | |
|     
 | |
|     # Check log disk usage
 | |
|     local log_size
 | |
|     log_size=$(docker-compose exec "$container" du -sh /var/log 2>/dev/null | cut -f1)
 | |
|     echo -e "\nLog directory size: $log_size"
 | |
|     
 | |
|     # Return status based on error count
 | |
|     if [ $error_count -gt 0 ]; then
 | |
|         return 1
 | |
|     fi
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| echo -e "${YELLOW}Starting development environment verification...${NC}"
 | |
| 
 | |
| # Check if containers are running
 | |
| echo "Checking Docker containers..."
 | |
| if ! docker-compose ps | grep -q "wordpress.*Up"; then
 | |
|     echo -e "${RED}WordPress container is not running${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| if ! docker-compose ps | grep -q "db.*Up"; then
 | |
|     echo -e "${RED}Database container is not running${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "Container status check"
 | |
| 
 | |
| # Monitor container logs
 | |
| echo -e "\n${BLUE}Monitoring container logs...${NC}"
 | |
| monitor_container_logs wordpress
 | |
| check_status "WordPress container logs"
 | |
| 
 | |
| monitor_container_logs db
 | |
| check_status "Database container logs"
 | |
| 
 | |
| # Check log rotation configuration
 | |
| echo -e "\nChecking log rotation configuration..."
 | |
| if docker-compose exec wordpress test -f /etc/logrotate.d/wordpress; then
 | |
|     echo -e "${GREEN}✓ WordPress log rotation configured${NC}"
 | |
| else
 | |
|     echo -e "${YELLOW}⚠ WordPress log rotation not configured${NC}"
 | |
| fi
 | |
| 
 | |
| if docker-compose exec db test -f /etc/logrotate.d/mysql; then
 | |
|     echo -e "${GREEN}✓ MySQL log rotation configured${NC}"
 | |
| else
 | |
|     echo -e "${YELLOW}⚠ MySQL log rotation not configured${NC}"
 | |
| fi
 | |
| 
 | |
| # Check database connection
 | |
| echo "Verifying database connection..."
 | |
| if ! docker-compose exec db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" -e "SELECT 1;" > /dev/null 2>&1; then
 | |
|     echo -e "${RED}Database connection failed${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "Database connection"
 | |
| 
 | |
| # Add logrotate configuration for WordPress
 | |
| echo "Configuring log rotation..."
 | |
| docker-compose exec wordpress /bin/bash -c 'cat > /etc/logrotate.d/wordpress << EOF
 | |
| /var/www/html/wp-content/debug.log {
 | |
|     daily
 | |
|     missingok
 | |
|     rotate 7
 | |
|     compress
 | |
|     delaycompress
 | |
|     notifempty
 | |
|     create 0640 www-data www-data
 | |
| }
 | |
| EOF'
 | |
| check_status "WordPress log rotation configuration"
 | |
| 
 | |
| # Add logrotate configuration for MySQL
 | |
| docker-compose exec db /bin/bash -c 'cat > /etc/logrotate.d/mysql << EOF
 | |
| /var/log/mysql/*.log {
 | |
|     daily
 | |
|     rotate 7
 | |
|     missingok
 | |
|     create 0640 mysql mysql
 | |
|     compress
 | |
|     delaycompress
 | |
|     postrotate
 | |
|         /usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
 | |
|     endscript
 | |
| }
 | |
| EOF'
 | |
| check_status "MySQL log rotation configuration"
 | |
| 
 | |
| # Verify WordPress installation
 | |
| echo "Verifying WordPress installation..."
 | |
| if ! docker-compose exec wordpress wp core is-installed --allow-root; then
 | |
|     echo -e "${RED}WordPress is not properly installed${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "WordPress installation"
 | |
| 
 | |
| # Check WordPress version
 | |
| echo "Checking WordPress version..."
 | |
| WP_VERSION=$(docker-compose exec -T wordpress wp core version --allow-root)
 | |
| echo -e "${GREEN}WordPress version: $WP_VERSION${NC}"
 | |
| 
 | |
| # Verify required plugins
 | |
| echo "Checking required plugins..."
 | |
| REQUIRED_PLUGINS=(
 | |
|     "the-events-calendar"
 | |
|     "events-calendar-pro"
 | |
|     "event-tickets"
 | |
|     "event-tickets-plus"
 | |
|     "tribe-community-events"
 | |
| )
 | |
| 
 | |
| for plugin in "${REQUIRED_PLUGINS[@]}"; do
 | |
|     if ! docker-compose exec wordpress wp plugin is-active "$plugin" --allow-root > /dev/null 2>&1; then
 | |
|         echo -e "${RED}Required plugin not active: $plugin${NC}"
 | |
|         exit 1
 | |
|     fi
 | |
|     echo -e "${GREEN}✓ Plugin active: $plugin${NC}"
 | |
| done
 | |
| 
 | |
| # Check site URL configuration
 | |
| echo "Verifying site URLs..."
 | |
| SITE_URL=$(docker-compose exec -T wordpress wp option get siteurl --allow-root)
 | |
| HOME_URL=$(docker-compose exec -T wordpress wp option get home --allow-root)
 | |
| 
 | |
| if [ "$SITE_URL" != "http://localhost:8080" ] || [ "$HOME_URL" != "http://localhost:8080" ]; then
 | |
|     echo -e "${RED}Site URLs are not correctly set${NC}"
 | |
|     echo "Current site URL: $SITE_URL"
 | |
|     echo "Current home URL: $HOME_URL"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "URL configuration"
 | |
| 
 | |
| # Check file permissions
 | |
| echo "Checking file permissions..."
 | |
| docker-compose exec wordpress stat -c "%U:%G" /var/www/html | grep -q "www-data:www-data"
 | |
| check_status "File permissions"
 | |
| 
 | |
| # Test homepage accessibility
 | |
| echo "Testing homepage accessibility..."
 | |
| if ! curl -s -I "http://localhost:8080" | grep -q "200 OK"; then
 | |
|     echo -e "${RED}Homepage is not accessible${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "Homepage accessibility"
 | |
| 
 | |
| # Check debug settings
 | |
| echo "Verifying debug settings..."
 | |
| docker-compose exec wordpress wp config get WP_DEBUG --type=constant | grep -q "true"
 | |
| check_status "WP_DEBUG setting"
 | |
| 
 | |
| echo -e "${GREEN}Development environment verification completed successfully!${NC}"
 | |
| echo -e "${YELLOW}Note: Some functionality may require manual testing:${NC}"
 | |
| echo "1. Log in to WordPress admin (http://localhost:8080/wp-admin)"
 | |
| echo "2. Create a test event"
 | |
| echo "3. Test event registration"
 | |
| echo "4. Verify email functionality"
 | |
| EOF# Colors for output
 | |
| GREEN='\033[0;32m'
 | |
| RED='\033[0;31m'
 | |
| YELLOW='\033[1;33m'
 | |
| BLUE='\033[0;34m'
 | |
| NC='\033[0m'
 | |
| 
 | |
| # Function to check if a command was successful
 | |
| check_status() {
 | |
|     if [ $? -eq 0 ]; then
 | |
|         echo -e "${GREEN}✓ $1${NC}"
 | |
|         return 0
 | |
|     else
 | |
|         echo -e "${RED}✗ $1${NC}"
 | |
|         return 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Function to monitor container logs
 | |
| monitor_container_logs() {
 | |
|     local container=$1
 | |
|     local lines=${2:-50}
 | |
|     local error_patterns=("error" "fatal" "exception" "failed" "warning")
 | |
|     local log_output
 | |
|     
 | |
|     echo -e "\n${BLUE}Analyzing logs for $container container...${NC}"
 | |
|     
 | |
|     # Get recent logs
 | |
|     log_output=$(docker-compose logs --tail="$lines" "$container")
 | |
|     
 | |
|     # Check for errors and warnings
 | |
|     local error_count=0
 | |
|     local warning_count=0
 | |
|     
 | |
|     for pattern in "${error_patterns[@]}"; do
 | |
|         local count
 | |
|         count=$(echo "$log_output" | grep -i "$pattern" | wc -l)
 | |
|         
 | |
|         if [ "$pattern" = "warning" ]; then
 | |
|             warning_count=$((warning_count + count))
 | |
|         else
 | |
|             error_count=$((error_count + count))
 | |
|         fi
 | |
|     done
 | |
|     
 | |
|     # Display log summary
 | |
|     echo "Log Summary:"
 | |
|     echo "- Last $lines lines analyzed"
 | |
|     echo "- Found $error_count errors"
 | |
|     echo "- Found $warning_count warnings"
 | |
|     
 | |
|     # Display recent errors if any
 | |
|     if [ $error_count -gt 0 ]; then
 | |
|         echo -e "\n${RED}Recent Errors:${NC}"
 | |
|         echo "$log_output" | grep -i -E "error|fatal|exception|failed" | tail -n 5
 | |
|     fi
 | |
|     
 | |
|     # Display recent warnings if any
 | |
|     if [ $warning_count -gt 0 ]; then
 | |
|         echo -e "\n${YELLOW}Recent Warnings:${NC}"
 | |
|         echo "$log_output" | grep -i "warning" | tail -n 5
 | |
|     fi
 | |
|     
 | |
|     # Check log disk usage
 | |
|     local log_size
 | |
|     log_size=$(docker-compose exec "$container" du -sh /var/log 2>/dev/null | cut -f1)
 | |
|     echo -e "\nLog directory size: $log_size"
 | |
|     
 | |
|     # Return status based on error count
 | |
|     if [ $error_count -gt 0 ]; then
 | |
|         return 1
 | |
|     fi
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| echo -e "${YELLOW}Starting development environment verification...${NC}"
 | |
| 
 | |
| # Check if containers are running
 | |
| echo "Checking Docker containers..."
 | |
| if ! docker-compose ps | grep -q "wordpress.*Up"; then
 | |
|     echo -e "${RED}WordPress container is not running${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| if ! docker-compose ps | grep -q "db.*Up"; then
 | |
|     echo -e "${RED}Database container is not running${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "Container status check"
 | |
| 
 | |
| # Monitor container logs
 | |
| echo -e "\n${BLUE}Monitoring container logs...${NC}"
 | |
| monitor_container_logs wordpress
 | |
| check_status "WordPress container logs"
 | |
| 
 | |
| monitor_container_logs db
 | |
| check_status "Database container logs"
 | |
| 
 | |
| # Check log rotation configuration
 | |
| echo -e "\nChecking log rotation configuration..."
 | |
| if docker-compose exec wordpress test -f /etc/logrotate.d/wordpress; then
 | |
|     echo -e "${GREEN}✓ WordPress log rotation configured${NC}"
 | |
| else
 | |
|     echo -e "${YELLOW}⚠ WordPress log rotation not configured${NC}"
 | |
| fi
 | |
| 
 | |
| if docker-compose exec db test -f /etc/logrotate.d/mysql; then
 | |
|     echo -e "${GREEN}✓ MySQL log rotation configured${NC}"
 | |
| else
 | |
|     echo -e "${YELLOW}⚠ MySQL log rotation not configured${NC}"
 | |
| fi
 | |
| 
 | |
| # Check database connection
 | |
| echo "Verifying database connection..."
 | |
| if ! docker-compose exec db mysql -u"$DEV_DB_USER" -p"$DEV_DB_PASSWORD" -e "SELECT 1;" > /dev/null 2>&1; then
 | |
|     echo -e "${RED}Database connection failed${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "Database connection"
 | |
| 
 | |
| # Add logrotate configuration for WordPress
 | |
| echo "Configuring log rotation..."
 | |
| docker-compose exec wordpress /bin/bash -c 'cat > /etc/logrotate.d/wordpress << EOF
 | |
| /var/www/html/wp-content/debug.log {
 | |
|     daily
 | |
|     missingok
 | |
|     rotate 7
 | |
|     compress
 | |
|     delaycompress
 | |
|     notifempty
 | |
|     create 0640 www-data www-data
 | |
| }
 | |
| EOF'
 | |
| check_status "WordPress log rotation configuration"
 | |
| 
 | |
| # Add logrotate configuration for MySQL
 | |
| docker-compose exec db /bin/bash -c 'cat > /etc/logrotate.d/mysql << EOF
 | |
| /var/log/mysql/*.log {
 | |
|     daily
 | |
|     rotate 7
 | |
|     missingok
 | |
|     create 0640 mysql mysql
 | |
|     compress
 | |
|     delaycompress
 | |
|     postrotate
 | |
|         /usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
 | |
|     endscript
 | |
| }
 | |
| EOF'
 | |
| check_status "MySQL log rotation configuration"
 | |
| 
 | |
| # Verify WordPress installation
 | |
| echo "Verifying WordPress installation..."
 | |
| if ! docker-compose exec wordpress wp core is-installed --allow-root; then
 | |
|     echo -e "${RED}WordPress is not properly installed${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "WordPress installation"
 | |
| 
 | |
| # Check WordPress version
 | |
| echo "Checking WordPress version..."
 | |
| WP_VERSION=$(docker-compose exec -T wordpress wp core version --allow-root)
 | |
| echo -e "${GREEN}WordPress version: $WP_VERSION${NC}"
 | |
| 
 | |
| # Verify required plugins
 | |
| echo "Checking required plugins..."
 | |
| REQUIRED_PLUGINS=(
 | |
|     "the-events-calendar"
 | |
|     "events-calendar-pro"
 | |
|     "event-tickets"
 | |
|     "event-tickets-plus"
 | |
|     "tribe-community-events"
 | |
| )
 | |
| 
 | |
| for plugin in "${REQUIRED_PLUGINS[@]}"; do
 | |
|     if ! docker-compose exec wordpress wp plugin is-active "$plugin" --allow-root > /dev/null 2>&1; then
 | |
|         echo -e "${RED}Required plugin not active: $plugin${NC}"
 | |
|         exit 1
 | |
|     fi
 | |
|     echo -e "${GREEN}✓ Plugin active: $plugin${NC}"
 | |
| done
 | |
| 
 | |
| # Check site URL configuration
 | |
| echo "Verifying site URLs..."
 | |
| SITE_URL=$(docker-compose exec -T wordpress wp option get siteurl --allow-root)
 | |
| HOME_URL=$(docker-compose exec -T wordpress wp option get home --allow-root)
 | |
| 
 | |
| if [ "$SITE_URL" != "http://localhost:8080" ] || [ "$HOME_URL" != "http://localhost:8080" ]; then
 | |
|     echo -e "${RED}Site URLs are not correctly set${NC}"
 | |
|     echo "Current site URL: $SITE_URL"
 | |
|     echo "Current home URL: $HOME_URL"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "URL configuration"
 | |
| 
 | |
| # Check file permissions
 | |
| echo "Checking file permissions..."
 | |
| docker-compose exec wordpress stat -c "%U:%G" /var/www/html | grep -q "www-data:www-data"
 | |
| check_status "File permissions"
 | |
| 
 | |
| # Test homepage accessibility
 | |
| echo "Testing homepage accessibility..."
 | |
| if ! curl -s -I "http://localhost:8080" | grep -q "200 OK"; then
 | |
|     echo -e "${RED}Homepage is not accessible${NC}"
 | |
|     exit 1
 | |
| fi
 | |
| check_status "Homepage accessibility"
 | |
| 
 | |
| # Check debug settings
 | |
| echo "Verifying debug settings..."
 | |
| docker-compose exec wordpress wp config get WP_DEBUG --type=constant | grep -q "true"
 | |
| check_status "WP_DEBUG setting"
 | |
| 
 | |
| echo -e "${GREEN}Development environment verification completed successfully!${NC}"
 | |
| echo -e "${YELLOW}Note: Some functionality may require manual testing:${NC}"
 | |
| echo "1. Log in to WordPress admin (http://localhost:8080/wp-admin)"
 | |
| echo "2. Create a test event"
 | |
| echo "3. Test event registration"
 | |
| echo "4. Verify email functionality"
 |