import { autoFillPlacements, findMissingContainerNumberIssues, type ContainerUnitForPlacement, } from './container-placement.util'; describe('container-placement.util', () => { const units: ContainerUnitForPlacement[] = [ { bookingId: 'b1', bookingContainerId: 'c1', unitIndex: 0, label: 'REF · 1/1 · 20GP', teuSlots: 1, sizeFt: 20, containerNumber: 'ABCD1234567', }, { bookingId: 'b2', bookingContainerId: 'c2', unitIndex: 0, label: 'REF2 · 1/1 · 40GP', teuSlots: 2, sizeFt: 40, containerNumber: null, }, ]; it('auto-fills placements across slots', () => { const placements = autoFillPlacements(units, [1, 2]); expect(placements).toHaveLength(2); expect(placements[0].sequenceNo).toBe(1); expect(placements[1].sequenceNo).toBe(2); }); it('reports missing container numbers only when placement is empty', () => { const placements = autoFillPlacements(units, [1, 2]); const issues = findMissingContainerNumberIssues(units, placements); expect(issues).toHaveLength(0); expect(placements[1].containerNumber).toMatch(/^TBD-/); }); it('generates TBD placeholder for missing container numbers', () => { const single: ContainerUnitForPlacement[] = [ { bookingId: 'b2', bookingReference: 'BK-2026-000033', bookingContainerId: 'c2', unitIndex: 0, label: 'REF2 · 1/1 · 40GP', teuSlots: 2, sizeFt: 40, containerNumber: null, }, ]; const placements = autoFillPlacements(single, [1]); expect(placements[0].containerNumber).toBe('TBD-BK-2026-000033-1'); }); });