test: align warehouse transfer destination contract

This commit is contained in:
2026-09-23 13:10:04 +08:00
parent 64fbde2c90
commit 0d145b84db
@@ -328,28 +328,19 @@ class WarehouseTransferServiceTest {
}
@Test
void transferCanEnterTheTransitWarehouseBeforeFbaDestinationIsKnown() {
void transferRejectsRequestWithoutDestination() {
WarehouseTransferRequests.Create request = new WarehouseTransferRequests.Create(
"IN-1", List.of(11L), "WH-1", null, "123 Pickup Road", 5,
new BigDecimal("0.2500"), "WAREHOUSE_PICKUP", LocalDateTime.of(2026, 9, 12, 10, 0),
null, null, null, "FBA destination will be supplied later", false, "key-no-fba",
List.of(new WarehouseTransferRequests.Item("SKU-1", "Product", 5, "MARK-1")));
when(inboundSnapshots.findId("TENANT-A", "IN-1")).thenReturn(101L);
when(orders.selectList(any())).thenReturn(List.of(historicalOrder()));
when(transfers.findNo(eq("TENANT-A"), org.mockito.ArgumentMatchers.anyString())).thenAnswer(invocation -> transfer(WarehouseTransferService.DRAFT));
when(transferItems.selectList(any())).thenReturn(List.of());
when(sourceOrders.selectList(any())).thenReturn(List.of());
service.create("TENANT-A", "USER-1", request);
ResponseStatusException exception = assertThrows(ResponseStatusException.class,
() -> service.create("TENANT-A", "USER-1", request));
ArgumentCaptor<WarehouseTransferOrder> transfer = ArgumentCaptor.forClass(WarehouseTransferOrder.class);
ArgumentCaptor<LastlegOrder> tailOrder = ArgumentCaptor.forClass(LastlegOrder.class);
verify(transfers).insert(transfer.capture());
verify(orders).insert(tailOrder.capture());
assertNull(transfer.getValue().getFbaWarehouseCode());
assertNull(transfer.getValue().getFbaShipmentNo());
assertNull(tailOrder.getValue().getFbaWarehouseCode());
assertEquals("WAREHOUSE_PICKUP", transfer.getValue().getDeliveryMethod());
assertEquals(400, exception.getStatusCode().value());
assertEquals("仓储转运必须选择 FBA 仓或私人仓", exception.getReason());
verifyNoInteractions(transfers);
}
@Test
@@ -391,11 +382,13 @@ class WarehouseTransferServiceTest {
@Test
void newTransitInboundCreatesSnapshotAndImmutableCartonMarksWithoutHistoricalInventory() {
WarehouseTransferRequests.Create request = new WarehouseTransferRequests.Create(
null, null, "WH-1", null, "123 Pickup Road", 5,
null, null, "WH-1", "ONT8", "FBA", "FBA-ONT8", "ONT8", "Amazon ONT8",
null, null, null, null, "123 Pickup Road", null, null, 5,
new BigDecimal("0.2500"), "WAREHOUSE_PICKUP", LocalDateTime.of(2026, 9, 12, 10, 0),
null, "TRACK-MUST-NOT-BE-SAVED", null, "Incoming transit cargo", true, "key-incoming",
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),
new WarehouseTransferRequests.Item("SKU-2", "Product B", 3, null)));
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());
when(sourceOrders.selectList(any())).thenReturn(List.of());
@@ -808,6 +801,14 @@ class WarehouseTransferServiceTest {
}
private static WarehouseTransferRequests.Create request(boolean needRelabel) {
if (!needRelabel) {
return new WarehouseTransferRequests.Create(
"IN-1", List.of(11L), "WH-1", null, "PRIVATE", null, null, null,
"123 Private Road", "92618", "Alice", "13800000000", "123 Private Road", null, null, 5,
new BigDecimal("0.2500"), "TRUCK", LocalDateTime.of(2026, 8, 20, 10, 0),
null, null, null, null, "remark", false, null, null, null, null, null, "key-1",
List.of(new WarehouseTransferRequests.Item("SKU-1", "Product", 5, "MARK-1")), null);
}
return new WarehouseTransferRequests.Create("IN-1", List.of(11L), "WH-1", "ONT8",
"123 FBA Road", 5, new BigDecimal("0.2500"), "TRUCK", LocalDateTime.of(2026, 8, 20, 10, 0), "FBA-SHP-1",
"TRACK-1", "BOX-1-5", "remark", needRelabel, "key-1",