This commit is contained in:
2026-10-16 17:43:07 +08:00
parent c9186c37a5
commit 9ea03eb540
7 changed files with 168 additions and 29 deletions
@@ -619,7 +619,7 @@ class WarehouseTransferServiceTest {
new BigDecimal("0.2500"), "WAREHOUSE_PICKUP", LocalDateTime.of(2026, 9, 12, 10, 0),
null, null, "TRACK-MUST-NOT-BE-SAVED", null, "Incoming transit cargo", true,
null, null, null, null, null, "key-incoming",
List.of(new WarehouseTransferRequests.Item("SKU-1", "Product A", 2, null),
List.of(new WarehouseTransferRequests.Item("SKU-1", "Product A", 2, null, null, List.of("BX-PRINTED1", "BX-PRINTED2")),
new WarehouseTransferRequests.Item("SKU-2", "Product B", 3, null)), null);
when(transfers.findNo(eq("TENANT-A"), anyString())).thenAnswer(invocation -> transfer(WarehouseTransferService.DRAFT));
when(transferItems.selectList(any())).thenReturn(List.of());
@@ -647,6 +647,8 @@ class WarehouseTransferServiceTest {
assertEquals("PENDING_BINDING", tailOrder.getValue().getRelabelStatus());
assertEquals(List.of(1, 2, 3, 4, 5), cartons.getAllValues().stream()
.map(WarehouseTransferCarton::getCartonIndex).toList());
assertEquals(List.of("BX-PRINTED1", "BX-PRINTED2"), cartons.getAllValues().subList(0, 2).stream()
.map(WarehouseTransferCarton::getCartonMark).toList());
assertTrue(cartons.getAllValues().stream().allMatch(value -> value.getCartonMark()
.matches("BX-[0-9A-Z]+")));
when(transfers.findKey("TENANT-A", request.idempotencyKey())).thenReturn(transfer.getValue());
@@ -814,7 +816,20 @@ class WarehouseTransferServiceTest {
verify(transfers, never()).updateById(any(WarehouseTransferOrder.class));
}
/** 草稿预先打印与后续正式提交使用同一服务端箱唛。 */
/** 未建单时生成的箱唛必须完整且不重复。 */
@Test
void duplicateOrMismatchedPreprintedMarksRejectBeforeCreatingOrder() throws Exception {
var mapper = new ObjectMapper().findAndRegisterModules();
for (var marks : List.of(List.of("BX-ONE"), List.of("BX-ONE", "BX-ONE", "BX-3", "BX-4", "BX-5"))) {
com.fasterxml.jackson.databind.node.ObjectNode json = mapper.valueToTree(request(false));
json.remove("inboundModeValid");
((com.fasterxml.jackson.databind.node.ObjectNode) json.get("items").get(0)).set("cartonMarks", mapper.valueToTree(marks));
var input = mapper.treeToValue(json, WarehouseTransferRequests.Create.class);
assertThrows(ResponseStatusException.class, () -> service.create("TENANT-A", "USER-1", input));
}
verify(transfers, never()).insert(any(WarehouseTransferOrder.class));
}
@Test
void draftCanPrintPersistedCartonLabels() {
WarehouseTransferOrder transfer = persistedTransfer(); transfer.setStatus(WarehouseTransferService.DRAFT);