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