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.

44 lines
1.7 KiB
TypeScript

// frontend/playwright/multimodal.spec.ts — 멀티모달 캡처(이미지 캡션 / 음성 폴백) → 분류
import { expect, test } from "@playwright/test";
import { resetSeed } from "./fixtures/seed-reset";
test.describe.configure({ mode: "serial" });
test.beforeEach(async () => {
await resetSeed();
});
// 1x1 PNG
const PNG = Buffer.from(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",
"base64",
);
test("이미지 캡처 → 캡션 → 인박스 분류(image 행)", async ({ page }) => {
await page.goto("/inbox");
await expect(page.getByRole("button", { name: "이미지로 캡처" })).toBeVisible();
await page.locator('.sb-cmd input[type="file"]').setInputFiles({
name: "clip.png",
mimeType: "image/png",
buffer: PNG,
});
// 캡션 텍스트가 raw 로 채워진 image 캡처 행이 등장 + 분류 진행
const row = page.locator(".sb-cap", { hasText: "이미지 캡처" }).first();
await expect(row).toBeVisible();
await expect(row.locator(".cap-k.image")).toBeVisible();
});
test("마이크 미지원/거부 → 음성 폴백 문구로 캡처(graceful degrade)", async ({ page }) => {
// getUserMedia 미지원 환경을 강제 → phase-4 톤 폴백 경로 결정적 검증
await page.addInitScript(() => {
// getUserMedia 미지원 환경 시뮬레이션(mediaDevices 를 빈 객체로 치환)
Object.defineProperty(navigator, "mediaDevices", { value: {}, configurable: true });
});
await page.goto("/inbox");
await page.getByRole("button", { name: "음성으로 캡처" }).click();
await expect(
page.locator(".sb-cap", { hasText: "텍스트로 적어주세요" }).first(),
).toBeVisible();
});