import { describe, expect, it } from 'vitest'; import { DEFAULT_XFX_LOGISTICS_PRICING } from '@dukang/shared-types'; import { calcDeliveryFreightAmount } from './delivery-freight.util'; describe('calcDeliveryFreightAmount', () => { it('瓶装按小飞侠默认计价:2瓶6元', () => { expect( calcDeliveryFreightAmount({ quantity: 2, bottlesPerUnit: 1, deliveryType: 'LOCAL', provider: 'XFX', }), ).toBe(6); }); it('箱装先换算瓶数:1箱6瓶=14元', () => { expect( calcDeliveryFreightAmount({ quantity: 1, bottlesPerUnit: 6, deliveryType: 'LOCAL', provider: 'XFX', }), ).toBe(14); }); it('现场提货不计运费', () => { expect( calcDeliveryFreightAmount({ quantity: 2, bottlesPerUnit: 1, deliveryType: 'ON_SITE_PICKUP', provider: 'XFX', }), ).toBeNull(); }); it('无承运商计价时返回 null;有自定义规则则用之', () => { expect( calcDeliveryFreightAmount({ quantity: 2, bottlesPerUnit: 1, deliveryType: 'CROSS_CITY', provider: 'LOGISTICS', }), ).toBeNull(); expect( calcDeliveryFreightAmount({ quantity: 2, bottlesPerUnit: 1, deliveryType: 'CROSS_CITY', provider: 'LOGISTICS', pricing: { ...DEFAULT_XFX_LOGISTICS_PRICING }, }), ).toBe(6); }); it('同城即使 provider=MANUAL 也按小飞侠默认计价', () => { expect( calcDeliveryFreightAmount({ quantity: 2, bottlesPerUnit: 1, deliveryType: 'LOCAL', provider: 'MANUAL', }), ).toBe(6); }); it('城市小飞侠编码 ZZXFX 使用默认计价', () => { expect( calcDeliveryFreightAmount({ quantity: 4, bottlesPerUnit: 1, deliveryType: 'LOCAL', provider: 'MANUAL', providerCode: 'ZZXFX', }), ).toBe(10); }); });