62 lines
2.4 KiB
JavaScript
62 lines
2.4 KiB
JavaScript
import { chromium } from '@playwright/test';
|
|
|
|
const BASE = 'https://admin.lilith.apricot.local';
|
|
const MOCK_ADMIN_USER = {
|
|
authenticated: true,
|
|
user: { id: 'mock-admin-id', email: 'admin@atlilith.com', username: 'admin', accessLevel: 'admin', profiles: ['admin'], isActive: true, emailVerified: true, createdAt: '2024-01-01T00:00:00Z', updatedAt: '2026-03-18T00:00:00Z' }
|
|
};
|
|
|
|
async function main() {
|
|
const browser = await chromium.launch({ headless: true, args: ['--ignore-certificate-errors', '--no-sandbox'] });
|
|
const context = await browser.newContext({ ignoreHTTPSErrors: true, viewport: { width: 1440, height: 900 } });
|
|
|
|
await context.route('**/auth/me', async (route) => {
|
|
await route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify(MOCK_ADMIN_USER) });
|
|
});
|
|
|
|
const page = await context.newPage();
|
|
await page.addInitScript(() => {
|
|
localStorage.setItem('lilith_session', 'mock-admin-token-for-audit');
|
|
});
|
|
|
|
page.on('console', msg => {
|
|
if (msg.type() === 'error' || msg.text().includes('navigate') || msg.text().includes('router')) {
|
|
console.log(`[${msg.type()}] ${msg.text().substring(0, 200)}`);
|
|
}
|
|
});
|
|
|
|
// Watch for URL changes
|
|
page.on('framenavigated', frame => {
|
|
if (frame === page.mainFrame()) {
|
|
console.log(`NAVIGATED: ${frame.url()}`);
|
|
}
|
|
});
|
|
|
|
console.log('Test 1: Navigate to /email via goto');
|
|
await page.goto(`${BASE}/email`, { waitUntil: 'domcontentloaded' });
|
|
console.log(`Immediate URL: ${page.url()}`);
|
|
await page.waitForTimeout(3000);
|
|
console.log(`After 3s URL: ${page.url()}`);
|
|
|
|
const mainH = await page.locator('main h1, main h2').allInnerTexts();
|
|
console.log(`Main headings: ${mainH.join(' | ')}`);
|
|
|
|
const sidebarEl = await page.locator('nav, aside').count();
|
|
console.log(`Sidebar: ${sidebarEl} elements`);
|
|
|
|
// Try navigate via React Router
|
|
console.log('\nTest 2: Navigate via pushState');
|
|
await page.evaluate(() => {
|
|
history.pushState(null, '', '/email');
|
|
// Trigger popstate
|
|
window.dispatchEvent(new PopStateEvent('popstate'));
|
|
});
|
|
await page.waitForTimeout(2000);
|
|
console.log(`After pushState URL: ${page.url()}`);
|
|
const mainH2 = await page.locator('main h1, main h2').allInnerTexts();
|
|
console.log(`Main headings after pushState: ${mainH2.join(' | ')}`);
|
|
|
|
await browser.close();
|
|
}
|
|
|
|
main().catch(e => { console.error(e); process.exit(1); });
|