upskill-event-manager/test-login-and-edit.js
Ben 3d1fbaa770 fix: Resolve trainer event edit permissions and initial styling
- Fixed permission check in canUserEditEvent() method to properly check user roles
- Changed from checking non-existent 'hvac_trainer' capability to in_array('hvac_trainer', $user->roles)
- Trainers can now create new events and edit their own events
- Security maintained: trainers cannot edit others' events
- Added initial CSS file to fix narrow width and navigation z-index issues
- Page now displays at proper 1200px max width matching other trainer pages
- Navigation menu no longer hidden under site header (z-index: 100)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-18 20:19:50 -03:00

186 lines
No EOL
6.7 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Test Custom Event Edit with Better Login Debugging
*/
const { chromium } = require('playwright');
async function testLoginAndEdit() {
console.log('🔄 Testing Login and Custom Event Edit Form...\n');
const browser = await chromium.launch({
headless: false,
args: ['--disable-dev-shm-usage', '--no-sandbox']
});
const context = await browser.newContext({
viewport: { width: 1280, height: 720 }
});
const page = await context.newPage();
const baseUrl = process.env.UPSKILL_STAGING_URL || 'https://upskill-staging.measurequick.com';
try {
// Step 1: Navigate to login page
console.log('1⃣ Navigating to login page...');
await page.goto(`${baseUrl}/training-login/`);
await page.waitForLoadState('networkidle');
// Check if we see the login form
const loginForm = await page.$('form#hvac_community_loginform');
if (loginForm) {
console.log('✅ Login form found');
} else {
console.log('❌ Login form not found');
const forms = await page.$$('form');
console.log(` Found ${forms.length} form(s) on page`);
}
// Step 2: Fill and submit login
console.log('\n2⃣ Filling login credentials...');
// Try different selectors for username field
const usernameField = await page.$('input[name="log"]') ||
await page.$('input#user_login') ||
await page.$('input[name="username"]');
if (usernameField) {
await usernameField.fill('test_trainer');
console.log(' ✅ Username filled');
} else {
console.log(' ❌ Username field not found');
}
// Try different selectors for password field
const passwordField = await page.$('input[name="pwd"]') ||
await page.$('input#user_pass') ||
await page.$('input[name="password"]');
if (passwordField) {
await passwordField.fill('TestTrainer123!');
console.log(' ✅ Password filled');
} else {
console.log(' ❌ Password field not found');
}
// Take screenshot before submitting
await page.screenshot({
path: 'login-form-filled.png',
fullPage: false
});
console.log(' 📸 Screenshot saved: login-form-filled.png');
// Submit the form
console.log('\n3⃣ Submitting login form...');
// Try multiple submit methods
const submitButton = await page.$('input[type="submit"]') ||
await page.$('button[type="submit"]') ||
await page.$('#wp-submit');
if (submitButton) {
await Promise.all([
page.waitForNavigation({ waitUntil: 'networkidle' }),
submitButton.click()
]);
console.log(' ✅ Form submitted and navigation completed');
} else {
console.log(' ❌ Submit button not found');
}
// Step 4: Check where we ended up
console.log('\n4⃣ Checking authentication result...');
const currentUrl = page.url();
const currentTitle = await page.title();
console.log(` Current URL: ${currentUrl}`);
console.log(` Page Title: ${currentTitle}`);
// Check for login errors
const loginError = await page.$('.login-error') ||
await page.$('.hvac-login-error') ||
await page.$('#login_error');
if (loginError) {
const errorText = await loginError.textContent();
console.log(` ❌ Login error: ${errorText}`);
}
// Check if we're on the dashboard
if (currentUrl.includes('/dashboard/')) {
console.log(' ✅ Successfully redirected to dashboard!');
} else if (currentUrl.includes('/training-login/')) {
console.log(' ⚠️ Still on login page - authentication may have failed');
}
// Step 5: Try navigating to edit page
console.log('\n5⃣ Navigating to event edit page...');
const editUrl = `${baseUrl}/trainer/event/edit/?event_id=6161`;
await page.goto(editUrl);
await page.waitForLoadState('networkidle');
const editPageUrl = page.url();
const editPageTitle = await page.title();
console.log(` Current URL: ${editPageUrl}`);
console.log(` Page Title: ${editPageTitle}`);
// Check if we were redirected back to login
if (editPageUrl.includes('/training-login/')) {
console.log(' ❌ Redirected to login - not authenticated');
} else if (editPageUrl.includes('/trainer/event/edit/')) {
console.log(' ✅ On edit page!');
// Check for custom template marker
const pageContent = await page.content();
if (pageContent.includes('Custom Event Edit Template Loaded Successfully')) {
console.log(' ✅ Custom template is loading!');
} else {
console.log(' ⚠️ Custom template marker not found');
}
// Check for form wrapper
const formWrapper = await page.$('.hvac-event-edit-wrapper');
if (formWrapper) {
console.log(' ✅ Custom form wrapper found');
} else {
console.log(' ❌ Custom form wrapper NOT found');
}
}
// Take final screenshot
await page.screenshot({
path: `final-page-${Date.now()}.png`,
fullPage: true
});
console.log('\n📸 Final screenshot saved');
console.log('\n✅ Test Complete!');
} catch (error) {
console.error('\n❌ Test failed:', error.message);
await page.screenshot({
path: `error-${Date.now()}.png`,
fullPage: true
});
console.log('📸 Error screenshot saved');
throw error;
} finally {
// Keep browser open for manual inspection
console.log('\n⏸ Keeping browser open for 10 seconds...');
await page.waitForTimeout(10000);
await browser.close();
}
}
// Run test
testLoginAndEdit()
.then(() => {
console.log('\n✨ Test completed!');
process.exit(0);
})
.catch(error => {
console.error('\n💥 Test failed:', error);
process.exit(1);
});