import { fireEvent, render, screen } from "@testing-library/react"
import { beforeEach, describe, expect, it } from "vitest"
import { DecorList } from "@/features/editor/DecorList"
import { useBoothStore } from "@/stores/booth"
/* M4 (DESIGN-SYSTEM §11): padanan daftar untuk keyboard dan pembaca layar.
Kanvas tidak diuji di sini; berkas ini menjaga bahwa tiap operasi hias bisa
diselesaikan tanpa penunjuk. */
describe("DecorList", () => {
beforeEach(() => {
useBoothStore.getState().reset()
})
it("tidak dirender selama strip belum dihias", () => {
const { container } = render()
expect(container.firstChild).toBeNull()
expect(screen.queryByRole("region", { name: "Isi strip" })).toBeNull()
})
it("menampilkan stiker baru beserta posisinya", () => {
useBoothStore.getState().addSticker("star")
render()
expect(screen.getByText("Stiker Bintang")).toBeTruthy()
expect(screen.getByText("x 300 · y 900 · 120 px · -6°")).toBeTruthy()
expect(
screen.getByRole("button", { name: "Pindah kanan: Bintang" })
).toBeTruthy()
})
it("memindahkan dan menghapus stiker lewat tombol", () => {
useBoothStore.getState().addSticker("heart")
render()
fireEvent.click(screen.getByRole("button", { name: "Pindah kanan: Hati" }))
expect(screen.getByText("x 308 · y 900 · 120 px · -6°")).toBeTruthy()
fireEvent.click(screen.getByRole("button", { name: "Pindah atas: Hati" }))
expect(screen.getByText("x 308 · y 892 · 120 px · -6°")).toBeTruthy()
fireEvent.click(screen.getByRole("button", { name: "Putar: Hati" }))
expect(screen.getByText("x 308 · y 892 · 120 px · 9°")).toBeTruthy()
fireEvent.click(screen.getByRole("button", { name: "Perbesar: Hati" }))
expect(screen.getByText("x 308 · y 892 · 132 px · 9°")).toBeTruthy()
fireEvent.click(screen.getByRole("button", { name: "Perkecil: Hati" }))
expect(screen.getByText("x 308 · y 892 · 120 px · 9°")).toBeTruthy()
fireEvent.click(screen.getByRole("button", { name: "Hapus: Hati" }))
expect(screen.queryByText("Stiker Hati")).toBeNull()
expect(useBoothStore.getState().stickers).toEqual([])
})
it("menampilkan teks strip dengan tombol ukuran dan hapus", () => {
useBoothStore.getState().setStripText("halo")
render()
expect(screen.getByText("Teks halo")).toBeTruthy()
expect(screen.getByText("ukuran 44 px")).toBeTruthy()
fireEvent.click(screen.getByRole("button", { name: "Perbesar: Teks halo" }))
expect(useBoothStore.getState().texts[0].fontSize).toBe(48)
fireEvent.click(screen.getByRole("button", { name: "Hapus: Teks halo" }))
expect(useBoothStore.getState().texts).toEqual([])
})
})