import { test, expect } from '@playwright/test'; import { openSpaceTab } from './helpers/spaceTabs'; const createCaseSpace = async (page: import('@playwright/test').Page) => { await page.goto('/ui?page=spaces'); await page.getByTestId('create-space-btn').click(); const title = `E2E自動ルール-${Date.now()}`; await page.getByTestId('space-title-input').fill(title); await page.getByTestId('space-form-submit').click(); const row = page.getByTestId('space-rail') .locator('[data-testid="space-row"][data-space-kind="case"]') .filter({ hasText: title }); await expect(row).toBeVisible(); await row.click(); return await row.getAttribute('data-space-id') as string; }; test('Auto Prompter: default OFF, retain rules while OFF, enable, and delete', async ({ page }) => { const spaceId = await createCaseSpace(page); await openSpaceTab(page, 'settings'); await page.getByTestId('space-settings-nav-auto-prompter').click(); const panel = page.getByTestId('space-auto-prompter-settings'); await expect(panel).toBeVisible(); const master = panel.getByRole('switch', { name: 'Auto Prompterを有効にする' }); await expect(master).toHaveAttribute('aria-checked', 'false'); await expect(panel).toContainText('オフにしても登録済みのルールは保持されます'); await panel.getByRole('button', { name: 'ルールを作成' }).click(); await panel.locator('#auto-prompter-template').selectOption('official_docs'); await panel.getByRole('button', { name: '保存' }).click(); await expect(panel.getByText('コマンドは公式資料を確認する', { exact: true })).toBeVisible(); const offState = await page.request.get(`/api/local/spaces/${encodeURIComponent(spaceId)}/auto-prompter`); expect(offState.ok()).toBeTruthy(); const offPayload = await offState.json(); expect(offPayload).toMatchObject({ enabled: false }); expect(offPayload.rules).toHaveLength(1); await master.click(); await expect(master).toHaveAttribute('aria-checked', 'true'); await expect.poll(async () => { const response = await page.request.get(`/api/local/spaces/${encodeURIComponent(spaceId)}/auto-prompter`); return (await response.json()).enabled; }).toBe(true); page.once('dialog', dialog => void dialog.accept()); await panel.getByRole('button', { name: '「コマンドは公式資料を確認する」を削除' }).click(); await expect(panel.getByText('コマンドは公式資料を確認する', { exact: true })).toHaveCount(0); });