48 lines
2.9 KiB
TypeScript
48 lines
2.9 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { overseasHttp } from '@/shared/api/overseasHttp'
|
|
import { createFbaAppointment, getFbaAppointment, listInboundOrders, updateFbaAppointment } from './inboundOrders'
|
|
|
|
vi.mock('@/shared/api/overseasHttp', () => ({ overseasHttp: { get: vi.fn(), post: vi.fn(), put: vi.fn() } }))
|
|
|
|
describe('inbound order overseas API', () => {
|
|
beforeEach(() => {
|
|
vi.mocked(overseasHttp.get).mockReset()
|
|
vi.mocked(overseasHttp.post).mockReset()
|
|
vi.mocked(overseasHttp.put).mockReset()
|
|
})
|
|
|
|
it('loads appointment details and updates the existing appointment without replacing its lines', async () => {
|
|
const detail = { id: '1', customerId: '190000000000000001', appointmentNo: 'APT/1', appointmentAt: '2026-08-20T10:30:00', expectedLoadingAt: '2026-08-20T09:00:00', appointmentStatus: 'SUCCESS', selectedCount: 2, fbaWarehouseCode: 'ONT8', items: [] }
|
|
vi.mocked(overseasHttp.get).mockResolvedValue({ code: '200', message: 'success', data: detail })
|
|
vi.mocked(overseasHttp.put).mockResolvedValue({ code: '200', message: 'success', data: detail })
|
|
|
|
await getFbaAppointment('190000000000000001', 'APT/1')
|
|
await updateFbaAppointment('APT/1', { customerId: '190000000000000001', appointmentAt: detail.appointmentAt, expectedLoadingAt: detail.expectedLoadingAt, appointmentStatus: 'SUCCESS' })
|
|
|
|
expect(overseasHttp.get).toHaveBeenCalledWith('/platform/v1/last-leg/inbound-plans/fba-appointments/APT%2F1', { params: { customerId: '190000000000000001' } })
|
|
expect(overseasHttp.put).toHaveBeenCalledWith('/platform/v1/last-leg/inbound-plans/fba-appointments/APT%2F1', expect.objectContaining({ customerId: '190000000000000001' }))
|
|
})
|
|
|
|
it('loads the paginated list across all customers without a customer scope', async () => {
|
|
vi.mocked(overseasHttp.get).mockResolvedValue({ code: '200', message: 'success', data: { records: [], page: 1, size: 20, total: 0, pages: 0 } })
|
|
await listInboundOrders({ page: 1, size: 20, appointmentStatus: 'UNAPPOINTED' })
|
|
expect(overseasHttp.get).toHaveBeenCalledWith('/platform/v1/last-leg/inbound-plans', {
|
|
params: { page: 1, size: 20, appointmentStatus: 'UNAPPOINTED' },
|
|
})
|
|
})
|
|
|
|
it('preserves selected line ids as strings when creating an appointment', async () => {
|
|
vi.mocked(overseasHttp.post).mockResolvedValue({ code: '200', message: 'success', data: { id: '1', appointmentNo: 'APT-1', appointmentStatus: 'SUCCESS', selectedCount: 1, fbaWarehouseCode: 'ONT8' } })
|
|
const payload = {
|
|
customerId: '190000000000000001',
|
|
lineIds: ['190000000000000099'],
|
|
appointmentNo: 'APT-1',
|
|
appointmentAt: '2026-08-20T10:30:00',
|
|
expectedLoadingAt: '2026-08-20T09:00:00',
|
|
appointmentStatus: 'SUCCESS' as const,
|
|
}
|
|
await createFbaAppointment(payload)
|
|
expect(overseasHttp.post).toHaveBeenCalledWith('/platform/v1/last-leg/inbound-plans/fba-appointments/batch', payload)
|
|
})
|
|
})
|