upskill-event-manager/verify-event-pages-complete.js
Ben bb3441c0e6 feat: Complete TEC integration with mobile fixes and comprehensive testing
- 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>
2025-08-18 07:07:06 -03:00

293 lines
No EOL
13 KiB
JavaScript

/**
* Comprehensive verification script for create-event and edit-event pages
* Tests all functionality after fixes have been applied
*/
const { chromium } = require('playwright');
// Colors for console output
const colors = {
reset: '\x1b[0m',
green: '\x1b[32m',
red: '\x1b[31m',
yellow: '\x1b[33m',
blue: '\x1b[36m',
bold: '\x1b[1m'
};
async function loginAsTrainer(page) {
console.log(`${colors.blue}🔐 Logging in as test trainer...${colors.reset}`);
await page.goto('https://upskill-staging.measurequick.com/trainer/training-login/', {
waitUntil: 'networkidle',
timeout: 30000
});
await page.fill('#username, #user_login, input[name="log"]', 'test_trainer');
await page.fill('#password, #user_pass, input[name="pwd"]', 'TestTrainer123!');
await page.click('input[type="submit"], button[type="submit"]');
await page.waitForTimeout(3000);
console.log(`${colors.green} ✅ Logged in successfully${colors.reset}`);
}
async function testCreateEventPage(page) {
console.log(`\n${colors.bold}${colors.blue}📝 Testing CREATE EVENT Page${colors.reset}`);
console.log('=' .repeat(50));
const results = {
pageLoads: false,
hasNavigation: false,
hasTitle: false,
hasContent: false,
restApiLoads: false,
excerptFieldAdded: false,
tecFormPresent: false
};
try {
// Navigate to create event page
const response = await page.goto('https://upskill-staging.measurequick.com/trainer/create-event/', {
waitUntil: 'networkidle',
timeout: 30000
});
results.pageLoads = response.status() === 200;
console.log(` Page loads (200 OK): ${results.pageLoads ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check for navigation menu
results.hasNavigation = await page.locator('.hvac-nav-menu, .hvac-trainer-navigation, .hvac-menu-container').count() > 0;
console.log(` Navigation menu: ${results.hasNavigation ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check page title
const pageTitle = await page.locator('h1').first().textContent().catch(() => '');
results.hasTitle = pageTitle.includes('Create Event') || pageTitle.includes('Add New Event');
console.log(` Page title correct: ${results.hasTitle ? colors.green + '✅' : colors.red + '❌'}${colors.reset} ("${pageTitle}")`);
// Check for any content (shortcode output or TEC form)
const hasShortcodeContent = await page.locator('.hvac-create-event-wrapper, .hvac-page-content').count() > 0;
const hasTecContainer = await page.locator('#tribe-community-events, .tribe-events-community').count() > 0;
results.hasContent = hasShortcodeContent || hasTecContainer;
console.log(` Content rendered: ${results.hasContent ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check if REST API script loaded
results.restApiLoads = await page.evaluate(() => {
return typeof window.HVACRestEventSubmission !== 'undefined';
});
console.log(` REST API script: ${results.restApiLoads ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check if excerpt field was added
results.excerptFieldAdded = await page.locator('#event_excerpt, .tribe-section-excerpt').count() > 0;
console.log(` Excerpt field: ${results.excerptFieldAdded ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check for TEC form elements
const tecElements = await page.evaluate(() => {
return {
form: !!document.querySelector('form[id*="tribe"], form[class*="tribe"]'),
titleField: !!document.querySelector('#post_title, input[name="post_title"]'),
contentField: !!document.querySelector('#tcepostcontent, textarea[name="post_content"]'),
dateFields: !!document.querySelector('input[name*="EventStart"], input[name*="EventEnd"]')
};
});
results.tecFormPresent = Object.values(tecElements).some(v => v);
console.log(` TEC form elements: ${results.tecFormPresent ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check for TEC plugin message
const pageContent = await page.content();
if (pageContent.includes('Event management requires The Events Calendar Community Events')) {
console.log(` ${colors.yellow}⚠️ TEC Community Events plugin not active${colors.reset}`);
}
} catch (error) {
console.log(` ${colors.red}❌ Error: ${error.message}${colors.reset}`);
}
// Summary for create page
const allPassed = Object.values(results).filter(v => v).length;
const total = Object.values(results).length;
console.log(`\n ${colors.bold}Summary: ${allPassed}/${total} checks passed${colors.reset}`);
return results;
}
async function testEditEventPage(page) {
console.log(`\n${colors.bold}${colors.blue}📝 Testing EDIT EVENT Page${colors.reset}`);
console.log('=' .repeat(50));
const results = {
pageLoads: false,
showsErrorNoId: false,
hasBackLink: false,
acceptsEventId: false,
setsWindowVar: false,
showsEditForm: false
};
try {
// Test 1: Page without event_id
console.log(`\n ${colors.bold}Test 1: Without event_id${colors.reset}`);
const response = await page.goto('https://upskill-staging.measurequick.com/trainer/edit-event/', {
waitUntil: 'networkidle',
timeout: 30000
});
results.pageLoads = response.status() === 200;
console.log(` Page loads (200 OK): ${results.pageLoads ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check for error message
const errorMessage = await page.locator('.hvac-error-notice, .error-message, .notice-error').count() > 0;
const errorText = await page.locator('.hvac-error-notice p, .error-message, .notice-error').first().textContent().catch(() => '');
results.showsErrorNoId = errorMessage && errorText.toLowerCase().includes('no event');
console.log(` Shows error message: ${results.showsErrorNoId ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
if (errorText) {
console.log(` Error text: "${errorText}"`);
}
// Check for back link
results.hasBackLink = await page.locator('a[href*="/manage"], a[href*="/dashboard"]').count() > 0;
console.log(` Has back link: ${results.hasBackLink ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Test 2: Page with event_id
console.log(`\n ${colors.bold}Test 2: With event_id=5678${colors.reset}`);
await page.goto('https://upskill-staging.measurequick.com/trainer/edit-event/?event_id=5678', {
waitUntil: 'networkidle',
timeout: 30000
});
results.acceptsEventId = response.status() === 200;
console.log(` Page accepts event_id: ${results.acceptsEventId ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check if window.hvacEditEventId is set
const windowVar = await page.evaluate(() => window.hvacEditEventId);
results.setsWindowVar = windowVar === 5678;
console.log(` Sets window.hvacEditEventId: ${results.setsWindowVar ? colors.green + '✅' : colors.red + '❌'}${colors.reset} (value: ${windowVar})`);
// Check for edit form or notice
const hasEditNotice = await page.locator('.hvac-form-notice, .hvac-edit-notice').count() > 0;
const hasEditForm = await page.locator('form[id*="tribe"], form[class*="tribe"], #tribe-community-events').count() > 0;
results.showsEditForm = hasEditNotice || hasEditForm;
console.log(` Shows edit form/notice: ${results.showsEditForm ? colors.green + '✅' : colors.red + '❌'}${colors.reset}`);
// Check notice text if present
if (hasEditNotice) {
const noticeText = await page.locator('.hvac-form-notice p, .hvac-edit-notice').first().textContent();
console.log(` Notice: "${noticeText}"`);
}
} catch (error) {
console.log(` ${colors.red}❌ Error: ${error.message}${colors.reset}`);
}
// Summary for edit page
const allPassed = Object.values(results).filter(v => v).length;
const total = Object.values(results).length;
console.log(`\n ${colors.bold}Summary: ${allPassed}/${total} checks passed${colors.reset}`);
return results;
}
async function checkTECPlugin(page) {
console.log(`\n${colors.bold}${colors.blue}🔌 Checking TEC Plugin Status${colors.reset}`);
console.log('=' .repeat(50));
// Try to access TEC community events URL
const tecUrls = [
'https://upskill-staging.measurequick.com/events/community/add',
'https://upskill-staging.measurequick.com/events/community/list'
];
for (const url of tecUrls) {
try {
const response = await page.goto(url, {
waitUntil: 'networkidle',
timeout: 15000
});
const status = response.status();
console.log(` ${url.split('.com')[1]}: ${status === 200 ? colors.green + '✅ Active' : colors.yellow + '⚠️ ' + status}${colors.reset}`);
} catch (error) {
console.log(` ${url.split('.com')[1]}: ${colors.red}❌ Error${colors.reset}`);
}
}
}
(async () => {
const browser = await chromium.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const context = await browser.newContext({
ignoreHTTPSErrors: true
});
const page = await context.newPage();
console.log(`${colors.bold}${colors.blue}🚀 COMPREHENSIVE EVENT PAGES VERIFICATION${colors.reset}`);
console.log('=' .repeat(50));
console.log(`Target: https://upskill-staging.measurequick.com`);
console.log(`Time: ${new Date().toLocaleString()}`);
console.log('=' .repeat(50));
try {
// Login
await loginAsTrainer(page);
// Test both pages
const createResults = await testCreateEventPage(page);
const editResults = await testEditEventPage(page);
// Check TEC plugin
await checkTECPlugin(page);
// Final Summary
console.log(`\n${colors.bold}${colors.blue}📊 FINAL VERIFICATION RESULTS${colors.reset}`);
console.log('=' .repeat(50));
const createPassed = Object.values(createResults).filter(v => v).length;
const editPassed = Object.values(editResults).filter(v => v).length;
const totalTests = Object.values(createResults).length + Object.values(editResults).length;
const totalPassed = createPassed + editPassed;
console.log(`${colors.bold}Create Event Page: ${createPassed}/${Object.values(createResults).length} passed${colors.reset}`);
console.log(`${colors.bold}Edit Event Page: ${editPassed}/${Object.values(editResults).length} passed${colors.reset}`);
console.log(`${colors.bold}Overall: ${totalPassed}/${totalTests} tests passed${colors.reset}`);
// Critical checks
const criticalChecks = {
'Pages load without 404': createResults.pageLoads && editResults.pageLoads,
'Navigation appears': createResults.hasNavigation,
'Content renders': createResults.hasContent,
'Edit page error handling': editResults.showsErrorNoId,
'Edit page accepts event_id': editResults.acceptsEventId
};
console.log(`\n${colors.bold}Critical Checks:${colors.reset}`);
Object.entries(criticalChecks).forEach(([check, passed]) => {
console.log(` ${check}: ${passed ? colors.green + '✅ PASS' : colors.red + '❌ FAIL'}${colors.reset}`);
});
const allCriticalPassed = Object.values(criticalChecks).every(v => v);
console.log(`\n${colors.bold}${allCriticalPassed ? colors.green + '✅ VERIFICATION SUCCESSFUL' : colors.yellow + '⚠️ PARTIAL SUCCESS'}${colors.reset}`);
if (!allCriticalPassed) {
console.log(`\n${colors.yellow}Note: Some features require TEC Community Events plugin to be active${colors.reset}`);
}
// Take final screenshots
await page.goto('https://upskill-staging.measurequick.com/trainer/create-event/');
await page.screenshot({ path: 'create-event-final.png', fullPage: true });
await page.goto('https://upskill-staging.measurequick.com/trainer/edit-event/?event_id=5678');
await page.screenshot({ path: 'edit-event-final.png', fullPage: true });
console.log(`\n${colors.blue}📸 Screenshots saved: create-event-final.png, edit-event-final.png${colors.reset}`);
} catch (error) {
console.error(`${colors.red}❌ Critical error: ${error.message}${colors.reset}`);
} finally {
await browser.close();
console.log(`\n${colors.blue}✨ Verification complete${colors.reset}\n`);
}
})();