upskill-event-manager/test-all-features.js
bengizmo 993a820a84 feat: Add comprehensive development artifacts to repository
- 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>
2025-08-11 12:26:11 -03:00

164 lines
No EOL
6.3 KiB
JavaScript

const { chromium } = require('playwright');
const BASE_URL = 'https://upskill-staging.measurequick.com';
async function testAllFeatures() {
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ viewport: { width: 1920, height: 1080 } });
const page = await context.newPage();
console.log('🧪 Testing HVAC Trainer Features on Staging\n');
console.log('=' . repeat(50));
const results = {
passed: 0,
failed: 0,
tests: []
};
function logTest(name, passed, details = '') {
const status = passed ? '✅ PASS' : '❌ FAIL';
console.log(`${status} ${name}`);
if (details) console.log(` ${details}`);
results.tests.push({ name, passed, details });
if (passed) results.passed++;
else results.failed++;
}
try {
// Test 1: Registration Form
console.log('\n📝 Testing Registration Form');
console.log('-' . repeat(30));
await page.goto(`${BASE_URL}/trainer-registration/`);
await page.waitForLoadState('networkidle');
const hasPersonalInfo = await page.locator('h3:has-text("Personal Information")').isVisible();
const hasOrgInfo = await page.locator('h3:has-text("Training Organization Information")').isVisible();
const hasVenueInfo = await page.locator('h3:has-text("Training Venue Information")').isVisible();
const hasOrgLogo = await page.locator('label:has-text("Organization Logo")').isVisible();
const hasHQFields = await page.locator('#hq_city').isVisible();
logTest('Personal Information section exists', hasPersonalInfo);
logTest('Training Organization Information section exists', hasOrgInfo);
logTest('Training Venue Information section exists', hasVenueInfo);
logTest('Organization Logo field exists', hasOrgLogo);
logTest('Headquarters fields exist', hasHQFields);
await page.screenshot({ path: 'screenshots/test-01-registration.png', fullPage: true });
// Test 2: Login
console.log('\n🔐 Testing Authentication');
console.log('-' . repeat(30));
await page.goto(`${BASE_URL}/training-login/`);
await page.fill('#user_login', 'test_trainer');
await page.fill('#user_pass', 'TestTrainer123!');
await page.click('#wp-submit');
await page.waitForLoadState('networkidle');
await page.waitForTimeout(3000);
const isLoggedIn = page.url().includes('/trainer/');
logTest('Login successful', isLoggedIn, `Redirected to: ${page.url()}`);
// Test 3: Trainer Pages
console.log('\n📄 Testing Trainer Pages');
console.log('-' . repeat(30));
const pages = [
{ name: 'Trainer Dashboard', url: '/trainer/dashboard/' },
{ name: 'Venues List', url: '/trainer/venue/list/' },
{ name: 'Venue Manage', url: '/trainer/venue/manage/' },
{ name: 'Profile View', url: '/trainer/profile/' },
{ name: 'Profile Edit', url: '/trainer/profile/edit/' },
{ name: 'Organizers List', url: '/trainer/organizer/list/' },
{ name: 'Organizer Manage', url: '/trainer/organizer/manage/' }
];
for (const pageInfo of pages) {
await page.goto(`${BASE_URL}${pageInfo.url}`);
await page.waitForLoadState('networkidle');
const finalUrl = page.url();
const isAccessible = !finalUrl.includes('login');
const title = await page.title();
logTest(`${pageInfo.name} accessible`, isAccessible,
isAccessible ? `Title: ${title}` : 'Redirected to login');
if (isAccessible && pageInfo.name.includes('List')) {
await page.screenshot({
path: `screenshots/test-${pageInfo.name.toLowerCase().replace(/\s+/g, '-')}.png`,
fullPage: true
});
}
}
// Test 4: Form Functionality
console.log('\n📋 Testing Form Functionality');
console.log('-' . repeat(30));
// Test venue creation form
await page.goto(`${BASE_URL}/trainer/venue/manage/`);
await page.waitForLoadState('networkidle');
const hasVenueForm = await page.locator('#hvac-venue-form').count() > 0;
const hasVenueName = await page.locator('#venue_name').count() > 0;
const hasSubmitButton = await page.locator('button[type="submit"]').count() > 0;
logTest('Venue form exists', hasVenueForm);
logTest('Venue name field exists', hasVenueName);
logTest('Submit button exists', hasSubmitButton);
// Test 5: Navigation and UI Elements
console.log('\n🧭 Testing Navigation Elements');
console.log('-' . repeat(30));
await page.goto(`${BASE_URL}/trainer/dashboard/`);
await page.waitForLoadState('networkidle');
// Check for navigation menu
const hasNavMenu = await page.locator('.hvac-trainer-nav').count() > 0;
const hasBreadcrumb = await page.locator('.hvac-breadcrumb').count() > 0;
// Check page structure
const hasHeader = await page.locator('h1, h2').first().count() > 0;
const hasContent = await page.locator('.entry-content, .page-content, main').count() > 0;
logTest('Navigation menu present', hasNavMenu);
logTest('Breadcrumb present', hasBreadcrumb);
logTest('Page has header', hasHeader);
logTest('Page has content area', hasContent);
// Test 6: AJAX Functionality
console.log('\n⚡ Testing AJAX Features');
console.log('-' . repeat(30));
// Check if AJAX scripts are loaded
const hasAjaxVar = await page.evaluate(() => typeof hvac_ajax !== 'undefined');
logTest('AJAX variables loaded', hasAjaxVar);
} catch (error) {
console.error('\n❌ Test Error:', error.message);
await page.screenshot({ path: 'screenshots/test-error.png', fullPage: true });
} finally {
// Summary
console.log('\n' + '=' . repeat(50));
console.log('📊 TEST SUMMARY');
console.log('=' . repeat(50));
console.log(`Total Tests: ${results.passed + results.failed}`);
console.log(`✅ Passed: ${results.passed}`);
console.log(`❌ Failed: ${results.failed}`);
console.log(`Success Rate: ${Math.round((results.passed / (results.passed + results.failed)) * 100)}%`);
if (results.failed > 0) {
console.log('\n❌ Failed Tests:');
results.tests.filter(t => !t.passed).forEach(t => {
console.log(` - ${t.name}`);
if (t.details) console.log(` ${t.details}`);
});
}
await browser.close();
}
}
testAllFeatures().catch(console.error);