98 lines
2.5 KiB
TypeScript
98 lines
2.5 KiB
TypeScript
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");
|
|
});
|