1import { defineConfig, devices } from "@playwright/test"
2
3export default defineConfig({
4 testDir: "tests/e2e",
5 projects: [
6 {
7 name: "chromium",
8 use: {
9 ...devices["Desktop Chrome"],
10 /* ARCHITECTURE §10: kamera palsu supaya alur kamera bisa diuji otomatis. */
11 launchOptions: {
12 args: [
13 "--use-fake-ui-for-media-stream",
14 "--use-fake-device-for-media-stream",
15 ],
16 },
17 },
18 },
19 /* M9: lintas peramban. Hanya `crossbrowser.spec.ts` yang dijalankan di
20 sini, karena berkas lain butuh perangkat media palsu (bendera Chromium)
21 atau asersi khusus Chromium. Proyek `chromium` tetap memuat semua berkas,
22 termasuk crossbrowser.spec.ts. Edge memakai Edge yang terpasang di mesin
23 (`channel: "msedge"`). */
24 {
25 name: "firefox",
26 testMatch: "**/crossbrowser.spec.ts",
27 use: { ...devices["Desktop Firefox"] },
28 },
29 {
30 name: "webkit",
31 testMatch: "**/crossbrowser.spec.ts",
32 use: { ...devices["Desktop Safari"] },
33 },
34 /* Proyek `msedge` dilepas: `npx playwright install msedge` gagal di mesin
35 ini ("insufficient privileges") dan Edge tidak terpasang, sedangkan
36 mesinnya sama dengan Chromium. Edge sungguhan masuk tabel uji manual
37 pengguna di docs/DECISIONS.md (M9). */
38 ],
39 use: { baseURL: "http://localhost:3000" },
40 /* Headless Chromium merender MediaPipe tanpa GPU: inisialisasi model dan
41 inferensi pertama bisa memblokir main thread beberapa detik sehingga timer
42 hitung mundur meleset. Batas bawaan 5 detik terlalu ketat untuk lingkungan
43 itu (M3, DECISIONS.md). */
44 expect: { timeout: 15_000 },
45 webServer: {
46 command: "npm run dev",
47 url: "http://localhost:3000",
48 reuseExistingServer: true,
49 timeout: 120_000,
50 },
51})
52