107 lines
5.2 KiB
TypeScript
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' } },
|
|
)
|
|
})
|
|
})
|