Files
maestro/ui/e2e/auto-prompter.spec.ts
oss-sync 57702b4f34
CI / build-and-test (push) Canceled after 0s
sync: update from private repo (2336949a)
2026-09-17 11:29:31 +00:00

51 lines
2.5 KiB
TypeScript

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);
});