Files
edr-platform/apps/edr-freight-api/src/modules/train-scheduling/container-placement.util.spec.ts

60 lines
1.7 KiB
TypeScript

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');
});
});