import { test, expect } from '@playwright/test' async function createTestChild(request: any, name: string, age = 8): Promise { await request.put('/api/child/add', { data: { name, age } }) const listRes = await request.get('/api/child/list') const data = await listRes.json() const child = (data.children ?? []).find((c: any) => c.name === name) return child?.id ?? '' } test.describe('Child kebab menu – Delete Child', () => { test.describe.configure({ mode: 'serial' }) const CHILD_NAME = 'KebabDelete' let childId = '' test.afterEach(async ({ request }) => { // Best-effort cleanup in case the test did not delete the child if (childId) await request.delete(`/api/child/${childId}`) childId = '' }) test('Confirm deletes the child from the list', async ({ page, request }) => { childId = await createTestChild(request, CHILD_NAME) await page.goto('/parent') await expect(page.getByRole('heading', { name: CHILD_NAME })).toBeVisible() const card = page.locator('.card').filter({ hasText: CHILD_NAME }) await card.getByRole('button', { name: 'Options' }).click() await card.getByRole('button', { name: 'Delete Child' }).click() await expect(page.getByText('Are you sure you want to delete this child?')).toBeVisible() await page.getByRole('button', { name: 'Delete' }).click() await expect(page.getByRole('heading', { name: CHILD_NAME })).not.toBeVisible() childId = '' // already deleted, skip afterEach cleanup }) test('Cancel does not delete the child', async ({ page, request }) => { childId = await createTestChild(request, CHILD_NAME) await page.goto('/parent') await expect(page.getByRole('heading', { name: CHILD_NAME })).toBeVisible() const card = page.locator('.card').filter({ hasText: CHILD_NAME }) await card.getByRole('button', { name: 'Options' }).click() await card.getByRole('button', { name: 'Delete Child' }).click() await expect(page.getByText('Are you sure you want to delete this child?')).toBeVisible() await page.getByRole('button', { name: 'Cancel' }).click() await expect(page.getByText('Are you sure you want to delete this child?')).not.toBeVisible() await expect(page.getByRole('heading', { name: CHILD_NAME })).toBeVisible() }) })