import { test, expect } from '@playwright/test'; test.describe('Task Management', () => { // These tests assume user is authenticated. // In a real scenario, we'd use a storage state or login in beforeEach. // For now, we'll assume navigation to / leads to a functional dashboard if already logged in locally. test.beforeEach(async ({ page }) => { await page.goto('/'); // Check if we are on the dashboard, otherwise skip or handle login // await expect(page).toHaveURL(/.*tasks|dashboard/); }); test('should create a new task', async ({ page }) => { const taskInput = page.locator('[data-testid="task-input"]'); if (await taskInput.isVisible()) { const taskTitle = `New Task ${Date.now()}`; await taskInput.fill(taskTitle); await page.keyboard.press('Enter'); await expect(page.getByText(taskTitle)).toBeVisible(); } }); test('should mark a task as completed', async ({ page }) => { // Find the first task checkbox const firstTaskCheckbox = page.locator('input[type="checkbox"]').first(); if (await firstTaskCheckbox.isVisible()) { const isChecked = await firstTaskCheckbox.isChecked(); await firstTaskCheckbox.click(); await expect(firstTaskCheckbox).toBeChecked({ checked: !isChecked }); } }); test('should delete a task', async ({ page }) => { // Find a task and its delete button // This depends heavily on the UI structure const taskItem = page.locator('[data-testid^="task-item-"]').first(); if (await taskItem.isVisible()) { const deleteButton = taskItem.locator('button').filter({ has: page.locator('svg') }); // Simple heuristic for icon button await deleteButton.click(); // Should no longer be in the document await expect(taskItem).not.toBeVisible(); } }); });