import { test, expect, type Page } from '@playwright/test'; // Guards the title-on-nav behavior: without this, a stale title from // the last manga / author page lingers when the user navigates to a // generic page like /upload. async function mockAnonymous(page: Page) { await page.route('**/api/v1/auth/config', async (route) => { await route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ self_register_enabled: true, private_mode: false }) }); }); await page.route('**/api/v1/auth/me', async (route) => { await route.fulfill({ status: 401, contentType: 'application/json', body: JSON.stringify({ error: { code: 'unauthenticated', message: 'unauthenticated' } }) }); }); await page.route('**/api/v1/mangas*', async (route) => { await route.fulfill({ status: 200, contentType: 'application/json', body: JSON.stringify({ items: [], page: { limit: 50, offset: 0, total: 0 } }) }); }); } test('static route titles use the brand-first layout map', async ({ page }) => { await mockAnonymous(page); await page.goto('/'); await expect(page).toHaveTitle('Mangalord'); await page.goto('/upload'); await expect(page).toHaveTitle('Mangalord | Upload'); await page.goto('/login'); await expect(page).toHaveTitle('Mangalord | Login'); await page.goto('/bookmarks'); await expect(page).toHaveTitle('Mangalord | Bookmarks'); await page.goto('/collections'); await expect(page).toHaveTitle('Mangalord | Collections'); }); test('title updates when navigating away from a content page', async ({ page }) => { await mockAnonymous(page); // Pretend we just left a manga detail page — the document title // would have been overridden to "Mangalord | Berserk". Use evaluate // to set it synthetically so we can assert the regression cleanly // even though the dynamic page itself isn't mocked here. await page.goto('/'); await page.evaluate(() => { document.title = 'Mangalord | Berserk'; }); expect(await page.title()).toBe('Mangalord | Berserk'); // Client-side nav to /upload — the root layout must reassert its // mapped title or the stale "Berserk" lingers. await page.goto('/upload'); await expect(page).toHaveTitle('Mangalord | Upload'); });