You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.6 KiB
TypeScript

// frontend/playwright/automation.spec.ts — 자동화 E2E
// 백엔드는 ARI_ALLOW_TEST_RESET=1 LLM_PROVIDER=heuristic 로 기동 가정.
import { expect, test } from "@playwright/test";
import { resetSeed } from "./fixtures/seed-reset";
test.describe.configure({ mode: "serial" });
test.beforeEach(async () => {
await resetSeed();
});
test("내 규칙: 7개 규칙·6개 켜짐·eyebrow 통계", async ({ page }) => {
await page.goto("/automation");
await expect(page.locator(".rl-row")).toHaveCount(7);
await expect(page.getByText("6/7 켜짐")).toBeVisible();
await expect(page.getByText("활성 규칙 6개")).toBeVisible();
await expect(page.getByText("이번 주 31회 실행")).toBeVisible();
await expect(page.getByText(/1시간 40분 아꼈어요/)).toBeVisible();
});
test("자연어 → 규칙 생성 → 목록 복귀 + 토스트", async ({ page }) => {
await page.goto("/automation");
await page.getByRole("button", { name: "새 자동화" }).click();
await page.getByRole("button", { name: /출장 전날엔 저녁 일정 비워줘/ }).click(); // 예시 칩
await expect(page.getByText("아리가 이렇게 이해했어요")).toBeVisible();
await expect(page.getByText("출장 전날이 되면")).toBeVisible(); // 트리거 칩
await page.getByRole("button", { name: "이 규칙 만들기" }).click();
await expect(page.locator(".au-toast")).toContainText("‘출장 전날 저녁 비우기’ 규칙을 켰어요.");
await expect(page.locator(".rl-row.rl-new")).toBeVisible(); // 목록에 새 규칙
});
test("규칙 토글 끄면 off 스타일", async ({ page }) => {
await page.goto("/automation");
const row = page.locator(".rl-row", { hasText: "수아님 메일은 바로" });
await row.getByRole("button").first().click(); // sw 토글
await expect(row).toHaveClass(/off/);
});
test("아리 제안: 수락 시 규칙 생성 + 목록 복귀", async ({ page }) => {
await page.goto("/automation");
await page.getByRole("button", { name: "아리 제안" }).click();
await expect(page.getByText("반복 패턴을 발견했어요")).toBeVisible();
await page
.locator(".sg-card", { hasText: "주간 리포트 미리 준비" })
.getByRole("button", { name: /규칙 만들기/ })
.click();
await expect(page.locator(".au-toast")).toContainText("‘주간 리포트 미리 준비’ 규칙을 켰어요.");
await expect(page.locator(".rl-row", { hasText: "주간 리포트 미리 준비" })).toBeVisible();
});
test("실행 기록 6건", async ({ page }) => {
await page.goto("/automation");
await page.getByRole("button", { name: "실행 기록" }).click();
await expect(page.locator(".lg-row")).toHaveCount(6);
});