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