const { test, expect } = require('@playwright/test'); test.describe('IronKanban smoke', () => { test('loads the demo board and core UI sections', async ({ page }) => { await page.goto('/?project=demo-project'); await expect(page.getByRole('heading', { name: 'IronKanban' })).toBeVisible(); await expect(page.getByRole('heading', { name: 'Demo Project' })).toBeVisible(); await expect(page.locator('#board-columns .column')).toHaveCount(4); await expect(page.locator('#trash-panel')).toBeVisible(); await expect(page.locator('#notes-panel')).toBeVisible(); }); test('toggles notes and opens existing note and task dialogs', async ({ page }) => { await page.goto('/?project=demo-project'); const notesToggle = page.getByRole('button', { name: /Show Notes \(\d+\)/ }); await notesToggle.click(); await expect(page.getByRole('button', { name: /Hide Notes \(\d+\)/ })).toBeVisible(); await expect(page.locator('#notes-list .note-card')).toHaveCount(2); await page.locator('#notes-list .note-card').first().click(); await expect(page.locator('#note-dialog')).toBeVisible(); await expect(page.locator('#note-form input[name="title"]')).not.toHaveValue(''); await page.keyboard.press('Escape'); await expect(page.locator('#note-dialog')).not.toBeVisible(); await page.locator('#board-columns .task-card').first().click(); await expect(page.locator('#task-dialog')).toBeVisible(); await expect(page.locator('#task-form input[name="title"]')).not.toHaveValue(''); await page.keyboard.press('Escape'); await expect(page.locator('#task-dialog')).not.toBeVisible(); }); test('toggles the trash section and shows trashed tasks', async ({ page }) => { await page.goto('/?project=demo-project'); const trashToggle = page.getByRole('button', { name: /Show Trash \(\d+\)/ }); await trashToggle.click(); await expect(page.getByRole('button', { name: /Hide Trash \(\d+\)/ })).toBeVisible(); await expect(page.locator('#trash-columns .task-card')).toHaveCount(1); await expect(page.locator('#trash-dropzone-meta')).toContainText('1 task'); }); });