- Removed PHP 7.4+ type declarations (private int, return types) that were causing fatal errors - Fixed constructor parameter and property declarations for older PHP versions - Created minimal dashboard data class as emergency fallback - Root cause: Server running older PHP version incompatible with modern type declarations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
146 lines
No EOL
6.6 KiB
TypeScript
146 lines
No EOL
6.6 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test('Login and Dashboard Deep Test', async ({ page }) => {
|
|
console.log('=== Testing Login and Dashboard for Critical Errors ===');
|
|
|
|
// Test multiple login scenarios to trigger potential errors
|
|
const loginAttempts = [
|
|
{ username: 'test_trainer', password: 'Test123!', name: 'test_trainer' },
|
|
{ username: 'devadmin', password: 'zc3CQlCOr9ZZBZDakecTqcOt', name: 'devadmin' },
|
|
{ username: 'invalid_user', password: 'wrong_pass', name: 'invalid' }
|
|
];
|
|
|
|
for (const attempt of loginAttempts) {
|
|
console.log(`\n--- Testing login with ${attempt.name} ---`);
|
|
|
|
try {
|
|
// Clear cookies and storage
|
|
await page.context().clearCookies();
|
|
await page.evaluate(() => localStorage.clear());
|
|
await page.evaluate(() => sessionStorage.clear());
|
|
|
|
// Go to community login
|
|
await page.goto('https://upskill-staging.measurequick.com/community-login/', { waitUntil: 'networkidle' });
|
|
|
|
// Fill login form
|
|
await page.fill('#user_login', attempt.username);
|
|
await page.fill('#user_pass', attempt.password);
|
|
await page.click('#wp-submit');
|
|
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
console.log(` URL after login: ${page.url()}`);
|
|
|
|
// Check for any critical errors
|
|
const hasCriticalError = await page.locator('text=critical error').count() > 0;
|
|
const hasWordPressFatalError = await page.locator('text=There has been a critical error').count() > 0;
|
|
const hasPhpError = await page.locator('text=Fatal error').count() > 0;
|
|
const hasParseError = await page.locator('text=Parse error').count() > 0;
|
|
const hasCallStackError = await page.locator('text=Call Stack').count() > 0;
|
|
|
|
if (hasCriticalError || hasWordPressFatalError || hasPhpError || hasParseError || hasCallStackError) {
|
|
console.log(` ❌ CRITICAL ERROR DETECTED for ${attempt.name}`);
|
|
|
|
// Get full page text for analysis
|
|
const bodyText = await page.locator('body').textContent();
|
|
const errorLines = bodyText?.split('\n').filter(line =>
|
|
line.includes('Fatal') ||
|
|
line.includes('critical') ||
|
|
line.includes('Error') ||
|
|
line.includes('Call Stack') ||
|
|
line.includes('.php')
|
|
).slice(0, 15) || [];
|
|
|
|
console.log(' Error details:');
|
|
errorLines.forEach((line, i) => {
|
|
if (line.trim()) console.log(` ${i + 1}: ${line.trim()}`);
|
|
});
|
|
|
|
await page.screenshot({
|
|
path: `critical-error-login-${attempt.name}.png`,
|
|
fullPage: true
|
|
});
|
|
} else {
|
|
console.log(` ✅ No critical error for ${attempt.name}`);
|
|
}
|
|
|
|
// If login successful, try to access dashboard
|
|
if (page.url().includes('hvac-dashboard') || !page.url().includes('login')) {
|
|
console.log(` Successful login for ${attempt.name}, testing dashboard...`);
|
|
|
|
// Navigate to dashboard directly
|
|
await page.goto('https://upskill-staging.measurequick.com/hvac-dashboard/', { waitUntil: 'networkidle' });
|
|
|
|
const dashboardHasError = await page.locator('text=critical error').count() > 0 ||
|
|
await page.locator('text=There has been a critical error').count() > 0;
|
|
|
|
if (dashboardHasError) {
|
|
console.log(` ❌ DASHBOARD ERROR for ${attempt.name}`);
|
|
await page.screenshot({
|
|
path: `dashboard-error-${attempt.name}.png`,
|
|
fullPage: true
|
|
});
|
|
} else {
|
|
console.log(` ✅ Dashboard loads without error for ${attempt.name}`);
|
|
}
|
|
|
|
// Test certificate reports
|
|
await page.goto('https://upskill-staging.measurequick.com/certificate-reports/', { waitUntil: 'networkidle' });
|
|
|
|
const certHasError = await page.locator('text=critical error').count() > 0 ||
|
|
await page.locator('text=There has been a critical error').count() > 0;
|
|
|
|
if (certHasError) {
|
|
console.log(` ❌ CERTIFICATE REPORTS ERROR for ${attempt.name}`);
|
|
await page.screenshot({
|
|
path: `cert-reports-error-${attempt.name}.png`,
|
|
fullPage: true
|
|
});
|
|
} else {
|
|
console.log(` ✅ Certificate reports loads without error for ${attempt.name}`);
|
|
}
|
|
}
|
|
|
|
} catch (error) {
|
|
console.log(` ❌ Exception during ${attempt.name} test: ${error}`);
|
|
await page.screenshot({
|
|
path: `exception-${attempt.name}.png`
|
|
});
|
|
}
|
|
}
|
|
|
|
// Test admin area with different credentials
|
|
console.log(`\n--- Testing WP Admin Access ---`);
|
|
|
|
try {
|
|
await page.context().clearCookies();
|
|
await page.goto('https://upskill-staging.measurequick.com/wp-admin/', { waitUntil: 'networkidle' });
|
|
|
|
// Try admin login with the API credentials
|
|
await page.fill('#user_login', 'devadmin');
|
|
await page.fill('#user_pass', 'zc3CQlCOr9ZZBZDakecTqcOt');
|
|
await page.click('#wp-submit');
|
|
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
console.log(` Admin area URL: ${page.url()}`);
|
|
|
|
const adminHasError = await page.locator('text=critical error').count() > 0 ||
|
|
await page.locator('text=There has been a critical error').count() > 0;
|
|
|
|
if (adminHasError) {
|
|
console.log(` ❌ ADMIN AREA ERROR`);
|
|
await page.screenshot({
|
|
path: `admin-area-error.png`,
|
|
fullPage: true
|
|
});
|
|
} else {
|
|
console.log(` ✅ Admin area loads without error`);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.log(` ❌ Exception during admin test: ${error}`);
|
|
}
|
|
|
|
console.log('\n=== Login and Dashboard Test Complete ===');
|
|
}); |