import { adaptPendingReviews, adaptReviewSubmission } from "@/lib/adapters/reviews"; import type { PendingReviewResponseDto, SubmitReviewResponseDto, } from "@/lib/types/backend"; const PENDING_REVIEW_BASE: PendingReviewResponseDto = { review_task_id: 301, order_id: 101, workflow_id: "wf-101", current_step: "review", review_task_status: "pending", latest_revision_asset_id: null, current_revision_asset_id: null, latest_revision_version: null, revision_count: 0, pending_manual_confirm: false, created_at: "2026-03-27T00:00:00Z", }; const REVIEW_SUBMISSION_BASE: SubmitReviewResponseDto = { order_id: 101, workflow_id: "wf-101", decision: "rerun_scene", status: "queued", }; test("returns a business-empty queue state when no reviews are pending", () => { const viewModel = adaptPendingReviews([]); expect(viewModel.items).toEqual([]); expect(viewModel.state.kind).toBe("business-empty"); }); test("maps pending reviews to waiting-review queue items", () => { const viewModel = adaptPendingReviews([PENDING_REVIEW_BASE]); expect(viewModel.state.kind).toBe("ready"); expect(viewModel.items[0]).toMatchObject({ orderId: 101, reviewTaskId: 301, status: "waiting_review", }); }); test("maps review submission decision metadata", () => { const viewModel = adaptReviewSubmission(REVIEW_SUBMISSION_BASE); expect(viewModel).toMatchObject({ orderId: 101, workflowId: "wf-101", decision: "rerun_scene", status: "queued", decisionMeta: { label: "重跑场景", tone: "warning", }, }); });