import { beforeEach, describe, expect, it, vi } from 'vitest' import { http } from '@/shared/api/http' import { getPlatformOrderFulfillmentTree, normalizeOrderFulfillmentTree } from './orderFulfillment' vi.mock('@/shared/api/http', () => ({ http: { get: vi.fn() }, unwrapApiResponse: (response: { data: T }) => response.data, })) describe('single-remainder order fulfillment contract', () => { beforeEach(() => vi.mocked(http.get).mockReset()) it('normalizes the new source-fragment plus one remainder model without double counting', () => { const tree = normalizeOrderFulfillmentTree({ rootOrderId: '10', rootOrderNo: 'CC-10', rootVersion: 3, originalPackageCount: 4, cumulativeLoadedPackageCount: 2, currentRemainderPackageCount: 2, fragments: [ { orderId: '10', orderNo: 'CC-10', splitSequence: 0, splitRole: 'COMPLETED_FRAGMENT', plannedPackageCount: 4, pickedPackageCount: 1, unpickedPackageCount: 0 }, { orderId: '11', orderNo: 'CC-10-1', splitSequence: 1, splitRole: 'COMPLETED_FRAGMENT', plannedPackageCount: 3, pickedPackageCount: 1, unpickedPackageCount: 0 }, { orderId: '12', orderNo: 'CC-10-2', splitSequence: 2, splitRole: 'ACTIVE_REMAINDER', plannedPackageCount: 2, pickedPackageCount: 0, unpickedPackageCount: 2 }, ], }, '10') expect(tree).toMatchObject({ rootOrderId: '10', originalPackageCount: 4, cumulativeLoadedPackageCount: 2, currentRemainderPackageCount: 2, historicalTwoChildModel: false, }) expect(tree.fragments.at(-1)).toMatchObject({ orderNo: 'CC-10-2', pickedPackageCount: 0, unpickedPackageCount: 2 }) }) it('keeps historical LOADED plus REMAINDER trees readable and marks them as historical', () => { const tree = normalizeOrderFulfillmentTree({ parentOrderId: 10, parentOrderNo: 'CC-10', parentVersion: 2, allocatedPackageCount: 1, remainingPackageCount: 3, children: [ { orderId: 11, orderNo: 'CC-10-1', splitSequence: 1, splitRole: 'LOADED', packageCount: 1, sourceOrderId: 10 }, { orderId: 12, orderNo: 'CC-10-2', splitSequence: 2, splitRole: 'REMAINDER', packageCount: 3, sourceOrderId: 10 }, ], }, '10') expect(tree.historicalTwoChildModel).toBe(true) expect(tree.originalPackageCount).toBe(4) expect(tree.fragments.map((item) => [item.pickedPackageCount, item.unpickedPackageCount])).toEqual([[1, 0], [0, 3]]) }) it('queries the real platform fulfillment-tree with tenant isolation', async () => { vi.mocked(http.get).mockResolvedValue({ data: { rootOrderId: '10', fragments: [] } }) await expect(getPlatformOrderFulfillmentTree('20', '10')).resolves.toMatchObject({ rootOrderId: '10' }) expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/10/fulfillment-tree', { params: { tenantId: '20' } }) }) })