You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
// frontend/tests/approvals/ApprovalCard.test.tsx
|
|
import { render, screen } from "@testing-library/react";
|
|
import { describe, expect, it } from "vitest";
|
|
import { ApprovalCard } from "@/components/approvals/ApprovalCard";
|
|
import type { ApprovalOut } from "@/lib/types";
|
|
|
|
const base: ApprovalOut = {
|
|
id: "a4",
|
|
icon: "mail",
|
|
tone: "violet",
|
|
risk: "high",
|
|
time: "보내기 대기",
|
|
title: "현우님께 회신 초안이 준비됐어요",
|
|
detail: "d",
|
|
cta: "보내기",
|
|
alt: "수정",
|
|
undo_label: "",
|
|
status: "pending",
|
|
source: "mail",
|
|
rule_id: null,
|
|
sort_order: 3,
|
|
};
|
|
|
|
const noop = () => {};
|
|
|
|
describe("ApprovalCard", () => {
|
|
it("pending 0이면 빈 상태 문구를 보여준다", () => {
|
|
render(
|
|
<ApprovalCard saved="47분" pending={[]} done={[]} onApprove={noop} onUndo={noop} onApproveAll={noop} />,
|
|
);
|
|
expect(screen.getByText(/결재할 게 없어요/)).toBeInTheDocument();
|
|
});
|
|
|
|
it("high 카드의 cta/alt 라벨을 렌더한다", () => {
|
|
render(
|
|
<ApprovalCard saved="47분" pending={[base]} done={[]} onApprove={noop} onUndo={noop} onApproveAll={noop} />,
|
|
);
|
|
expect(screen.getByText("보내기")).toBeInTheDocument();
|
|
expect(screen.getByText("수정")).toBeInTheDocument();
|
|
});
|
|
|
|
it("2건 이상이면 모두 승인 버튼", () => {
|
|
const p = [
|
|
{ ...base, id: "a4" },
|
|
{ ...base, id: "a5" },
|
|
];
|
|
render(
|
|
<ApprovalCard saved="47분" pending={p} done={[]} onApprove={noop} onUndo={noop} onApproveAll={noop} />,
|
|
);
|
|
expect(screen.getByText(/모두 승인 \(2건\)/)).toBeInTheDocument();
|
|
});
|
|
|
|
it("done 행은 undo_label 을 보여준다", () => {
|
|
const done: ApprovalOut[] = [
|
|
{ ...base, id: "a1", risk: "low", cta: "", alt: "", undo_label: "원래 시간으로", status: "executed", time: "07:42", title: "치과 예약을 16:00로 옮겼어요" },
|
|
];
|
|
render(
|
|
<ApprovalCard saved="47분" pending={[]} done={done} onApprove={noop} onUndo={noop} onApproveAll={noop} />,
|
|
);
|
|
expect(screen.getByText("원래 시간으로")).toBeInTheDocument();
|
|
});
|
|
});
|