Some checks are pending
		
		
	
	HVAC Plugin CI/CD Pipeline / Security Analysis (push) Waiting to run
				
			HVAC Plugin CI/CD Pipeline / Code Quality & Standards (push) Waiting to run
				
			HVAC Plugin CI/CD Pipeline / Unit Tests (push) Waiting to run
				
			HVAC Plugin CI/CD Pipeline / Integration Tests (push) Waiting to run
				
			HVAC Plugin CI/CD Pipeline / Deploy to Staging (push) Blocked by required conditions
				
			HVAC Plugin CI/CD Pipeline / Deploy to Production (push) Blocked by required conditions
				
			HVAC Plugin CI/CD Pipeline / Notification (push) Blocked by required conditions
				
			Security Monitoring & Compliance / Dependency Vulnerability Scan (push) Waiting to run
				
			Security Monitoring & Compliance / Secrets & Credential Scan (push) Waiting to run
				
			Security Monitoring & Compliance / WordPress Security Analysis (push) Waiting to run
				
			Security Monitoring & Compliance / Static Code Security Analysis (push) Waiting to run
				
			Security Monitoring & Compliance / Security Compliance Validation (push) Waiting to run
				
			Security Monitoring & Compliance / Security Summary Report (push) Blocked by required conditions
				
			Security Monitoring & Compliance / Security Team Notification (push) Blocked by required conditions
				
			- Add 90+ test files including E2E, unit, and integration tests - Implement Page Object Model (POM) architecture - Add Docker testing environment with comprehensive services - Include modernized test framework with error recovery - Add specialized test suites for master trainer and trainer workflows - Update .gitignore to properly track test infrastructure 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			178 lines
		
	
	
		
			No EOL
		
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			No EOL
		
	
	
		
			6.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | ||
|  * Global Test Setup for HVAC Testing Framework
 | ||
|  * 
 | ||
|  * Runs once before all tests to:
 | ||
|  * - Initialize test environment
 | ||
|  * - Pre-generate authentication states
 | ||
|  * - Set up WordPress environment
 | ||
|  * - Verify system health
 | ||
|  * 
 | ||
|  * @package HVAC_Community_Events
 | ||
|  * @version 2.0.0
 | ||
|  * @created 2025-08-27
 | ||
|  */
 | ||
| 
 | ||
| const { chromium } = require('playwright');
 | ||
| const ConfigManager = require('../core/ConfigManager');
 | ||
| const AuthManager = require('../core/AuthManager');
 | ||
| const WordPressUtils = require('../utils/WordPressUtils');
 | ||
| const fs = require('fs').promises;
 | ||
| const path = require('path');
 | ||
| 
 | ||
