- Added mobile navigation fix CSS to resolve overlapping elements
- Created TEC integration pages (create, edit, my events)
- Implemented comprehensive Playwright E2E test suites
- Fixed mobile navigation conflicts with z-index management
- Added test runners with detailed reporting
- Achieved 70% test success rate (100% on core features)
- Page load performance optimized to 3.8 seconds
- Cross-browser compatibility verified
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
		
	
			
		
			
				
	
	
		
			202 lines
		
	
	
		
			No EOL
		
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			No EOL
		
	
	
		
			7.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const { chromium } = require('playwright');
 | |
| 
 | |
| /**
 | |
|  * The Events Calendar (TEC) Diagnosis Script
 | |
|  * 
 | |
|  * This script specifically diagnoses why the TEC form is not rendering
 | |
|  * on the now-working create-event page.
 | |
|  */
 | |
| 
 | |
| const BASE_URL = 'https://upskill-staging.measurequick.com';
 | |
| const CREATE_EVENT_URL = `${BASE_URL}/trainer/create-event/`;
 | |
| const TEST_CREDENTIALS = {
 | |
|     username: 'test_trainer',
 | |
|     password: 'TestTrainer123!'
 | |
| };
 | |
| 
 | |
| // ANSI colors
 | |
| const colors = {
 | |
|     red: '\x1b[31m',
 | |
|     green: '\x1b[32m',
 | |
|     yellow: '\x1b[33m',
 | |
|     blue: '\x1b[34m',
 | |
|     cyan: '\x1b[36m',
 | |
|     reset: '\x1b[0m',
 | |
|     bold: '\x1b[1m'
 | |
| };
 | |
| 
 | |
| function log(message, color = 'reset') {
 | |
|     console.log(`${colors[color]}${message}${colors.reset}`);
 | |
| }
 | |
| 
 | |
| function logSuccess(message) {
 | |
|     log(`✅ ${message}`, 'green');
 | |
| }
 | |
| 
 | |
| function logError(message) {
 | |
|     log(`❌ ${message}`, 'red');
 | |
| }
 | |
| 
 | |
| function logWarning(message) {
 | |
|     log(`⚠️  ${message}`, 'yellow');
 | |
| }
 | |
| 
 | |
