This commit is contained in:
2026-10-16 13:57:39 +08:00
parent 5855529e97
commit 358feb5567
4 changed files with 166 additions and 14 deletions
@@ -0,0 +1,60 @@
package com.baiyue.lastleg.transfer.service;
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCarton;
import com.baiyue.lastleg.returnreceipt.entity.ReturnInventoryCartonItem;
import com.baiyue.lastleg.returnreceipt.entity.ReturnOrder;
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonItemMapper;
import com.baiyue.lastleg.returnreceipt.mapper.ReturnInventoryCartonMapper;
import com.baiyue.lastleg.returnreceipt.mapper.ReturnOrderMapper;
import com.baiyue.lastleg.transfer.repository.TransferReturnSourceRepository;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.server.ResponseStatusException;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
class TransferReturnSourceTest {
/** 来源查询应排除占用和未清点箱,并保留整箱内的全部 SKU。 */
@Test
void returnsOnlyAvailableConfirmedCartonsWithContents() {
var orders = mock(ReturnOrderMapper.class);
var cartons = mock(ReturnInventoryCartonMapper.class);
var items = mock(ReturnInventoryCartonItemMapper.class);
var repository = new TransferReturnSourceRepository();
ReflectionTestUtils.setField(repository, "orders", orders);
ReflectionTestUtils.setField(repository, "cartons", cartons);
ReflectionTestUtils.setField(repository, "items", items);
var service = new WarehouseTransferService();
ReflectionTestUtils.setField(service, "returnSources", repository);
var order = new ReturnOrder();
order.setOverseasWarehouseId("WH-1");
when(orders.findNo("C-1", "RET-1")).thenReturn(order);
var available = carton(1L, "AVAILABLE", "CONFIRMED");
when(cartons.currentReturnCartons("C-1", "WH-1", "RET-1")).thenReturn(List.of(
available, carton(2L, "OUTBOUND_PENDING", "CONFIRMED"), carton(3L, "AVAILABLE", "PENDING")));
var sku = new ReturnInventoryCartonItem();
sku.setCartonId(1L); sku.setSkuCode("SKU-1"); sku.setQuantity(3L);
when(items.listCartons(List.of(1L))).thenReturn(List.of(sku));
var result = service.sourceCartons("C-1", "WH-1", "RETURN_ORDER:RET-1");
assertEquals(1, result.size());
assertEquals("BOX-1", result.get(0).cartonMark());
assertEquals("SKU-1", result.get(0).items().get(0).skuCode());
assertEquals(3L, result.get(0).items().get(0).quantity());
assertThrows(ResponseStatusException.class,
() -> service.sourceCartons("C-1", "OTHER-WH", "RETURN_ORDER:RET-1"));
verify(cartons, never()).currentReturnCartons("C-1", "OTHER-WH", "RET-1");
}
/** 构造不同库存状态的退货箱以验证来源筛选边界。 */
private static ReturnInventoryCarton carton(long id, String status, String countStatus) {
var carton = new ReturnInventoryCarton();
carton.setId(id); carton.setCartonMark("BOX-" + id); carton.setTotalQuantity(3L);
carton.setStatus(status); carton.setCountStatus(countStatus);
return carton;
}
}
@@ -490,6 +490,8 @@ class WarehouseTransferServiceTest {
@Test
void submittingOldDraftRechecksRelabelCartonOwnership() {
var transfer = transfer(WarehouseTransferService.DRAFT);
transfer.setOperatingWarehouseId("WH-1");
transfer.setInboundCode("IN-1");
transfer.setNeedRelabel(true);
when(transfers.lockNo("TENANT-A", "WTR-1")).thenReturn(transfer);
var binding = new com.baiyue.lastleg.transfer.entity.WarehouseTransferRelabelBinding();