import { test, expect } from '@playwright/test' test.describe('page navigation — all routes load without crashes', () => { const routes = [ { path: '/', name: 'homepage' }, { path: '/arena', name: 'arena' }, { path: '/fight-card', name: 'fight card' }, { path: '/leaderboard', name: 'leaderboard' }, { path: '/training', name: 'practice/training' }, { path: '/feed', name: 'feed' }, { path: '/sprites', name: 'sprite preview' }, { path: '/docs', name: 'docs' }, { path: '/tournaments', name: 'tournaments' }, { path: '/join', name: 'join bout' }, { path: '/register', name: 'register' }, { path: '/schedule', name: 'schedule' }, ] for (const route of routes) { test(`${route.name} (${route.path}) loads without JS crashes`, async ({ page }) => { const criticalErrors: string[] = [] page.on('pageerror', err => { const msg = err.message if (msg.includes('TypeError') || msg.includes('ReferenceError') || msg.includes('SyntaxError')) { criticalErrors.push(msg) } }) await page.goto(route.path) await page.waitForTimeout(1500) expect(criticalErrors).toHaveLength(0) }) } }) test.describe('navigation flow', () => { test('can navigate from homepage to leaderboard via nav', async ({ page }) => { await page.goto('/') await page.waitForTimeout(500) // Click leaderboard link in nav or body const leaderboardLink = page.getByRole('link', { name: /leaderboard|rankings/i }).first() if (await leaderboardLink.isVisible()) { await leaderboardLink.click() await expect(page).toHaveURL(/leaderboard/) } }) test('can navigate from homepage to arena', async ({ page }) => { await page.goto('/') await page.waitForTimeout(500) const arenaLink = page.getByRole('link', { name: /arena|watch|fights/i }).first() if (await arenaLink.isVisible()) { await arenaLink.click() await expect(page).toHaveURL(/arena/) } }) test('/practice redirects to /training', async ({ page }) => { await page.goto('/practice') await expect(page).toHaveURL(/training/) }) }) test.describe('error handling', () => { test('bot profile with unknown name shows error state', async ({ page }) => { const criticalErrors: string[] = [] page.on('pageerror', err => { if (err.message.includes('ReferenceError') || err.message.includes('SyntaxError')) { criticalErrors.push(err.message) } }) await page.goto('/bot/nonexistent-bot-name-12345') await page.waitForTimeout(2000) expect(criticalErrors).toHaveLength(0) }) test('tournament with unknown ID shows error state', async ({ page }) => { const criticalErrors: string[] = [] page.on('pageerror', err => { if (err.message.includes('ReferenceError') || err.message.includes('SyntaxError')) { criticalErrors.push(err.message) } }) await page.goto('/tournament/nonexistent-id') await page.waitForTimeout(2000) expect(criticalErrors).toHaveLength(0) }) })