- 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>
167 lines
No EOL
6.4 KiB
JavaScript
167 lines
No EOL
6.4 KiB
JavaScript
/**
|
||
* Test to get detailed error information from the edit page
|
||
*/
|
||
|
||
const { chromium } = require('playwright');
|
||
|
||
async function testErrorDetails() {
|
||
console.log('🔍 Testing Error Details...\\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';
|
||
|
||
try {
|
||
// Step 1: Login first
|
||
console.log('1️⃣ Logging in...');
|
||
await page.goto(`${baseUrl}/training-login/`);
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
await page.fill('input[name="log"]', 'test_trainer');
|
||
await page.fill('input[name="pwd"]', 'TestTrainer123!');
|
||
await page.press('input[name="pwd"]', 'Enter');
|
||
|
||
// Wait for redirect
|
||
await page.waitForURL('**/trainer/dashboard/**', { timeout: 10000 });
|
||
console.log('✅ Login successful');
|
||
|
||
// Step 2: Go to edit page and capture detailed error
|
||
console.log('\\n2️⃣ Accessing edit page and capturing error details...');
|
||
|
||
await page.goto(`${baseUrl}/trainer/event/edit/`);
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
const errorDetails = await page.evaluate(() => {
|
||
const title = document.title;
|
||
const bodyContent = document.body.innerText;
|
||
const htmlContent = document.body.innerHTML;
|
||
|
||
// Look for specific error patterns
|
||
const has404 = bodyContent.includes('404') || bodyContent.includes('not found') ||
|
||
bodyContent.includes('Not Found') || title.includes('404');
|
||
|
||
const hasError = bodyContent.includes('error') || bodyContent.includes('Error') ||
|
||
title.includes('Error');
|
||
|
||
const hasDebug = bodyContent.includes('PHP') || bodyContent.includes('Fatal') ||
|
||
bodyContent.includes('Warning') || bodyContent.includes('Notice');
|
||
|
||
// Extract first 1000 characters of body content for analysis
|
||
const bodySnippet = bodyContent.substring(0, 1000);
|
||
|
||
// Look for specific WordPress error messages
|
||
const hasTemplateError = bodyContent.includes('template') || bodyContent.includes('Template');
|
||
const hasPermissionError = bodyContent.includes('permission') || bodyContent.includes('Permission');
|
||
|
||
return {
|
||
title,
|
||
has404,
|
||
hasError,
|
||
hasDebug,
|
||
hasTemplateError,
|
||
hasPermissionError,
|
||
bodySnippet,
|
||
htmlSnippet: htmlContent.substring(0, 1500)
|
||
};
|
||
});
|
||
|
||
console.log(' Page title:', errorDetails.title);
|
||
console.log(' Has 404 error:', errorDetails.has404);
|
||
console.log(' Has error message:', errorDetails.hasError);
|
||
console.log(' Has PHP debug info:', errorDetails.hasDebug);
|
||
console.log(' Has template error:', errorDetails.hasTemplateError);
|
||
console.log(' Has permission error:', errorDetails.hasPermissionError);
|
||
|
||
console.log('\\n Body content snippet:');
|
||
console.log(' ' + errorDetails.bodySnippet.replace(/\\n/g, '\\n '));
|
||
|
||
console.log('\\n HTML content snippet:');
|
||
console.log(' ' + errorDetails.htmlSnippet.replace(/\\n/g, '\\n '));
|
||
|
||
// Step 3: Test with event_id parameter
|
||
console.log('\\n3️⃣ Testing with event_id parameter...');
|
||
|
||
await page.goto(`${baseUrl}/trainer/event/edit/?event_id=6161`);
|
||
await page.waitForLoadState('networkidle');
|
||
|
||
const withParamDetails = await page.evaluate(() => {
|
||
const title = document.title;
|
||
const bodyContent = document.body.innerText;
|
||
const hasCustomTemplate = bodyContent.includes('Custom Event Edit Template') ||
|
||
document.body.innerHTML.includes('Custom Event Edit Template');
|
||
|
||
return {
|
||
title,
|
||
bodySnippet: bodyContent.substring(0, 500),
|
||
hasCustomTemplate
|
||
};
|
||
});
|
||
|
||
console.log(' With event_id - Title:', withParamDetails.title);
|
||
console.log(' With event_id - Has custom template:', withParamDetails.hasCustomTemplate);
|
||
console.log(' With event_id - Body snippet:');
|
||
console.log(' ' + withParamDetails.bodySnippet.replace(/\\n/g, '\\n '));
|
||
|
||
// Step 4: Check URL variations
|
||
console.log('\\n4️⃣ Testing URL variations...');
|
||
|
||
const urlVariations = [
|
||
'/trainer/event/edit',
|
||
'/trainer/event/edit/',
|
||
'/trainer/event/edit/?event_id=123',
|
||
'/trainer/events/edit/',
|
||
'/trainer/edit-event/'
|
||
];
|
||
|
||
for (const url of urlVariations) {
|
||
await page.goto(`${baseUrl}${url}`);
|
||
await page.waitForLoadState('networkidle', { timeout: 5000 });
|
||
|
||
const result = await page.evaluate(() => ({
|
||
title: document.title,
|
||
url: window.location.href,
|
||
hasError: document.title.includes('Error') || document.body.innerText.includes('404')
|
||
}));
|
||
|
||
console.log(` ${url} -> ${result.hasError ? '❌' : '✅'} ${result.title}`);
|
||
}
|
||
|
||
// Take screenshot
|
||
await page.screenshot({
|
||
path: `error-details-${Date.now()}.png`,
|
||
fullPage: true
|
||
});
|
||
console.log('\\n📸 Screenshot saved');
|
||
|
||
} catch (error) {
|
||
console.error('\\n❌ Test failed:', error.message);
|
||
|
||
await page.screenshot({
|
||
path: `error-test-failed-${Date.now()}.png`,
|
||
fullPage: true
|
||
});
|
||
} finally {
|
||
console.log('\\n⏸️ Keeping browser open for inspection...');
|
||
await page.waitForTimeout(10000);
|
||
await browser.close();
|
||
}
|
||
}
|
||
|
||
// Run test
|
||
testErrorDetails()
|
||
.then(() => {
|
||
console.log('\\n✨ Test completed!');
|
||
process.exit(0);
|
||
})
|
||
.catch(error => {
|
||
console.error('\\n💥 Test failed:', error);
|
||
process.exit(1);
|
||
}); |