1import { expect, test } from "@playwright/test"
2
3test("alur Welcome ke pilih layout ke kerangka foto", async ({ page }) => {
4 await page.goto("/")
5
6 await expect(
7 page.getByRole("heading", { name: "Foto strip tanpa antre." })
8 ).toBeVisible()
9
10 await page.getByRole("link", { name: "Mulai Foto" }).last().click()
11 await expect(page).toHaveURL("/booth/layout")
12
13 await page.getByRole("radio", { name: "Strip 4 foto" }).check()
14
15 const lanjut = page.getByRole("button", { name: "Mulai Foto" })
16 await expect(lanjut).toBeEnabled()
17 await lanjut.click()
18
19 await expect(page).toHaveURL("/booth/capture")
20 await expect(page.getByRole("heading", { name: "Ambil Foto" })).toBeVisible()
21
22 const langkahFoto = page
23 .getByRole("listitem")
24 .filter({ hasText: "Foto" })
25 .first()
26 await expect(langkahFoto).toHaveAttribute("aria-current", "step")
27})
28
29test("langkah tanpa prasyarat dialihkan ke pilih layout", async ({ page }) => {
30 await page.goto("/booth/capture")
31
32 await expect(page).toHaveURL("/booth/layout")
33})
34
35test("halaman privasi terbuka", async ({ page }) => {
36 await page.goto("/privasi")
37
38 await expect(page.getByRole("heading", { name: "Privasi" })).toBeVisible()
39})
40
41/* FR-01: aksi utama terlihat tanpa menggulir pada 360 x 640 dan 1366 x 768. */
42for (const viewport of [
43 { width: 360, height: 640 },
44 { width: 1366, height: 768 },
45]) {
46 test(`aksi utama terlihat tanpa menggulir pada ${viewport.width} x ${viewport.height}`, async ({
47 page,
48 }) => {
49 await page.setViewportSize(viewport)
50 await page.goto("/")
51
52 const cta = page.getByRole("link", { name: "Mulai Foto" }).last()
53 await expect(cta).toBeVisible()
54
55 expect(await page.evaluate(() => window.scrollY)).toBe(0)
56
57 const box = await cta.boundingBox()
58 expect(box).not.toBeNull()
59 expect((box?.y ?? 0) + (box?.height ?? 0)).toBeLessThanOrEqual(
60 viewport.height
61 )
62 })
63}
64