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('worldbuilding: dashboard, note with wiki link, npc, quest, calendar', async ({ page }) => { // Create campaign, then open its dashboard await page.getByRole('button', { name: '+ New campaign' }).first().click(); await page.locator('input[data-autofocus]').fill('Barovia'); await page.getByRole('button', { name: 'Create' }).click(); await page.getByRole('link', { name: 'Dashboard' }).click(); await expect(page.getByRole('heading', { name: 'Barovia' })).toBeVisible(); // Notes: create two and link them await page.getByRole('link', { name: 'Notes & Wiki' }).click(); await page.getByRole('button', { name: '+ New note' }).first().click(); await page.getByLabel('Note title').fill('Strahd'); await page.getByPlaceholder(/Write here/).fill('Lord of [[Castle Ravenloft]].'); // The link is "missing" until created; click it to create the target note await page.getByRole('button', { name: 'Castle Ravenloft' }).click(); await expect(page.getByLabel('Note title')).toHaveValue('Castle Ravenloft'); // Backlink from Strahd should appear await expect(page.getByText('Linked from')).toBeVisible(); // NPC await page.getByRole('link', { name: 'Dashboard' }).click(); await page.getByRole('link', { name: 'NPCs' }).click(); await page.getByRole('button', { name: '+ New NPC' }).first().click(); await expect(page.getByLabel('NPC name')).toBeVisible(); // Quest with an objective await page.getByRole('link', { name: 'Dashboard' }).click(); await page.getByRole('link', { name: 'Quests' }).click(); await page.getByRole('button', { name: '+ New quest' }).first().click(); await page.getByPlaceholder('Add objective…').fill('Find the Tome'); await page.getByRole('button', { name: 'Add', exact: true }).click(); await expect(page.locator('input[value="Find the Tome"]')).toBeVisible(); // Calendar advances days await page.getByRole('link', { name: 'Dashboard' }).click(); await page.getByRole('link', { name: 'Calendar' }).click(); await page.getByRole('button', { name: '+1 week' }).click(); await expect(page.getByText('7', { exact: true })).toBeVisible(); });