Files
admin-web/src/modules/unified-orders/api/orderFulfillment.test.ts
T

51 lines
2.8 KiB
TypeScript

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: <T>(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' } })
})
})