Files

60 lines
1.6 KiB
TypeScript

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",
},
});
});