// frontend/tests/notify/GuardPanel.test.tsx — 토글 on/off 클래스 + 문구 전환 import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { GuardPanel } from "@/components/notify/GuardPanel"; import type { Digest, NotifyGuard } from "@/lib/types"; const guardOn: NotifyGuard = { on: true, until: "16:00", held: 4, quiet: "22:30 – 07:00" }; const digests: Digest[] = [ { id: "dg-am", time: "09:00", name: "아침 브리핑", desc: "밤사이 변화", count: 11, done: true }, { id: "dg-eve", time: "18:30", name: "저녁 다이제스트", desc: "소식", count: 12, done: false }, ]; describe("GuardPanel", () => { it("on 상태 — '딥 워크 보호 중' + sw.on 클래스", () => { render( {}} />); expect(screen.getByText(/딥 워크 보호 중 — 16:00까지/)).toBeInTheDocument(); expect(screen.getByLabelText("집중 보호 켜기/끄기")).toHaveClass("on"); }); it("off 상태 — '보호 꺼짐' + sw.on 없음", () => { render( {}} />); expect(screen.getByText("보호 꺼짐")).toBeInTheDocument(); expect(screen.getByLabelText("집중 보호 켜기/끄기")).not.toHaveClass("on"); }); it("토글 클릭 시 onToggle 호출", () => { const onToggle = vi.fn(); render(); fireEvent.click(screen.getByLabelText("집중 보호 켜기/끄기")); expect(onToggle).toHaveBeenCalled(); }); it("묶음 배달 — done 행은 dg2-row done + '— 전달됨'", () => { render( {}} />); expect(screen.getByText("아침 브리핑 — 전달됨").closest(".dg2-row")).toHaveClass("done"); expect(screen.getByText("저녁 다이제스트").closest(".dg2-row")).not.toHaveClass("done"); }); });