feat: bootstrap auto virtual tryon admin frontend

This commit is contained in:
afei A
2026-03-27 23:38:50 +08:00
commit 98c6b741d6
119 changed files with 19046 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
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",
},
});
});