upskill-event-manager/wordpress-dev/bin/verify-dev-fixed.sh
bengizmo 37f7b426b6 feat: Implement auto page creation & fix login E2E tests
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.
2025-03-28 17:18:21 -03:00

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"