51 lines
2.5 KiB
TypeScript
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);
|
|
});
|