生产更新:同步已提交的海外仓分析及业务修复(2026-10-16) #27
+56
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user