import { adaptOrderDetail, adaptOrderSummary } from "@/lib/adapters/orders"; import type { AssetDto, OrderDetailResponseDto } from "@/lib/types/backend"; const ORDER_BASE: OrderDetailResponseDto = { order_id: 101, customer_level: "mid", service_mode: "semi_pro", status: "waiting_review", model_id: 7, pose_id: 8, garment_asset_id: 9, scene_ref_asset_id: 10, final_asset_id: null, workflow_id: "wf-101", current_step: "review", current_revision_asset_id: null, current_revision_version: null, latest_revision_asset_id: null, latest_revision_version: null, revision_count: 0, review_task_status: null, pending_manual_confirm: false, final_asset: null, created_at: "2026-03-27T00:00:00Z", updated_at: "2026-03-27T00:10:00Z", }; const ASSET_BASE: AssetDto = { id: 11, order_id: 101, asset_type: "final", step_name: "export", parent_asset_id: null, root_asset_id: null, version_no: 0, is_current_version: false, uri: "https://cdn.example.com/final-11.png", metadata_json: null, created_at: "2026-03-27T00:09:00Z", }; test("marks mock asset uris as mock previews", () => { const viewModel = adaptOrderDetail({ ...ORDER_BASE, final_asset_id: 11, final_asset: { ...ASSET_BASE, uri: "mock://result-11", }, }); expect(viewModel.finalAsset?.isMock).toBe(true); expect(viewModel.hasMockAssets).toBe(true); }); test("keeps missing final assets and empty asset lists as business-empty states", () => { const viewModel = adaptOrderDetail(ORDER_BASE, []); expect(viewModel.finalAsset).toBeNull(); expect(viewModel.finalAssetState.kind).toBe("business-empty"); expect(viewModel.assets).toEqual([]); expect(viewModel.assetGalleryState.kind).toBe("business-empty"); }); test("maps order summary status metadata and current step labels", () => { const viewModel = adaptOrderSummary(ORDER_BASE); expect(viewModel).toMatchObject({ orderId: 101, workflowId: "wf-101", status: "waiting_review", currentStep: "review", currentStepLabel: "人工审核", statusMeta: { label: "待审核", tone: "warning", }, }); }); test("maps key order detail labels and status metadata", () => { const viewModel = adaptOrderDetail( { ...ORDER_BASE, status: "failed", current_step: "fusion", }, [ASSET_BASE], ); expect(viewModel.statusMeta).toEqual({ label: "失败", tone: "danger", }); expect(viewModel.currentStepLabel).toBe("融合"); expect(viewModel.assetGalleryState.kind).toBe("ready"); });