|
|
// 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(<GuardPanel guard={guardOn} digests={digests} onToggle={() => {}} />);
|
|
|
expect(screen.getByText(/딥 워크 보호 중 — 16:00까지/)).toBeInTheDocument();
|
|
|
expect(screen.getByLabelText("집중 보호 켜기/끄기")).toHaveClass("on");
|
|
|
});
|
|
|
|
|
|
it("off 상태 — '보호 꺼짐' + sw.on 없음", () => {
|
|
|
render(<GuardPanel guard={{ ...guardOn, on: false }} digests={digests} onToggle={() => {}} />);
|
|
|
expect(screen.getByText("보호 꺼짐")).toBeInTheDocument();
|
|
|
expect(screen.getByLabelText("집중 보호 켜기/끄기")).not.toHaveClass("on");
|
|
|
});
|
|
|
|
|
|
it("토글 클릭 시 onToggle 호출", () => {
|
|
|
const onToggle = vi.fn();
|
|
|
render(<GuardPanel guard={guardOn} digests={digests} onToggle={onToggle} />);
|
|
|
fireEvent.click(screen.getByLabelText("집중 보호 켜기/끄기"));
|
|
|
expect(onToggle).toHaveBeenCalled();
|
|
|
});
|
|
|
|
|
|
it("묶음 배달 — done 행은 dg2-row done + '— 전달됨'", () => {
|
|
|
render(<GuardPanel guard={guardOn} digests={digests} onToggle={() => {}} />);
|
|
|
expect(screen.getByText("아침 브리핑 — 전달됨").closest(".dg2-row")).toHaveClass("done");
|
|
|
expect(screen.getByText("저녁 다이제스트").closest(".dg2-row")).not.toHaveClass("done");
|
|
|
});
|
|
|
});
|