This commit is contained in:
2026-10-16 16:18:39 +08:00
parent 488c0318ff
commit ecded9e58b
@@ -0,0 +1,56 @@
package com.baiyue.lastleg.transfer.service;
import com.baiyue.lastleg.transfer.dto.WarehouseTransferRequests;
import com.baiyue.lastleg.transfer.entity.*;
import com.baiyue.lastleg.transfer.repository.TransferForecastRepository;
import org.junit.jupiter.api.BeforeEach;
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.*;
import static org.mockito.ArgumentMatchers.*;
class WarehouseTransferForecastServiceTest {
final TransferForecastRepository repository = mock(TransferForecastRepository.class);
final WarehouseTransferService transfers = mock(WarehouseTransferService.class);
final WarehouseTransferForecastService service = new WarehouseTransferForecastService();
WarehouseTransferOrder order;
WarehouseTransferItem item;
WarehouseTransferCarton carton;
/** 创建已有箱唛及清点数据,补箱不得重建原记录。 */
@BeforeEach void setup() {
ReflectionTestUtils.setField(service,"repository",repository); ReflectionTestUtils.setField(service,"transfers",transfers);
order = new WarehouseTransferOrder(); order.setId(1L); order.setCustomerId("C"); order.setTransferNo("WT1"); order.setInboundCode("WT1"); order.setStatus("WAIT_PDA_RECEIVING"); order.setPackageCount(2);
item = new WarehouseTransferItem(); item.setId(2L); item.setPackageCount(2); item.setDeclaredQuantity(10L);
carton = new WarehouseTransferCarton(); carton.setCartonIndex(2); carton.setCartonMark("ORIGINAL"); carton.setStatus("COUNTED");
when(repository.lock("C","WT1")).thenReturn(order); when(repository.items("C",1L)).thenReturn(List.of(item));
}
/** 补箱追加编号,预报件数与原箱号保持不变,相同快照重放不重复增加。 */
@Test void appendPreservesMarksAndQuantityAndReplays() {
when(repository.cartons("C",1L)).thenReturn(List.of(carton));
var request = new WarehouseTransferRequests.IncreaseForecastCartons(2,2L,2,4);
service.increase("C","WT1","OP",request);
var added = org.mockito.ArgumentCaptor.forClass(List.class);
verify(repository).append(eq(order),eq(item),eq(0),added.capture(),any(),eq("OP"));
var rows = (List<WarehouseTransferCarton>) added.getValue();
assertEquals(2,rows.size()); assertEquals(3,rows.get(0).getCartonIndex()); assertEquals(4,rows.get(1).getCartonIndex());
assertNotEquals(rows.get(0).getCartonMark(),rows.get(1).getCartonMark()); assertEquals("ORIGINAL",carton.getCartonMark());
assertEquals(10L,item.getDeclaredQuantity()); assertEquals(4,order.getPackageCount());
clearInvocations(repository); service.increase("C","WT1","OP",request);
verify(repository,never()).append(any(),any(),anyInt(),anyList(),any(),anyString());
}
/** 不允许完工后、跨单SKU、旧快照或减少箱数。 */
@Test void rejectsCompletedForeignStaleAndDecreasing() {
order.setStatus("WAIT_CUSTOMER_CONFIRMATION");
assertThrows(ResponseStatusException.class,()->service.increase("C","WT1","OP",new WarehouseTransferRequests.IncreaseForecastCartons(2,2L,2,3)));
order.setStatus("WAIT_PDA_RECEIVING");
for(var request:List.of(new WarehouseTransferRequests.IncreaseForecastCartons(2,99L,2,3),new WarehouseTransferRequests.IncreaseForecastCartons(1,2L,2,3),new WarehouseTransferRequests.IncreaseForecastCartons(2,2L,2,1)))
assertThrows(ResponseStatusException.class,()->service.increase("C","WT1","OP",request));
verify(repository,never()).append(any(),any(),anyInt(),anyList(),any(),anyString());
}
}