import { test, expect } from '@playwright/test'; test.beforeEach(async ({ page }) => { await page.goto('/'); await page.evaluate(async () => { indexedDB.deleteDatabase('ttrpg-manager'); localStorage.clear(); }); await page.reload(); }); test('maps: upload, place token, reveal all, show to players', async ({ page }) => { await page.getByRole('button', { name: '+ New campaign' }).first().click(); await page.locator('input[data-autofocus]').fill('VTT'); await page.getByRole('button', { name: 'Create' }).click(); await page.getByRole('link', { name: 'Dashboard' }).click(); await page.getByRole('link', { name: 'Maps' }).click(); await page.locator('input[type="file"]').setInputFiles('public/pwa-512x512.png'); // Editor loads (Move tool present) await expect(page.getByRole('button', { name: 'move', exact: true })).toBeVisible(); // Add a token await page.getByRole('button', { name: '+ Token' }).click(); await expect(page.getByTestId('map-token')).toHaveCount(1); // Reveal tool exposes the contextual fog controls; reveal all await page.getByRole('button', { name: 'reveal', exact: true }).click(); await page.getByText('Fog', { exact: true }).locator('input[type=checkbox]').check(); await page.getByRole('button', { name: 'Reveal all' }).click(); // Show to players, then the player view renders the battle map await page.getByRole('button', { name: 'Show to players' }).click(); await page.getByRole('link', { name: 'Open player view ↗' }).click(); await expect(page.getByRole('heading', { name: 'Battle map' })).toBeVisible(); await expect(page.getByTestId('map-token')).toHaveCount(1); });