This commit is contained in:
2026-08-17 13:24:55 +08:00
parent 6a0c0b9229
commit 4a9438315c
20 changed files with 299 additions and 143 deletions
@@ -1,16 +1,26 @@
import { describe, expect, it } from 'vitest'
import { containerRequirementError, createBlankContainerRequirement } from './containerRequirements'
import { bookingContainerError, createBlankBookingContainer, selectBookingContainerType } from './containerRequirements'
describe('ocean booking container requirements', () => {
it('uses the fixed platform specification for a new container type', () => {
expect(createBlankContainerRequirement()).toEqual({
containerType: '40HC', containerKind: 'FCL', capacityCbm: 76, maxWeightKg: 28000, quantity: 1,
describe('ocean booking real containers', () => {
it('starts with one real container and applies the fixed platform specification', () => {
const container = createBlankBookingContainer()
expect(container).toEqual({
containerNo: '', containerType: '40HC', containerKind: 'FCL', capacityCbm: 76, maxWeightKg: 28000,
})
selectBookingContainerType(container, '20GP')
expect(container).toMatchObject({ containerType: '20GP', capacityCbm: 33, maxWeightKg: 28000 })
})
it('rejects missing or non-positive capacity, weight and quantity', () => {
expect(containerRequirementError([{ ...createBlankContainerRequirement(), quantity: 0 }])).toContain('固定规格')
expect(containerRequirementError([{ containerType: 'UNKNOWN', containerKind: 'FCL', capacityCbm: 1, maxWeightKg: 1, quantity: 1 }])).toContain('UNKNOWN')
expect(containerRequirementError([createBlankContainerRequirement()])).toBeNull()
it('requires unique real container numbers and fixed specifications', () => {
const first = { ...createBlankBookingContainer(), containerNo: 'MSCU1234567' }
expect(bookingContainerError([createBlankBookingContainer()])).toContain('尚未填写集装箱号')
expect(bookingContainerError([first, { ...first, containerNo: 'mscu1234567' }])).toContain('重复')
expect(bookingContainerError([{ ...first, capacityCbm: 75 }])).toContain('固定规格')
expect(bookingContainerError([first])).toBeNull()
})
it('limits one booking to twenty real containers', () => {
const containers = Array.from({ length: 21 }, (_, index) => ({ ...createBlankBookingContainer(), containerNo: `MSCU${index}` }))
expect(bookingContainerError(containers)).toContain('最多登记 20 个')
})
})