upskill-event-manager/test-edit-event-page.js
ben 16acf2c8e7 docs: comprehensive deprecation of legacy event creation system
- Create authoritative DEPRECATED-FILES.md documenting 27+ deprecated files
- Add deprecation notices to legacy templates (page-create-event.php, page-manage-event.php, page-edit-event.php)
- Mark deprecated JavaScript files (hvac-event-form-templates.js) with migration paths
- Add deprecation notices to 8 legacy test files with comprehensive explanations
- Update Status.md to reflect completion of comprehensive event creation system v3.2.0
- Automated deprecation script for consistent messaging across files

All deprecated functionality has been replaced by:
- page-tec-create-event.php with AI assistance and native TEC integration
- Comprehensive E2E testing framework with Page Object Model
- Integrated template system with enhanced user experience
- Modern responsive design with role-based permissions

Scheduled for removal in v3.3 after transition period

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-26 20:55:13 -03:00

447 lines
No EOL
18 KiB
JavaScript

#!/usr/bin/env node
/**
* ⛔ DEPRECATED - January 2025
* This test file has been deprecated and replaced by comprehensive E2E testing framework
*
* Reasons for deprecation:
* - Tests old event creation/management forms that have been replaced
* - Individual test files replaced by comprehensive test suites
* - Page Object Model (POM) architecture provides better test organization
* - Modern test framework with better error handling and reporting
*
* Replacement: test-master-trainer-e2e.js + test-comprehensive-validation.js
* - Comprehensive E2E testing covering all event workflows
* - Page Object Model for maintainable tests
* - Better test organization and reporting
* - Docker-based testing environment
*
* See: DEPRECATED-FILES.md for full migration details
*/
const { chromium } = require('playwright');
/**
* Test Edit Event Page Functionality
*
* Tests both error handling when no event_id and proper loading with event_id
*/
class EditEventPageTester {
constructor(baseUrl = 'https://upskill-staging.measurequick.com') {
this.baseUrl = baseUrl;
this.browser = null;
this.page = null;
this.testResults = [];
}
async init() {
console.log('🚀 Initializing Edit Event Page Tester...');
this.browser = await chromium.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
this.page = await this.browser.newPage();
// Set viewport for consistent testing
await this.page.setViewportSize({ width: 1280, height: 720 });
console.log('✅ Browser initialized');
}
async login() {
console.log('\n📝 Logging in as test trainer...');
try {
await this.page.goto(`${this.baseUrl}/training-login/`);
await this.page.waitForSelector('input[name="log"]', { timeout: 10000 });
// Fill login form
await this.page.fill('input[name="log"]', 'test_trainer');
await this.page.fill('input[name="pwd"]', 'TestTrainer123!');
// Submit login
await this.page.click('input[type="submit"]');
// Wait for redirect to dashboard
await this.page.waitForURL('**/trainer/dashboard/**', { timeout: 15000 });
console.log('✅ Login successful');
return true;
} catch (error) {
console.error('❌ Login failed:', error.message);
return false;
}
}
async testEditEventPageWithoutEventId() {
console.log('\n🧪 Testing Edit Event Page without event_id parameter...');
try {
// Navigate to edit-event page without event_id
await this.page.goto(`${this.baseUrl}/trainer/edit-event/`);
await this.page.waitForLoadState('networkidle');
// Check if page loads
const title = await this.page.textContent('h1');
const isCorrectTitle = title && title.includes('Edit Event');
// Check for error message
const errorNotice = await this.page.locator('.hvac-error-notice').first();
const hasErrorNotice = await errorNotice.isVisible();
// Check error message content
let errorMessage = '';
if (hasErrorNotice) {
errorMessage = await errorNotice.textContent();
}
// Check for "Back to Event Management" link
const backLink = await this.page.locator('a[href*="/trainer/event/manage/"]').first();
const hasBackLink = await backLink.isVisible();
// Check navigation menu is present
const navMenu = await this.page.locator('.hvac-trainer-navigation, .hvac-nav-menu').first();
const hasNavigation = await navMenu.isVisible();
const result = {
test: 'Edit Event Page Without event_id',
status: isCorrectTitle && hasErrorNotice && hasBackLink ? 'PASS' : 'FAIL',
details: {
correctTitle: isCorrectTitle,
hasErrorNotice: hasErrorNotice,
errorMessage: errorMessage.trim(),
hasBackLink: hasBackLink,
hasNavigation: hasNavigation,
pageUrl: this.page.url()
}
};
this.testResults.push(result);
console.log(`${result.status === 'PASS' ? '✅' : '❌'} ${result.test}: ${result.status}`);
console.log(` Error Notice: ${hasErrorNotice ? 'Present' : 'Missing'}`);
console.log(` Error Message: "${errorMessage.trim()}"`);
console.log(` Back Link: ${hasBackLink ? 'Present' : 'Missing'}`);
return result.status === 'PASS';
} catch (error) {
console.error('❌ Test failed:', error.message);
this.testResults.push({
test: 'Edit Event Page Without event_id',
status: 'ERROR',
error: error.message
});
return false;
}
}
async findExistingEvent() {
console.log('\n🔍 Finding existing event for testing...');
try {
// Navigate to event management page
await this.page.goto(`${this.baseUrl}/trainer/event/manage/`);
await this.page.waitForLoadState('networkidle');
// Look for event management links or existing events
const eventLinks = await this.page.locator('a[href*="event_id="], a[href*="/edit-event/"]').all();
if (eventLinks.length > 0) {
// Extract event ID from first available edit link
const href = await eventLinks[0].getAttribute('href');
const eventIdMatch = href.match(/event_id=(\d+)/);
if (eventIdMatch) {
const eventId = eventIdMatch[1];
console.log(`✅ Found existing event ID: ${eventId}`);
return eventId;
}
}
// If no events found, check if there are any events in the system
console.log('⚠️ No existing events found via edit links');
// Try to find events using tribe events
const tribeEvents = await this.page.evaluate(() => {
// Look for any event data in the page
const eventElements = document.querySelectorAll('[data-event-id], .tribe-events-event');
const eventIds = [];
eventElements.forEach(el => {
const eventId = el.getAttribute('data-event-id') ||
el.getAttribute('data-event') ||
el.id.match(/event-(\d+)/)?.[1];
if (eventId) {
eventIds.push(eventId);
}
});
return eventIds;
});
if (tribeEvents.length > 0) {
console.log(`✅ Found event ID from page data: ${tribeEvents[0]}`);
return tribeEvents[0];
}
// If still no events, return a test event ID
console.log('⚠️ No events found, using test event ID: 1');
return '1';
} catch (error) {
console.error('❌ Error finding existing event:', error.message);
return '1'; // Fallback to test ID
}
}
async testEditEventPageWithEventId(eventId) {
console.log(`\n🧪 Testing Edit Event Page with event_id=${eventId}...`);
try {
// Navigate to edit-event page with event_id
await this.page.goto(`${this.baseUrl}/trainer/edit-event/?event_id=${eventId}`);
await this.page.waitForLoadState('networkidle');
// Check if page loads
const title = await this.page.textContent('h1');
const isCorrectTitle = title && title.includes('Edit Event');
// Check for info notice (should show event ID being edited)
const infoNotice = await this.page.locator('.hvac-form-notice').first();
const hasInfoNotice = await infoNotice.isVisible();
// Check info message content
let infoMessage = '';
if (hasInfoNotice) {
infoMessage = await infoNotice.textContent();
}
// Check if REST API script variable is set
const restApiVariable = await this.page.evaluate(() => {
return typeof window.hvacEditEventId !== 'undefined' ? window.hvacEditEventId : null;
});
// Check if TEC edit form is loaded
const tecForm = await this.page.locator('form, .tribe-community-events, .tribe-events').first();
const hasTecForm = await tecForm.isVisible();
// Check navigation menu is present
const navMenu = await this.page.locator('.hvac-trainer-navigation, .hvac-nav-menu').first();
const hasNavigation = await navMenu.isVisible();
// Check console messages for REST API initialization
const consoleLogs = await this.page.evaluate(() => {
return window.console._logs || [];
});
const result = {
test: `Edit Event Page With event_id=${eventId}`,
status: isCorrectTitle && hasInfoNotice ? 'PASS' : 'FAIL',
details: {
correctTitle: isCorrectTitle,
hasInfoNotice: hasInfoNotice,
infoMessage: infoMessage.trim(),
restApiVariable: restApiVariable,
hasTecForm: hasTecForm,
hasNavigation: hasNavigation,
pageUrl: this.page.url(),
eventId: eventId
}
};
this.testResults.push(result);
console.log(`${result.status === 'PASS' ? '✅' : '❌'} ${result.test}: ${result.status}`);
console.log(` Info Notice: ${hasInfoNotice ? 'Present' : 'Missing'}`);
console.log(` Info Message: "${infoMessage.trim()}"`);
console.log(` REST API Variable: ${restApiVariable || 'Not Set'}`);
console.log(` TEC Form: ${hasTecForm ? 'Present' : 'Missing'}`);
return result.status === 'PASS';
} catch (error) {
console.error('❌ Test failed:', error.message);
this.testResults.push({
test: `Edit Event Page With event_id=${eventId}`,
status: 'ERROR',
error: error.message
});
return false;
}
}
async checkTecCommunityEventsPlugin() {
console.log('\n🔌 Checking TEC Community Events Plugin status...');
try {
// Check for TEC Community Events plugin indicators
const tecIndicators = await this.page.evaluate(() => {
// Check for TEC script files
const tecScripts = Array.from(document.querySelectorAll('script[src*="community-events"]')).length;
// Check for TEC CSS files
const tecStyles = Array.from(document.querySelectorAll('link[href*="community-events"]')).length;
// Check for TEC body classes
const bodyClasses = document.body.className;
const hasTecClasses = bodyClasses.includes('tribe') || bodyClasses.includes('community-events');
// Check for global TEC variables
const tecVars = typeof tribe_community_events !== 'undefined' ||
typeof tribe !== 'undefined' ||
typeof TribeCommunityEvents !== 'undefined';
return {
tecScripts: tecScripts,
tecStyles: tecStyles,
hasTecClasses: hasTecClasses,
tecVars: tecVars
};
});
const isActive = tecIndicators.tecScripts > 0 ||
tecIndicators.tecStyles > 0 ||
tecIndicators.hasTecClasses ||
tecIndicators.tecVars;
const result = {
test: 'TEC Community Events Plugin Check',
status: isActive ? 'ACTIVE' : 'INACTIVE',
details: tecIndicators
};
this.testResults.push(result);
console.log(`${isActive ? '✅' : '⚠️'} TEC Community Events Plugin: ${result.status}`);
console.log(` Scripts: ${tecIndicators.tecScripts}`);
console.log(` Styles: ${tecIndicators.tecStyles}`);
console.log(` Body Classes: ${tecIndicators.hasTecClasses ? 'Present' : 'Missing'}`);
console.log(` Variables: ${tecIndicators.tecVars ? 'Present' : 'Missing'}`);
return isActive;
} catch (error) {
console.error('❌ Plugin check failed:', error.message);
this.testResults.push({
test: 'TEC Community Events Plugin Check',
status: 'ERROR',
error: error.message
});
return false;
}
}
async takeScreenshot(name) {
try {
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const filename = `/tmp/playwright-mcp-output/2025-08-12T10-37-16.007Z/edit-event-${name}-${timestamp}.png`;
await this.page.screenshot({ path: filename, fullPage: true });
console.log(`📸 Screenshot saved: ${filename}`);
return filename;
} catch (error) {
console.error('❌ Screenshot failed:', error.message);
return null;
}
}
async generateReport() {
console.log('\n📊 Test Results Summary:');
console.log('='.repeat(50));
let passCount = 0;
let failCount = 0;
let errorCount = 0;
this.testResults.forEach((result, index) => {
console.log(`\n${index + 1}. ${result.test}`);
console.log(` Status: ${result.status}`);
if (result.status === 'PASS') passCount++;
else if (result.status === 'FAIL') failCount++;
else errorCount++;
if (result.details) {
Object.entries(result.details).forEach(([key, value]) => {
console.log(` ${key}: ${value}`);
});
}
if (result.error) {
console.log(` Error: ${result.error}`);
}
});
console.log('\n📈 Summary:');
console.log(` ✅ Passed: ${passCount}`);
console.log(` ❌ Failed: ${failCount}`);
console.log(` 🔥 Errors: ${errorCount}`);
console.log(` 📊 Total: ${this.testResults.length}`);
const successRate = Math.round((passCount / this.testResults.length) * 100);
console.log(` 🎯 Success Rate: ${successRate}%`);
return {
passed: passCount,
failed: failCount,
errors: errorCount,
total: this.testResults.length,
successRate: successRate,
results: this.testResults
};
}
async cleanup() {
if (this.browser) {
await this.browser.close();
console.log('🧹 Browser closed');
}
}
async runAllTests() {
try {
await this.init();
// Login first
const loginSuccess = await this.login();
if (!loginSuccess) {
throw new Error('Login failed - cannot proceed with tests');
}
// Test 1: Edit event page without event_id (should show error)
await this.testEditEventPageWithoutEventId();
await this.takeScreenshot('without-event-id');
// Test 2: Check TEC plugin status
await this.checkTecCommunityEventsPlugin();
// Test 3: Find existing event and test with event_id
const eventId = await this.findExistingEvent();
await this.testEditEventPageWithEventId(eventId);
await this.takeScreenshot('with-event-id');
// Generate final report
const report = await this.generateReport();
return report;
} catch (error) {
console.error('❌ Test suite failed:', error.message);
throw error;
} finally {
await this.cleanup();
}
}
}
// Run tests if called directly
if (require.main === module) {
const tester = new EditEventPageTester();
tester.runAllTests()
.then(report => {
console.log('\n🎉 Test suite completed successfully!');
process.exit(report.failed === 0 && report.errors === 0 ? 0 : 1);
})
.catch(error => {
console.error('\n💥 Test suite failed:', error.message);
process.exit(1);
});
}
module.exports = EditEventPageTester;