提交
This commit is contained in:
+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