Files
admin-web/src/modules/first-leg-orders/api/platformFirstLegOrders.test.ts
T

107 lines
5.2 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
import { http } from '@/shared/api/http'
import {
getPlatformTenantOrderStatistics,
acceptPlatformFirstLegOrder,
approvePlatformFirstLegOrder,
cancelPlatformFirstLegOrder,
completePlatformFirstLegOrder,
getPlatformFirstLegOrder,
listPlatformFirstLegOrders,
startPlatformFirstLegOrder,
updatePlatformFirstLegOrderExpress,
} from './platformFirstLegOrders'
vi.mock('@/shared/api/http', () => ({
http: { get: vi.fn(), post: vi.fn(), put: vi.fn() },
unwrapApiResponse: <T>(response: { data: T }) => response.data,
}))
describe('platform first-leg order API', () => {
beforeEach(() => {
vi.mocked(http.get).mockReset()
vi.mocked(http.post).mockReset()
vi.mocked(http.put).mockReset()
})
it('uses the submitted master-order statistics contract and preserves the long customer id', async () => {
vi.mocked(http.get).mockResolvedValue({ code: '200', data: { tenantId: '9007199254740993', totalSubmittedOrders: 12, currentMonthSubmittedOrders: 3, monthStart: '2026-08-01T00:00:00+08:00', nextMonthStart: '2026-09-01T00:00:00+08:00', zoneId: 'Asia/Shanghai', asOf: '2026-08-13T12:00:00+08:00' } })
const result = await getPlatformTenantOrderStatistics('9007199254740993')
expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/first-leg/tenant-statistics', { params: { tenantId: '9007199254740993' } })
expect(result).toMatchObject({ tenantId: '9007199254740993', totalSubmittedOrders: 12, currentMonthSubmittedOrders: 3, zoneId: 'Asia/Shanghai' })
})
it('queries the cross-tenant review queue with one server-paginated request', async () => {
const page = { records: [], page: 2, size: 20, total: 0, pages: 0 }
vi.mocked(http.get).mockResolvedValue({ code: '200', message: 'success', data: page })
await expect(listPlatformFirstLegOrders({
keyword: 'FL2026', status: 'SUBMITTED', createdFrom: '2026-07-01T00:00:00', createdTo: '2026-07-31T23:59:59', page: 2, size: 20,
})).resolves.toEqual(page)
expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/first-leg', {
params: {
keyword: 'FL2026', status: 'SUBMITTED', createdFrom: '2026-07-01T00:00:00', createdTo: '2026-07-31T23:59:59', page: 2, size: 20,
},
})
expect(http.get).toHaveBeenCalledTimes(1)
})
it('adds the optional enterprise filter without changing server pagination', async () => {
const page = { records: [], page: 1, size: 20, total: 0, pages: 0 }
vi.mocked(http.get).mockResolvedValue({ code: '200', message: 'success', data: page })
await listPlatformFirstLegOrders({ tenantId: '2084455952401629185', status: 'SUBMITTED', page: 1, size: 20 })
expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/first-leg', {
params: { tenantId: '2084455952401629185', status: 'SUBMITTED', page: 1, size: 20 },
})
})
it('normalizes string pagination fields returned by the gateway', async () => {
vi.mocked(http.get).mockResolvedValue({
code: '200',
message: 'success',
data: { records: [], page: '1', size: '20', total: '6', pages: '1' },
})
await expect(listPlatformFirstLegOrders({ status: 'SUBMITTED', page: 1, size: 20 })).resolves.toMatchObject({
page: 1,
size: 20,
total: 6,
pages: 1,
})
})
it('uses the platform lifecycle routes and target tenant query parameter', async () => {
vi.mocked(http.get).mockResolvedValue({ code: '200', message: 'success', data: { order: {} } })
vi.mocked(http.post).mockResolvedValue({ code: '200', message: 'success', data: null })
await getPlatformFirstLegOrder('10001', '90001')
await approvePlatformFirstLegOrder('10001', '90001')
await acceptPlatformFirstLegOrder('10001', '90001')
await startPlatformFirstLegOrder('10001', '90001')
await completePlatformFirstLegOrder('10001', '90001')
await cancelPlatformFirstLegOrder('10001', '90001', '客户取消')
expect(http.get).toHaveBeenCalledWith('/platform/v1/orders/first-leg/90001', { params: { tenantId: '10001' } })
expect(http.post).toHaveBeenNthCalledWith(1, '/platform/v1/orders/first-leg/90001/approve', undefined, { params: { tenantId: '10001' } })
expect(http.post).toHaveBeenNthCalledWith(2, '/platform/v1/orders/first-leg/90001/accept', undefined, { params: { tenantId: '10001' } })
expect(http.post).toHaveBeenNthCalledWith(3, '/platform/v1/orders/first-leg/90001/start', undefined, { params: { tenantId: '10001' } })
expect(http.post).toHaveBeenNthCalledWith(4, '/platform/v1/orders/first-leg/90001/complete', undefined, { params: { tenantId: '10001' } })
expect(http.post).toHaveBeenNthCalledWith(5, '/platform/v1/orders/first-leg/90001/cancel', { reason: '客户取消' }, { params: { tenantId: '10001' } })
})
it('writes the backend express contract as names, not a guessed master-data ID', async () => {
vi.mocked(http.put).mockResolvedValue({ code: '200', message: 'success', data: null })
await updatePlatformFirstLegOrderExpress('10001', '90001', { expressCompany: '顺丰速运', expressTrackingNo: 'SF123456' })
expect(http.put).toHaveBeenCalledWith(
'/platform/v1/orders/first-leg/90001/express',
{ expressCompany: '顺丰速运', expressTrackingNo: 'SF123456' },
{ params: { tenantId: '10001' } },
)
})
})