fix(loading): remove ISO container validation across PDA fulfillment

This commit is contained in:
2026-10-23 11:12:36 +08:00
parent c38f1758c5
commit 9c19980736
22 changed files with 215 additions and 162 deletions
@@ -1,20 +1,41 @@
package com.baiyue.common.event;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
class ContainerNumbersTest {
/** 规范化仍保持确定性,事件只能接受已冻结的规范值。 */
@Test
void normalizesWhitespaceAndCaseButCanonicalFactsRequireExactIso6346Value() {
void normalizesWhitespaceAndCaseButCanonicalFactsRequireExactValue() {
assertThat(ContainerNumbers.normalizeRequired(" zcsu 7881970 ")).isEqualTo("ZCSU7881970");
assertThat(ContainerNumbers.requireCanonical("ZCSU7881970")).isEqualTo("ZCSU7881970");
assertThatThrownBy(() -> ContainerNumbers.requireCanonical("zcsu7881970"))
.hasMessageContaining("normalized");
assertThatThrownBy(() -> ContainerNumbers.normalizeRequired("ZCSU7881971"))
.hasMessageContaining("check digit");
assertThatThrownBy(() -> ContainerNumbers.normalizeRequired("CAB-260831-0001"))
.hasMessageContaining("ISO 6346");
assertThatThrownBy(() -> ContainerNumbers.requireCanonical(" JZXH10231043 "))
.hasMessageContaining("normalized");
}
/** 非 ISO 柜号可以作为事件事实,不在下游重新阻断。 */
@ParameterizedTest
@ValueSource(strings = {"JZXH10231043", "ZCSU7881971", "MSCA6639870", "ABC", "ABCU123456789012", "LOCAL-2026-001"})
void acceptsNonIsoNumber(String containerNo) {
assertThat(ContainerNumbers.normalizeRequired(" " + containerNo.toLowerCase(java.util.Locale.ROOT) + " "))
.isEqualTo(containerNo);
assertThat(ContainerNumbers.requireCanonical(containerNo)).isEqualTo(containerNo);
}
/** 规范化前后均不得将空白柜号作为业务事实。 */
@ParameterizedTest
@NullAndEmptySource
@ValueSource(strings = {" ", "\u00a0\u3000"})
void rejectsMissingNumber(String containerNo) {
assertThatThrownBy(() -> ContainerNumbers.normalizeRequired(containerNo))
.isInstanceOf(IllegalArgumentException.class).hasMessageContaining("required");
assertThatThrownBy(() -> ContainerNumbers.requireCanonical(containerNo))
.isInstanceOf(IllegalArgumentException.class).hasMessageContaining("required");
}
}