upskill-event-manager/test-detailed-debug.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

199 lines
No EOL
7.4 KiB
JavaScript
Raw Permalink 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.

/**
* Detailed debugging to understand the redirect behavior
*/
const { chromium } = require('playwright');
async function testDetailedDebug() {
console.log('🔍 Testing Detailed Debug...\\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 = 'https://upskill-staging.measurequick.com';
// Track all requests and responses
const requests = [];
const responses = [];
page.on('request', request => {
requests.push({
url: request.url(),
method: request.method(),
headers: request.headers()
});
console.log(`📤 REQUEST: ${request.method()} ${request.url()}`);
});
page.on('response', response => {
responses.push({
url: response.url(),
status: response.status(),
headers: response.headers()
});
console.log(`📥 RESPONSE: ${response.status()} ${response.url()}`);
if (response.status() >= 300 && response.status() < 400) {
console.log(`🔄 REDIRECT: ${response.status()} - Location: ${response.headers()['location'] || 'Not specified'}`);
}
});
try {
// Step 1: Login first
console.log('1⃣ Logging in...');
await page.goto(`${baseUrl}/training-login/`);
await page.waitForLoadState('networkidle');
// Wait for form to be visible
await page.waitForSelector('input[name="log"]', { timeout: 10000 });
console.log(' Filling login form...');
await page.fill('input[name="log"]', 'test_trainer');
await page.fill('input[name="pwd"]', 'TestTrainer123!');
// Try different submission methods
const submitButton = await page.$('input[type="submit"]');
const form = await page.$('form#loginform, form.wp-form');
console.log(' Submit button found:', !!submitButton);
console.log(' Form found:', !!form);
if (submitButton) {
console.log(' Clicking submit button...');
await Promise.all([
page.waitForNavigation({ waitUntil: 'networkidle', timeout: 15000 }),
submitButton.click()
]);
} else if (form) {
console.log(' Submitting form...');
await Promise.all([
page.waitForNavigation({ waitUntil: 'networkidle', timeout: 15000 }),
form.evaluate(form => form.submit())
]);
} else {
console.log(' Trying Enter key...');
await page.press('input[name="pwd"]', 'Enter');
await page.waitForNavigation({ waitUntil: 'networkidle', timeout: 15000 });
}
const afterLoginUrl = page.url();
console.log('✅ Logged in - Current URL:', afterLoginUrl);
// Check login status
console.log('\\n2⃣ Checking login status...');
const loginStatus = await page.evaluate(() => {
// Check for login indicators
const body = document.body.innerHTML;
const hasLogoutLink = body.includes('logout') || body.includes('Logout');
const hasLoginForm = body.includes('name="log"') && body.includes('name="pwd"');
return {
hasLogoutLink,
hasLoginForm,
bodySnippet: body.substring(0, 500)
};
});
console.log(' Has logout link:', loginStatus.hasLogoutLink);
console.log(' Has login form:', loginStatus.hasLoginForm);
if (loginStatus.hasLoginForm) {
console.log('❌ Still on login page - authentication failed');
await page.screenshot({ path: `auth-failed-${Date.now()}.png` });
return;
}
// Wait a moment for any auth cookies to settle
await page.waitForTimeout(2000);
// Step 3: Navigate to edit page and track redirects
console.log('\\n3⃣ Navigating to edit page...');
const targetUrl = `${baseUrl}/trainer/event/edit/?event_id=6161`;
console.log(' Target URL:', targetUrl);
// Clear request/response arrays
requests.length = 0;
responses.length = 0;
await page.goto(targetUrl, { waitUntil: 'networkidle' });
const finalUrl = page.url();
console.log(' Final URL:', finalUrl);
// Analyze the redirect chain
console.log('\\n4⃣ Redirect Analysis:');
const redirectChain = responses.filter(r => r.status >= 300 && r.status < 400);
if (redirectChain.length > 0) {
console.log(` Found ${redirectChain.length} redirects:`);
redirectChain.forEach((redirect, index) => {
console.log(` ${index + 1}. ${redirect.status} - ${redirect.url}`);
if (redirect.headers['location']) {
console.log(` → Location: ${redirect.headers['location']}`);
}
});
} else {
console.log(' No redirects detected');
}
// Check final page content
console.log('\\n5⃣ Final Page Analysis:');
const pageAnalysis = await page.evaluate(() => {
const title = document.title;
const hasLoginForm = document.querySelector('input[name="log"]') !== null;
const hasEventForm = document.querySelector('.hvac-event-form') !== null;
const hasCustomTemplate = document.body.innerHTML.includes('Custom Event Edit Template Loaded Successfully');
const mainContent = document.querySelector('#main, .site-main, [role="main"]');
return {
title,
hasLoginForm,
hasEventForm,
hasCustomTemplate,
mainContentSnippet: mainContent ? mainContent.innerHTML.substring(0, 300) : 'Main content not found'
};
});
console.log(' Page title:', pageAnalysis.title);
console.log(' Has login form:', pageAnalysis.hasLoginForm);
console.log(' Has event form:', pageAnalysis.hasEventForm);
console.log(' Has custom template marker:', pageAnalysis.hasCustomTemplate);
console.log(' Main content snippet:', pageAnalysis.mainContentSnippet);
// Take screenshot
await page.screenshot({
path: `detailed-debug-${Date.now()}.png`,
fullPage: true
});
console.log('\\n📸 Screenshot saved');
} catch (error) {
console.error('\\n❌ Test failed:', error.message);
await page.screenshot({
path: `error-detailed-${Date.now()}.png`,
fullPage: true
});
} finally {
console.log('\\n⏸ Keeping browser open for inspection...');
await page.waitForTimeout(10000);
await browser.close();
}
}
// Run test
testDetailedDebug()
.then(() => {
console.log('\\n✨ Test completed!');
process.exit(0);
})
.catch(error => {
console.error('\\n💥 Test failed:', error);
process.exit(1);
});