43 lines
3.2 KiB
TypeScript
43 lines
3.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
import { getPlatformWarehouse, listAllPlatformWarehouses, type PlatformWarehouseDetailResource } from '@/modules/warehouses'
|
|
import { resolveRouteLocation, routeLocation } from './routeLocations'
|
|
vi.mock('@/modules/warehouses', () => ({ getPlatformWarehouse: vi.fn(), listAllPlatformWarehouses: vi.fn() }))
|
|
const detail = {
|
|
warehouse: { id: '900', warehouseCode: 'ABE3', warehouseName: 'ABE3', warehouseType: 'FBA' },
|
|
addresses: [{ addressType: 'OPERATING', addressLine1: '200 Example Road', addressLine2: null, district: null, city: 'Example City', stateProvince: 'PA', postalCode: '18000', countryCode: 'US' }], capabilities: [],
|
|
} as unknown as PlatformWarehouseDetailResource
|
|
beforeEach(() => {
|
|
vi.mocked(listAllPlatformWarehouses).mockReset().mockResolvedValue([detail.warehouse])
|
|
vi.mocked(getPlatformWarehouse).mockReset().mockResolvedValue(detail)
|
|
})
|
|
describe('route warehouse address resolver', () => {
|
|
it('looks up ABE3 by exact FBA code then reads its detail, never sending the code as an address', async () => {
|
|
expect(await resolveRouteLocation(routeLocation('ABE3'))).toBe('200 Example Road, Example City, PA, 18000, US')
|
|
expect(listAllPlatformWarehouses).toHaveBeenCalledExactlyOnceWith({ keyword: 'ABE3', warehouseType: 'FBA' })
|
|
expect(getPlatformWarehouse).toHaveBeenCalledExactlyOnceWith('900')
|
|
})
|
|
it('uses the origin warehouse ID instead of searching its name', async () => {
|
|
await resolveRouteLocation({ kind: 'warehouse', label: '起运仓', warehouseId: '900' })
|
|
expect(listAllPlatformWarehouses).not.toHaveBeenCalled()
|
|
})
|
|
it('rejects partial code matches and duplicates', async () => {
|
|
vi.mocked(listAllPlatformWarehouses).mockResolvedValue([{ ...detail.warehouse, warehouseCode: 'ABE30' }])
|
|
await expect(resolveRouteLocation(routeLocation('ABE3'))).rejects.toThrow('未找到')
|
|
vi.mocked(listAllPlatformWarehouses).mockResolvedValue([detail.warehouse, detail.warehouse])
|
|
await expect(resolveRouteLocation(routeLocation('ABE3'))).rejects.toThrow('多个仓库')
|
|
expect(getPlatformWarehouse).not.toHaveBeenCalled()
|
|
})
|
|
it('rejects missing street addresses, multiple operating addresses and detail/code mismatch', async () => {
|
|
vi.mocked(getPlatformWarehouse).mockResolvedValue({ ...detail, addresses: [{ ...detail.addresses[0]!, addressLine1: '' }] })
|
|
await expect(resolveRouteLocation(routeLocation('ABE3'))).rejects.toThrow('完整仓库地址')
|
|
vi.mocked(getPlatformWarehouse).mockResolvedValue({ ...detail, addresses: [detail.addresses[0]!, detail.addresses[0]!] })
|
|
await expect(resolveRouteLocation(routeLocation('ABE3'))).rejects.toThrow('不唯一')
|
|
vi.mocked(getPlatformWarehouse).mockResolvedValue({ ...detail, warehouse: { ...detail.warehouse, warehouseCode: 'ONT8' } })
|
|
await expect(resolveRouteLocation(routeLocation('ABE3'))).rejects.toThrow('不一致')
|
|
})
|
|
it('preserves explicit order addresses without a directory request', async () => {
|
|
expect(await resolveRouteLocation(routeLocation('Ontario', '100 Example Street'))).toBe('Ontario 100 Example Street')
|
|
expect(getPlatformWarehouse).not.toHaveBeenCalled(); expect(listAllPlatformWarehouses).not.toHaveBeenCalled()
|
|
})
|
|
})
|