1632018ce9
- BattleMap entity (image dataURL, grid, tokens, fog) — Dexie v5, repo, hook, cascade-deleted with campaign - Maps page: upload image (8MB cap), per-campaign list - Map editor canvas: grid overlay (toggle + cell size), fog of war (canvas) with reveal/hide painting + reveal-all/hide-all, draggable tokens that snap to the grid (pointer events, touch+mouse), add/remove tokens; debounced autosave - Dashboard + routes get a Maps entry New maps e2e (upload, add token, toggle fog). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
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 a token, toggle fog', 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();
|
|
|
|
// Upload an image into the hidden file input
|
|
await page.locator('input[type="file"]').setInputFiles('public/pwa-512x512.png');
|
|
|
|
// Editor loads (Move tool button present)
|
|
await expect(page.getByRole('button', { name: 'Move' })).toBeVisible();
|
|
|
|
// Add a token
|
|
await page.getByRole('button', { name: '+ Token' }).click();
|
|
await expect(page.getByTitle(/double-click to remove/)).toBeVisible();
|
|
|
|
// Toggle fog on (no crash)
|
|
await page.getByText('Fog', { exact: true }).locator('input').check();
|
|
await expect(page.getByRole('button', { name: 'Reveal all' })).toBeVisible();
|
|
});
|