From ecded9e58b24606b62dcc8efa2da1dc9dfb04376 Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Fri, 16 Oct 2026 16:18:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WarehouseTransferForecastServiceTest.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferForecastServiceTest.java diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferForecastServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferForecastServiceTest.java new file mode 100644 index 000000000..737881332 --- /dev/null +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferForecastServiceTest.java @@ -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) 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()); + } +}