Files
ttrpg_manager/e2e/maps.spec.ts
T
NilsBriggen 1632018ce9 Phase 7: maps & VTT
- 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>
2026-06-08 02:01:29 +02:00

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();
});