93 lines
5.4 KiB
JavaScript
93 lines
5.4 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { readFileSync } from 'node:fs'
|
|
import test from 'node:test'
|
|
|
|
const source = readFileSync(new URL('inbound-measurement.mjs', import.meta.url), 'utf8')
|
|
const read = (relativeUrl) => readFileSync(new URL(relativeUrl, import.meta.url), 'utf8')
|
|
const labelTests = read('../../firstleg/src/test/java/com/baiyue/firstleg/service/InboundCartonLabelServiceTest.java')
|
|
const measurementTests = read('../../firstleg/src/test/java/com/baiyue/firstleg/service/InboundMeasurementServiceTest.java')
|
|
const cartonTests = read('../../firstleg/src/test/java/com/baiyue/firstleg/service/CartonMeasurementServiceTest.java')
|
|
const reviewTests = read('../../firstleg/src/test/java/com/baiyue/firstleg/service/MeasurementReviewServiceTest.java')
|
|
|
|
test('measurement acceptance scans the stable box code frozen by first print', () => {
|
|
assert.match(source, /const boxCode = `\$\{inboundCode\}#\$\{originalPackageCount\}-1`/)
|
|
assert.doesNotMatch(source, /#V\d+#/)
|
|
})
|
|
|
|
test('reprint and Mojia scan share the same frozen box code variable', () => {
|
|
assert.match(source, /重复整单打印复用已冻结箱码映射[\s\S]*boxCode=\$\{boxCode\}/)
|
|
assert.match(source, /const firstScanResponse = await multipartRequest[\s\S]*boxCode, \.\.\.firstDimensions/)
|
|
})
|
|
|
|
test('measurement submission confirms weight evidence before submit', () => {
|
|
assert.match(source, /files\/measurements\/\$\{tenantId\}\/\$\{inboundId\}/)
|
|
assert.match(source, /\/weight-results\?\$\{query\(tenantId\)\}/)
|
|
assert.match(source, /\/weight-results\/\$\{created\.id\}\/confirm\?\$\{query\(tenantId\)\}/)
|
|
assert.match(source, /createConfirmedWeightEvidence[\s\S]*\/measurement\/submit/)
|
|
})
|
|
|
|
test('measurement fixture derives pallet resources from confirmed image count', () => {
|
|
assert.match(source, /waitSplitVariant\?\.palletCount \|\| 1/)
|
|
assert.match(source, /palletIds: warehouseResourcesReady\.palletIds/)
|
|
assert.match(source, /confirmedRows\.length === palletIds\.length/)
|
|
assert.doesNotMatch(source, /Math\.ceil\(Number\(totalVolumeCbm\)/)
|
|
assert.doesNotMatch(source, /Math\.ceil\(totalVolume \/ DEFAULT_PALLET_CAPACITY_CBM\)/)
|
|
})
|
|
|
|
test('volume ceiling removes binary floating point noise before scaling', () => {
|
|
assert.match(source, /Number\.EPSILON \* Math\.max\(1, Math\.abs\(value\)\) \* 4/)
|
|
})
|
|
|
|
test('measurement draft lets the server apply each dimension addition exactly once', () => {
|
|
assert.match(source, /length: replacement\.length \+ dimensionAddition/)
|
|
assert.match(source, /coefficientMode: 'ADD'/)
|
|
assert.match(source, /measuredItem\.outerLengthCm == null/)
|
|
assert.doesNotMatch(source, /outerLengthCm: item\.outerLengthCm/)
|
|
assert.doesNotMatch(source, /outerLengthCm: measuredItem\.outerLengthCm/)
|
|
assert.match(cartonTests, /getOuterLengthCm\(\)\)\.isEqualByComparingTo\("62\.000"\)/)
|
|
})
|
|
|
|
test('demo package freezes repeated label printing and Mojia dimension replacement', () => {
|
|
assert.match(labelTests, /repeatedAndPartialPrintsReadFrozenMappingWithoutReallocation/)
|
|
assert.match(labelTests, /changedCargoKeepsTheFirstFrozenBoxCodes/)
|
|
assert.match(cartonTests, /repeatedScanReplacesDeviceValuesButPreservesManualCountAndOldImageIsDeleted/)
|
|
assert.match(source, /增量 fixture 形成动态真实独立货物测量明细/)
|
|
})
|
|
|
|
test('demo package covers OCR failure, manual confirmation, aggregation and stale versions', () => {
|
|
assert.match(source, /OCR无有效重量时转人工确认/)
|
|
assert.match(source, /称重旧版本确认被拒绝且不覆盖已确认结果/)
|
|
assert.match(source, /图片张数决定托数且净重汇总已落地/)
|
|
assert.match(measurementTests, /ocrFailureCreatesManualWeightThatCanBeAdjustedAndConfirmed/)
|
|
assert.match(measurementTests, /confirmingFifthPalletSeparatelyAggregatesGrossAndCargoNetWeight/)
|
|
assert.match(measurementTests, /confirmingWithStaleVersionDoesNotTreatRequestAsIdempotent/)
|
|
})
|
|
|
|
test('demo package keeps pallet pages bounded and historical snapshots read-only', () => {
|
|
assert.match(source, /weight-pallet-options[^\n]+page=1&size=20&keyword=/)
|
|
assert.match(source, /records\.length <= 20/)
|
|
assert.match(measurementTests, /detailUsesStoredPalletSnapshotAfterCandidateBecomesUnavailable/)
|
|
})
|
|
|
|
test('approval freezes measurement and requires quantity weight and volume conservation', () => {
|
|
assert.match(source, /审核及合托完成后箱码尺寸与图片快照不可再覆盖/)
|
|
assert.match(measurementTests, /approvedMeasurementCannotBeResubmittedOrMutateFrozenTotals/)
|
|
assert.match(reviewTests, /shouldApproveMultipleCargoLinesOnlyWhenAllFrozenTotalsMatch/)
|
|
assert.match(reviewTests, /shouldRejectApprovalWhenVolumeSnapshotDoesNotConserve/)
|
|
assert.match(source, /actualPackageCount[^\n]+originalPackageCount/)
|
|
assert.match(source, /actualGrossWeightKg[^\n]+weightEvidence\.grossWeightKg/)
|
|
assert.match(source, /actualNetWeightKg[^\n]+weightEvidence\.netWeightKg/)
|
|
assert.match(source, /actualVolumeCbm[^\n]+totalVolume/)
|
|
assert.match(source, /volumeWeightKg[^\n]+volumeWeight/)
|
|
})
|
|
|
|
test('dropship measurement completes the formal palletization workflow before smart loading', () => {
|
|
assert.match(source, /pda-dropship\/tasks\/pending/)
|
|
assert.match(source, /pda-dropship\/tasks\/\$\{taskId\}\/claim/)
|
|
assert.match(source, /pallets\/open/)
|
|
assert.match(source, /pallets\/\$\{palletId\}\/scan/)
|
|
assert.match(source, /pallets\/\$\{palletId\}\/seal/)
|
|
assert.match(source, /dropship \? \['WAIT_PALLETIZE'\] : \['WAIT_SPLIT'\]/)
|
|
assert.match(source, /一件代发合托完成后进入智能分柜门禁/)
|
|
})
|