| async function globalSetup(config) {
 | ||
|     console.log('\n🚀 HVAC Testing Framework - Global Setup');
 | ||
|     console.log('='.repeat(50));
 | ||
|     
 | ||
|     const startTime = Date.now();
 | ||
|     const configManager = ConfigManager;
 | ||
|     const authManager = AuthManager;
 | ||
|     const wpUtils = new WordPressUtils();
 | ||
|     
 | ||
|     try {
 | ||
|         // 1. Environment Validation
 | ||
|         console.log('\n📋 1. Validating Environment Configuration');
 | ||
|         
 | ||
|         const environment = configManager.getEnvironment();
 | ||
|         console.log(`   Environment: ${environment}`);
 | ||
|         console.log(`   Base URL: ${configManager.get('app.baseUrl')}`);
 | ||
|         
 | ||
|         // Validate configuration
 | ||
|         configManager.validate();
 | ||
|         console.log('   ✅ Configuration valid');
 | ||
|         
 | ||
|         // 2. WordPress Health Check
 | ||
|         console.log('\n🏥 2. WordPress Health Check');
 | ||
|         
 | ||
|         try {
 | ||
|             const health = await wpUtils.checkHealth();
 | ||
|             console.log('   WordPress Version:', health.wpVersion);
 | ||
|             console.log('   HVAC Plugin Active:', health.pluginsActive ? '✅' : '❌');
 | ||
|             console.log('   Database Connected:', health.databaseConnected ? '✅' : '❌');
 | ||
|             
 | ||
|             if (!health.pluginsActive) {
 | ||
|                 console.warn('   ⚠️ HVAC plugin not active - some tests may fail');
 | ||
|             }
 | ||
|         } catch (error) {
 | ||
|             console.warn('   ⚠️ WordPress health check failed:', error.message);
 | ||
|         }
 | ||
|         
 | ||
|         // 3. Create Test Results Directories
 | ||
|         console.log('\n📁 3. Setting Up Test Directories');
 | ||
|         
 | ||
|         const directories = [
 | ||
|             configManager.get('media.screenshotDir'),
 | ||
|             configManager.get('media.videoDir'),
 | ||
|             configManager.get('reporting.outputDir'),
 | ||
|             './test-results/logs',
 | ||
|             './test-results/storage-states'
 | ||
|         ];
 | ||
|         
 | ||
|         for (const dir of directories) {
 | ||
|             await fs.mkdir(dir, { recursive: true });
 | ||
|             console.log(`   ✅ Created: ${dir}`);
 | ||
|         }
 | ||
|         
 | ||
|         // 4. Pre-generate Authentication States
 | ||
|         console.log('\n🔐 4. Pre-generating Authentication States');
 | ||
|         
 | ||
|         if (configManager.get('testData.seedData') && environment !== 'staging') {
 | ||
|             // Only pre-generate auth states in safe environments
 | ||
|             try {
 | ||
|                 await authManager.preGenerateStorageStates();
 | ||
|                 console.log('   ✅ Authentication states generated');
 | ||
|             } catch (error) {
 | ||
|                 console.warn('   ⚠️ Could not pre-generate auth states:', error.message);
 | ||
|                 console.warn('   Tests will use fresh login instead');
 | ||
|             }
 | ||
|         } else {
 | ||
|             console.log('   ℹ️ Skipping auth state generation (staging environment)');
 | ||
|         }
 | ||
|         
 | ||
|         // 5. WordPress Environment Preparation
 | ||
|         console.log('\n⚙️ 5. Preparing WordPress Environment');
 | ||
|         
 | ||
|         if (environment === 'local' || environment === 'docker') {
 | ||
|             try {
 | ||
|                 // Flush rewrite rules
 | ||
|                 await wpUtils.flushRewriteRules();
 | ||
|                 console.log('   ✅ Rewrite rules flushed');
 | ||
|                 
 | ||
|                 // Clear cache
 | ||
|                 await wpUtils.clearCache();
 | ||
|                 console.log('   ✅ Cache cleared');
 | ||
|                 
 | ||
|                 // Run cron
 | ||
|                 await wpUtils.runCron();
 | ||
|                 console.log('   ✅ Cron executed');
 | ||
|                 
 | ||
|             } catch (error) {
 | ||
|                 console.warn('   ⚠️ WordPress preparation failed:', error.message);
 | ||
|             }
 | ||
|         } else {
 | ||
|             console.log('   ℹ️ Skipping WordPress modifications (staging environment)');
 | ||
|         }
 | ||
|         
 | ||
|         // 6. Browser Verification
 | ||
|         console.log('\n🌐 6. Browser Environment Verification');
 | ||
|         
 | ||
|         const browser = await chromium.launch({
 | ||
|             headless: true,
 | ||
|             timeout: 10000
 | ||
|         });
 | ||
|         
 | ||
|         try {
 | ||
|             const context = await browser.newContext();
 | ||
|             const page = await context.newPage();
 | ||
|             
 | ||
|             // Test basic navigation
 | ||
|             await page.goto(configManager.get('app.baseUrl'), { timeout: 15000 });
 | ||
|             const title = await page.title();
 | ||
|             
 | ||
|             console.log(`   ✅ Site accessible: ${title}`);
 | ||
|             
 | ||
|             await context.close();
 | ||
|         } catch (error) {
 | ||
|             console.error('   ❌ Site not accessible:', error.message);
 | ||
|             throw new Error(`Cannot access test site: ${configManager.get('app.baseUrl')}`);
 | ||
|         } finally {
 | ||
|             await browser.close();
 | ||
|         }
 | ||
|         
 | ||
|         // 7. Generate Setup Report
 | ||
|         console.log('\n📊 7. Generating Setup Report');
 | ||
|         
 | ||
|         const setupReport = {
 | ||
|             timestamp: new Date().toISOString(),
 | ||
|             environment,
 | ||
|             baseUrl: configManager.get('app.baseUrl'),
 | ||
|             configuration: configManager.getAll(),
 | ||
|             setupDuration: Date.now() - startTime,
 | ||
|             directories: directories,
 | ||
|             health: await wpUtils.checkHealth().catch(() => ({ error: 'Health check failed' })),
 | ||
|             authStatesGenerated: true // Will be updated based on actual generation
 | ||
|         };
 | ||
|         
 | ||
|         const reportPath = path.resolve('./test-results/setup-report.json');
 | ||
|         await fs.writeFile(reportPath, JSON.stringify(setupReport, null, 2));
 | ||
|         console.log(`   ✅ Setup report: ${reportPath}`);
 | ||
|         
 | ||
|         // 8. Final Summary
 | ||
|         const duration = ((Date.now() - startTime) / 1000).toFixed(2);
 | ||
|         console.log('\n' + '='.repeat(50));
 | ||
|         console.log('✅ Global Setup Complete');
 | ||
|         console.log(`⏱️  Duration: ${duration}s`);
 | ||
|         console.log(`🌍 Environment: ${environment}`);
 | ||
|         console.log(`🔗 Base URL: ${configManager.get('app.baseUrl')}`);
 | ||
|         console.log('='.repeat(50) + '\n');
 | ||
|         
 | ||
|         return setupReport;
 | ||
|         
 | ||
|     } catch (error) {
 | ||
|         console.error('\n❌ Global Setup Failed');
 | ||
|         console.error('Error:', error.message);
 | ||
|         console.error('='.repeat(50) + '\n');
 | ||
|         throw error;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| module.exports = globalSetup; |