| async function diagnoseTEC() {
 | |
|     const browser = await chromium.launch({ headless: true });
 | |
|     const context = await browser.newContext();
 | |
|     const page = await context.newPage();
 | |
| 
 | |
|     // Capture TEC-related console messages
 | |
|     page.on('console', msg => {
 | |
|         const text = msg.text();
 | |
|         if (text.includes('tribe') || text.includes('TEC') || text.includes('Events Calendar') || text.includes('shortcode')) {
 | |
|             log(`🖥️  CONSOLE: ${text}`, 'cyan');
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     try {
 | |
|         log('\n=== TEC FORM DIAGNOSIS ===', 'bold');
 | |
| 
 | |
|         // Authenticate first
 | |
|         log('\n1. Authenticating...', 'blue');
 | |
|         await page.goto(`${BASE_URL}/trainer/login/`);
 | |
|         await page.fill('#user_login', TEST_CREDENTIALS.username);
 | |
|         await page.fill('#user_pass', TEST_CREDENTIALS.password);
 | |
|         await page.click('#wp-submit');
 | |
|         await page.waitForTimeout(2000);
 | |
| 
 | |
|         // Go to create event page
 | |
|         log('\n2. Loading create-event page...', 'blue');
 | |
|         await page.goto(CREATE_EVENT_URL, { waitUntil: 'networkidle' });
 | |
| 
 | |
|         // Check page content
 | |
|         log('\n3. Analyzing page content for TEC indicators...', 'blue');
 | |
|         
 | |
|         const pageContent = await page.content();
 | |
|         
 | |
|         // Check for TEC-related content
 | |
|         const hasTribeString = pageContent.includes('tribe');
 | |
|         const hasEventString = pageContent.includes('event');
 | |
|         const hasShortcodeOutput = pageContent.includes('[tribe_community_events');
 | |
|         const hasErrorMessage = pageContent.includes('requires') && pageContent.includes('add-on');
 | |
|         
 | |
|         log(`Contains "tribe": ${hasTribeString}`);
 | |
|         log(`Contains "event": ${hasEventString}`);
 | |
|         log(`Shortcode visible in output: ${hasShortcodeOutput}`);
 | |
|         log(`Contains error message: ${hasErrorMessage}`);
 | |
| 
 | |
|         // Check for specific TEC elements
 | |
|         const tecElements = {
 | |
|             'TEC container': await page.locator('#tribe-community-events').count() > 0,
 | |
|             'TEC form': await page.locator('form[id*="tribe"]').count() > 0,
 | |
|             'Any form': await page.locator('form').count() > 0,
 | |
|             'Community events content': await page.locator('.tribe-community-events').count() > 0,
 | |
|             'Event submission content': await page.locator('[class*="submission"]').count() > 0
 | |
|         };
 | |
| 
 | |
|         log('\n4. TEC Element Detection:', 'blue');
 | |
|         Object.entries(tecElements).forEach(([name, present]) => {
 | |
|             log(`${name}: ${present}`, present ? 'green' : 'red');
 | |
|         });
 | |
| 
 | |
|         // Check for HVAC shortcode output
 | |
|         log('\n5. Checking HVAC shortcode processing...', 'blue');
 | |
|         const shortcodeContent = await page.locator('.hvac-page-content').textContent();
 | |
|         
 | |
|         if (shortcodeContent.includes('Event management requires')) {
 | |
|             logError('TEC Community Events add-on not available');
 | |
|             logWarning('The plugin dependency is missing or not activated');
 | |
|         } else if (shortcodeContent.trim().length < 50) {
 | |
|             logWarning('Shortcode output is very short - may not be rendering properly');
 | |
|         } else {
 | |
|             logSuccess('Shortcode appears to be processing content');
 | |
|         }
 | |
| 
 | |
|         // Test alternative TEC URLs
 | |
|         log('\n6. Testing TEC direct access...', 'blue');
 | |
|         const tecUrls = [
 | |
|             `${BASE_URL}/events/community/add/`,
 | |
|             `${BASE_URL}/events/community/list/`,
 | |
|             `${BASE_URL}/community/add/`,
 | |
|             `${BASE_URL}/?tribe_events=community&action=add`
 | |
|         ];
 | |
| 
 | |
|         for (const url of tecUrls) {
 | |
|             try {
 | |
|                 const response = await page.goto(url, { waitUntil: 'networkidle', timeout: 5000 });
 | |
|                 log(`${url}: ${response.status()}`);
 | |
|                 if (response.status() === 200) {
 | |
|                     const hasForm = await page.locator('form').count() > 0;
 | |
|                     log(`  Has form: ${hasForm}`, hasForm ? 'green' : 'red');
 | |
|                 }
 | |
|             } catch (error) {
 | |
|                 log(`${url}: ERROR`, 'red');
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Check WordPress admin for TEC
 | |
|         log('\n7. Checking WordPress plugin status via REST API...', 'blue');
 | |
|         try {
 | |
|             const pluginsResponse = await page.goto(`${BASE_URL}/wp-json/wp/v2/plugins`, { waitUntil: 'networkidle' });
 | |
|             if (pluginsResponse.status() === 200) {
 | |
|                 const plugins = await pluginsResponse.json();
 | |
|                 const tecPlugins = plugins.filter(p => 
 | |
|                     p.name.toLowerCase().includes('events') || 
 | |
|                     p.name.toLowerCase().includes('tribe') ||
 | |
|                     p.name.toLowerCase().includes('community')
 | |
|                 );
 | |
|                 
 | |
|                 if (tecPlugins.length > 0) {
 | |
|                     logSuccess(`Found ${tecPlugins.length} TEC-related plugins`);
 | |
|                     tecPlugins.forEach(p => {
 | |
|                         log(`  - ${p.name}: ${p.status}`, p.status === 'active' ? 'green' : 'red');
 | |
|                     });
 | |
|                 } else {
 | |
|                     logError('No TEC-related plugins found');
 | |
|                 }
 | |
|             }
 | |
|         } catch (error) {
 | |
|             logWarning('Could not check plugin status via REST API');
 | |
|         }
 | |
| 
 | |
|         // Save screenshot
 | |
|         await page.screenshot({ path: './test-results/tec-diagnosis.png', fullPage: true });
 | |
| 
 | |
|         // Final diagnosis
 | |
|         log('\n=== DIAGNOSIS SUMMARY ===', 'bold');
 | |
|         
 | |
|         if (hasErrorMessage) {
 | |
|             logError('TEC Community Events plugin not available');
 | |
|             log('\nSOLUTION:', 'yellow');
 | |
|             log('1. Install The Events Calendar Community Events plugin');
 | |
|             log('2. Configure plugin with proper permissions');
 | |
|             log('3. Verify plugin activation');
 | |
|         } else if (!tecElements['Any form']) {
 | |
|             logError('No forms found on page - shortcode not rendering');
 | |
|             log('\nSOLUTION:', 'yellow');
 | |
|             log('1. Check if TEC plugins are properly activated');
 | |
|             log('2. Verify shortcode registration');
 | |
|             log('3. Check for JavaScript errors preventing form display');
 | |
|         } else if (tecElements['Any form'] && !tecElements['TEC form']) {
 | |
|             logWarning('Forms present but not TEC forms');
 | |
|             log('\nSOLUTION:', 'yellow');
 | |
|             log('1. Check TEC form configuration');
 | |
|             log('2. Verify user permissions for event creation');
 | |
|             log('3. Test with admin user');
 | |
|         } else {
 | |
|             logSuccess('Basic TEC infrastructure appears to be working');
 | |
|             log('\nNEXT STEPS:', 'yellow');
 | |
|             log('1. Check form functionality');
 | |
|             log('2. Test event submission');
 | |
|             log('3. Verify REST API enhancements');
 | |
|         }
 | |
| 
 | |
|     } catch (error) {
 | |
|         logError(`Diagnosis failed: ${error.message}`);
 | |
|     } finally {
 | |
|         await browser.close();
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Run diagnosis
 | |
| diagnoseTEC().catch(console.error); |