- Add 26 documentation files including test reports, deployment guides, and troubleshooting documentation - Include 3 CSV data files for trainer imports and user registration tracking - Add 43 JavaScript test files covering mobile optimization, Safari compatibility, and E2E testing - Include 18 PHP utility files for debugging, geocoding, and data analysis - Add 12 shell scripts for deployment verification, user management, and database operations - Update .gitignore with whitelist patterns for development files, documentation, and CSV data 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			151 lines
		
	
	
		
			No EOL
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			No EOL
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const { chromium } = require('playwright');
 | ||
| const path = require('path');
 | ||
| const fs = require('fs');
 | ||
| 
 | ||
| async function testTrainerApprovalWorkflow() {
 | ||
|     console.log('🧪 Testing Trainer Approval Workflow...\n');
 | ||
|     
 | ||
|     const browser = await chromium.launch({ headless: false });
 | ||
|     const context = await browser.newContext();
 | ||
|     const page = await context.newPage();
 | ||
|     
 | ||
|     // Ensure screenshots directory exists
 | ||
|     const screenshotDir = path.join(__dirname, 'test-screenshots');
 | ||
|     if (!fs.existsSync(screenshotDir)) {
 | ||
|         fs.mkdirSync(screenshotDir, { recursive: true });
 | ||
|     }
 | ||
|     
 | ||
|     try {
 | ||
|         // Test 1: Check Registration Page
 | ||
|         console.log('1️⃣ Testing Registration Page...');
 | ||
|         await page.goto('https://upskill-staging.measurequick.com/trainer/registration/');
 | ||
|         await page.waitForLoadState('networkidle');
 | ||
|         
 | ||
|         // Take screenshot of registration page
 | ||
|         await page.screenshot({ 
 | ||
|             path: path.join(screenshotDir, '01-registration-page.png'),
 | ||
|             fullPage: true 
 | ||
|         });
 | ||
|         
 | ||
|         // Check if form exists
 | ||
|         const formExists = await page.locator('#hvac-registration-form').count() > 0;
 | ||
|         console.log(`  ✅ Registration form exists: ${formExists}`);
 | ||
|         
 | ||
|         // Check for required fields
 | ||
|         const requiredFields = [
 | ||
|             '#user_email', '#user_pass', '#confirm_password',
 | ||
|             '#first_name', '#last_name', '#display_name',
 | ||
|             '#business_name', '#business_phone', '#business_email'
 | ||
|         ];
 | ||
|         
 | ||
|         console.log('  📋 Checking required fields...');
 | ||
|         for (const field of requiredFields) {
 | ||
|             const exists = await page.locator(field).count() > 0;
 | ||
|             console.log(`    ${exists ? '✅' : '❌'} ${field}`);
 | ||
|         }
 | ||
|         
 | ||
|         // Test 2: Check Pending Page
 | ||
|         console.log('\n2️⃣ Testing Pending Status Page...');
 | ||
|         await page.goto('https://upskill-staging.measurequick.com/trainer-account-pending/');
 | ||
|         await page.waitForLoadState('networkidle');
 | ||
|         
 | ||
|         await page.screenshot({ 
 | ||
|             path: path.join(screenshotDir, '02-pending-page.png'),
 | ||
|             fullPage: true 
 | ||
|         });
 | ||
|         
 | ||
|         const pendingH1 = await page.locator('h1').textContent();
 | ||
|         console.log(`  📄 Pending page title: "${pendingH1}"`);
 | ||
|         
 | ||
|         // Test 3: Check Disabled Page
 | ||
|         console.log('\n3️⃣ Testing Disabled Status Page...');
 | ||
|         await page.goto('https://upskill-staging.measurequick.com/trainer-account-disabled/');
 | ||
|         await page.waitForLoadState('networkidle');
 | ||
|         
 | ||
|         await page.screenshot({ 
 | ||
|             path: path.join(screenshotDir, '03-disabled-page.png'),
 | ||
|             fullPage: true 
 | ||
|         });
 | ||
|         
 | ||
|         const disabledH1 = await page.locator('h1').textContent();
 | ||
|         console.log(`  📄 Disabled page title: "${disabledH1}"`);
 | ||
|         
 | ||
|         // Test 4: Check Master Dashboard (login required)
 | ||
|         console.log('\n4️⃣ Testing Master Dashboard Login...');
 | ||
|         
 | ||
|         // Login as master trainer
 | ||
|         await page.goto('https://upskill-staging.measurequick.com/wp-login.php');
 | ||
|         await page.fill('#user_login', 'JoeMedosch@gmail.com');
 | ||
|         await page.fill('#user_pass', 'JoeTrainer2025@');
 | ||
|         await page.click('#wp-submit');
 | ||
|         
 | ||
|         // Wait for login to complete
 | ||
|         await page.waitForURL(/wp-admin|master-trainer/, { timeout: 30000 });
 | ||
|         
 | ||
|         // Navigate to master dashboard
 | ||
|         await page.goto('https://upskill-staging.measurequick.com/master-trainer/dashboard/');
 | ||
|         await page.waitForLoadState('networkidle');
 | ||
|         
 | ||
|         await page.screenshot({ 
 | ||
|             path: path.join(screenshotDir, '04-master-dashboard.png'),
 | ||
|             fullPage: true 
 | ||
|         });
 | ||
|         
 | ||
|         // Check for trainer table
 | ||
|         const hasTrainerTable = await page.locator('.trainers-table-container').count() > 0;
 | ||
|         console.log(`  ✅ Master dashboard trainer table exists: ${hasTrainerTable}`);
 | ||
|         
 | ||
|         // Check for filter controls
 | ||
|         const hasStatusFilter = await page.locator('#trainer-status-filter').count() > 0;
 | ||
|         const hasSearchBox = await page.locator('#trainer-search').count() > 0;
 | ||
|         const hasBulkUpdate = await page.locator('#bulk-status-update').count() > 0;
 | ||
|         
 | ||
|         console.log(`  ✅ Status filter exists: ${hasStatusFilter}`);
 | ||
|         console.log(`  ✅ Search box exists: ${hasSearchBox}`);
 | ||
|         console.log(`  ✅ Bulk update dropdown exists: ${hasBulkUpdate}`);
 | ||
|         
 | ||
|         // Try filtering by pending
 | ||
|         if (hasStatusFilter) {
 | ||
|             await page.selectOption('#trainer-status-filter', 'pending');
 | ||
|             await page.click('#apply-trainer-filters');
 | ||
|             await page.waitForTimeout(2000);
 | ||
|             
 | ||
|             await page.screenshot({ 
 | ||
|                 path: path.join(screenshotDir, '05-master-dashboard-pending.png'),
 | ||
|                 fullPage: true 
 | ||
|             });
 | ||
|             
 | ||
|             const hasPendingTrainers = await page.locator('.trainers-table tr').count() > 1 || 
 | ||
|                                        await page.locator('.no-data-message').count() > 0;
 | ||
|             console.log(`  ✅ Pending filter works: ${hasPendingTrainers}`);
 | ||
|         }
 | ||
|         
 | ||
|         // Test 5: Registration Success Page
 | ||
|         console.log('\n5️⃣ Testing Registration Success Page...');
 | ||
|         await page.goto('https://upskill-staging.measurequick.com/registration-pending/');
 | ||
|         await page.waitForLoadState('networkidle');
 | ||
|         
 | ||
|         await page.screenshot({ 
 | ||
|             path: path.join(screenshotDir, '06-registration-success.png'),
 | ||
|             fullPage: true 
 | ||
|         });
 | ||
|         
 | ||
|         const successH1 = await page.locator('h1').textContent();
 | ||
|         console.log(`  📄 Success page title: "${successH1}"`);
 | ||
|         
 | ||
|         console.log('\n✅ All tests completed!');
 | ||
|         console.log(`\n📸 Screenshots saved to: ${screenshotDir}`);
 | ||
|         
 | ||
|     } catch (error) {
 | ||
|         console.error('❌ Test failed:', error);
 | ||
|         await page.screenshot({ 
 | ||
|             path: path.join(screenshotDir, 'error-screenshot.png'),
 | ||
|             fullPage: true 
 | ||
|         });
 | ||
|     } finally {
 | ||
|         await browser.close();
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| // Run the test
 | ||
| testTrainerApprovalWorkflow().catch(console.error); |